Supportnet / Forum / Skripte(PHP,ASP,Perl...)
nächste Spalte einer mysqldb auswählen
Frage
Hallo Leute,
ich habe eine Mysqldatenbank die im Prinzip so aussieht:
id |spa|spb|spc|spd|spe
=======================
1 |10 | 0 | 0 | 0 |
2 | 0 | 20| 25| 0 |
3 | 0 | 0 | 0 |40 |45
Nun habe ich mir ein Abfrageformular und eine Ausgabe gebastelt die mir den Inhalt eines einzelnen Feldes anzeigt. Bsp: Suchebegriff "spb" und "20". Es wird die ID 2 und der Inhalt 20 ausgegeben.
Soweit so gut. Nun möchte ich aber das nicht nur die 20 ausgegeben wird sondern auch noch die 25. Oder wenn ich nach "spd und 40" auswähle soll auch die 45 mi ausgegeben werden.
Hier weiss ich irgendwie nicht weiter. Hat jemand eine Idee?
Viele Grüße
Andreas
Antwort 1 von Nessus
Wo ist denn das Problem?
Du gibst einfach alle Felder aus und überprüfst ob irgendwo eine 0 vorkommt, die kannst Du ja ohne weiteres ins Nirvana senden.
HTH
Nessus
Du gibst einfach alle Felder aus und überprüfst ob irgendwo eine 0 vorkommt, die kannst Du ja ohne weiteres ins Nirvana senden.
HTH
Nessus
Antwort 2 von Timmy
Wie sieht denn Dein Abfrageformular aus?
Antwort 3 von andreasclaas
Hallo, das Problem ? :-) Das Problem ist das ich ganz am Anfang meiner "PHP-Karriere" stehe.
Ich schreibe noch mal etwas zum Code:
- Mit dem Formular übergebe ich zwei Variablen:
1. Spaltenname und 2. Spalteninhalt.
- Die SQL-Abfrage sieht so aus:
$query="select* from tabelle1 where ".$Spaltenname." like ".$Spalteninhalt."";
Das Ergebnis steht mal in der ersten Spalte oder mal in der dritten Spalte. Wenn ich feststellen kann in welcher Spalte (Nummer)das Ergebnis steht, bräuchte ich für die zweite Spalte doch eigentlich nur die Spaltennummer um eins hochzählen.
So hatte ich es mir jedenfalls gedacht. Oder denke ich schon zu kompliziert.
Habe jetzt auch mal eine Variante versucht in dem die Spaltenanzahl ausgelesen wird und dann alle Spalten angezeigt werden. Das finde ich aber auch doof. Ich hätte gerne nur die beiden Spalten in denn auch die Werte stehen.
Könnt Ihr mir auf die Sprünge helfen?
Andreas
Ich schreibe noch mal etwas zum Code:
- Mit dem Formular übergebe ich zwei Variablen:
1. Spaltenname und 2. Spalteninhalt.
- Die SQL-Abfrage sieht so aus:
$query="select* from tabelle1 where ".$Spaltenname." like ".$Spalteninhalt."";
Das Ergebnis steht mal in der ersten Spalte oder mal in der dritten Spalte. Wenn ich feststellen kann in welcher Spalte (Nummer)das Ergebnis steht, bräuchte ich für die zweite Spalte doch eigentlich nur die Spaltennummer um eins hochzählen.
So hatte ich es mir jedenfalls gedacht. Oder denke ich schon zu kompliziert.
Habe jetzt auch mal eine Variante versucht in dem die Spaltenanzahl ausgelesen wird und dann alle Spalten angezeigt werden. Das finde ich aber auch doof. Ich hätte gerne nur die beiden Spalten in denn auch die Werte stehen.
Könnt Ihr mir auf die Sprünge helfen?
Andreas
Antwort 4 von Nessus
Hi,
poste doch mal den betreffenden Code.
Nessus
poste doch mal den betreffenden Code.
Nessus
Antwort 5 von Dibbl
Du kannst ja bei der Rückgabe die Spalte auswählen...
Einfach bei dem zurückgegebenen Array im Fetch eckige Klammern mit der Spaltennummer angeben (erste Spalte = 0)
$ausgabe = $row[0];
Einfach bei dem zurückgegebenen Array im Fetch eckige Klammern mit der Spaltennummer angeben (erste Spalte = 0)
$ausgabe = $row[0];
Antwort 6 von andreasclaas
Hallo,
hier ist der Code:
SQL-Abfrage:
$query = "select * from tabelle1 where ".$spaltenname." like ".$spalteninhalt. "";
Ausgabe:
$result = mysql_query($query);
function print_result_table($result){
echo "<table border=1 size=1>\n";
echo "<tr font face=Arial, Helvetica, sans-serif size=1>\n";
for ($i=0; $i < mysql_num_fields($result);$i++){
echo " <th>".mysql_field_name($result,$i)."</th>\n";
}
echo "</tr>\n";
while ($row = mysql_fetch_row($result)){
echo "<tr font face=Arial, Helvetica, sans-serif size=1>\n";
for ($i=0; $i < mysql_num_fields($result);$i++){
echo "<td>$row[$i]</td>\n";
}
echo "</tr>\n";
}
echo "</table>\n";
}
//**Html-Startcode ausgeben***
echo "<html>\n<body>\n";
print_result_table($result);
echo "</body>\n</html>\n";
so, ich habs etwas abgespeckt und hoffe das der code noch lesbar ist. Ich werde mir mal Gedanken über die Sache mit der 0-Abfrage machen.
VG Andreas
hier ist der Code:
SQL-Abfrage:
$query = "select * from tabelle1 where ".$spaltenname." like ".$spalteninhalt. "";
Ausgabe:
$result = mysql_query($query);
function print_result_table($result){
echo "<table border=1 size=1>\n";
echo "<tr font face=Arial, Helvetica, sans-serif size=1>\n";
for ($i=0; $i < mysql_num_fields($result);$i++){
echo " <th>".mysql_field_name($result,$i)."</th>\n";
}
echo "</tr>\n";
while ($row = mysql_fetch_row($result)){
echo "<tr font face=Arial, Helvetica, sans-serif size=1>\n";
for ($i=0; $i < mysql_num_fields($result);$i++){
echo "<td>$row[$i]</td>\n";
}
echo "</tr>\n";
}
echo "</table>\n";
}
//**Html-Startcode ausgeben***
echo "<html>\n<body>\n";
print_result_table($result);
echo "</body>\n</html>\n";
so, ich habs etwas abgespeckt und hoffe das der code noch lesbar ist. Ich werde mir mal Gedanken über die Sache mit der 0-Abfrage machen.
VG Andreas
Antwort 7 von Nessus
Hi,
habe es jetzt echt nicht getestet, Quick&Dirty:
HTH
Nessus
habe es jetzt echt nicht getestet, Quick&Dirty:
$host = "localhost";
$user = " ";
$password = " ";
$database = " ";
$table = " ";
$spaltenname = " ";
@mysql_connect($host,$user,$password)
or die("Abbruch: Verbindung zu '$host'"
." konnte nicht hergestellt werden.");
@mysql_select_db($database)
or die("Abbruch: Datenbank '$database' konnte nicht"
." selektiert werden.<br><br>MySQL sagt: ".mysql_error());
$query = "select spa, spb, spc, spd, spe from $table where $spaltenname like ".$spalteninhalt. "";
$result = @mysql_query($query);
$i = 0;
while($row = mysql_fetch_array($result))
{
$spa = $row['spa'];
$spb = $row['spb'];
$spc = $row['spc'];
$spd = $row['spd'];
$spe = $row['spe'];
if ($spa ="0")
{
$spa = "";
}
if ($spb ="0")
{
$spb = "";
}
if ($spc ="0")
{
$spc = "";
}
if ($spd ="0")
{
$spd = "";
}
if ($spe ="0")
{
$spe = "";
}
echo "$spa <br>";
echo "$spb <br>";
echo "$spc <br>";
echo "$spd <br>";
echo "$spe <br>";
++$i;
}
HTH
Nessus
Antwort 8 von andreasclaas
Hallo Nessus,
erstmal ein dickes Dankeschön für Deine Hilfe. Dadurch bin ich jetzt eine Ecke weiter. Obwohl es jetzt ganz anders aussieht hast Du auf alle Fälle mir auf die richtige Rille geholfen.
Ein Problem habe ich jetzt aber noch. Ich mache die Ausgabe jetzt mit folgender Schleife:
$query = "select * from tabelle1 where ".$spaltenname." like ".$spalteninhalt. "";
$result = @mysql_query($query);
$row = mysql_fetch_array($result);
for($i = 0; $i< mysql_num_fields($result);$i++)
{
if ($row[$i]!="")echo "$row[$i] <br>";
else;}
Solange in der Datenbank nur Werte stehen klappt es einwandfrei. Ich habe aber auch Texte in der DB. Und wenn ich diesen Datensatz auslesen möchte gibt es eine Warnung das es keine gültige sql-resource ist und die Ausgabe ist leer.
Hast da auch noch eine Idee?
Andreas
erstmal ein dickes Dankeschön für Deine Hilfe. Dadurch bin ich jetzt eine Ecke weiter. Obwohl es jetzt ganz anders aussieht hast Du auf alle Fälle mir auf die richtige Rille geholfen.
Ein Problem habe ich jetzt aber noch. Ich mache die Ausgabe jetzt mit folgender Schleife:
$query = "select * from tabelle1 where ".$spaltenname." like ".$spalteninhalt. "";
$result = @mysql_query($query);
$row = mysql_fetch_array($result);
for($i = 0; $i< mysql_num_fields($result);$i++)
{
if ($row[$i]!="")echo "$row[$i] <br>";
else;}
Solange in der Datenbank nur Werte stehen klappt es einwandfrei. Ich habe aber auch Texte in der DB. Und wenn ich diesen Datensatz auslesen möchte gibt es eine Warnung das es keine gültige sql-resource ist und die Ausgabe ist leer.
Hast da auch noch eine Idee?
Andreas
Antwort 9 von Nessus
Hi,
for($i = 0; $i< mysql_num_fields($result);$i++)
{
if ($row[$i]!="")echo "$row[$i] <br>";
else;}
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Das ist kein Code sondern Krampf.
Pflücke den mal auseinander, dann soltest Du deinen Fehler selbst entdecken.
Nessus
for($i = 0; $i< mysql_num_fields($result);$i++)
{
if ($row[$i]!="")echo "$row[$i] <br>";
else;}
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Das ist kein Code sondern Krampf.
Pflücke den mal auseinander, dann soltest Du deinen Fehler selbst entdecken.
Nessus
Antwort 10 von andreasclaas
for($i=0; $i< mysql_num_fields($result); $i++)
{
if ($row[$i]!="") echo "$row[$i]<br>";
}
mh,habe mal den leeren Else-Zweig weggelassen. Tut aber trotzdem nicht.
Oder ist der Vergleich auf ein leeres Feld vielleicht etwas unglücklich
gemacht?
Andreas
{
if ($row[$i]!="") echo "$row[$i]<br>";
}
mh,habe mal den leeren Else-Zweig weggelassen. Tut aber trotzdem nicht.
Oder ist der Vergleich auf ein leeres Feld vielleicht etwas unglücklich
gemacht?
Andreas
Antwort 11 von Nessus
Hi,
Antwort 9 > Schreibe mal sauber lesbaren Code, mit Einrückungen, Zeilenumbrüchen etc.
Nessus
Antwort 9 > Schreibe mal sauber lesbaren Code, mit Einrückungen, Zeilenumbrüchen etc.
Nessus
Antwort 12 von andreasclaas
upps, jetzt verwirrst Du mich aber.
Bei den zwei Zeilen geht es doch bald gar nicht anders. Und das kleine Fenster hier macht die Sache auch nicht leichter :-)
for($i=0; $i< mysql_num_fields($result); $i++)
{
if ($row[$i]!="") echo "$row[$i]<br>";
}
AHA. Meine schönen Formatierungen gehen beim Abschicken wieder flöten.
Aber ehrlich gesagt. Wenn die Ausgabe mit Werten funktioniert, mit Texten aber nicht ....sollte das echt an einer Klammer oder einem Semikolon liegen???
Andreas
Bei den zwei Zeilen geht es doch bald gar nicht anders. Und das kleine Fenster hier macht die Sache auch nicht leichter :-)
for($i=0; $i< mysql_num_fields($result); $i++)
{
if ($row[$i]!="") echo "$row[$i]<br>";
}
AHA. Meine schönen Formatierungen gehen beim Abschicken wieder flöten.
Aber ehrlich gesagt. Wenn die Ausgabe mit Werten funktioniert, mit Texten aber nicht ....sollte das echt an einer Klammer oder einem Semikolon liegen???
Andreas
Antwort 13 von andreasclaas
...ich bekomme es einfach nicht hin.
Brauche mal einen konkreten Hinweis
Andreas
Brauche mal einen konkreten Hinweis
Andreas
Antwort 14 von Nessus
Hi,
das kann nicht funktionieren:
($row[$i]!="")
^^^^^^^^^^^^^^
Hier ist die Funktion empty() oder isset angebracht.
Nessus
das kann nicht funktionieren:
($row[$i]!="")
^^^^^^^^^^^^^^
Hier ist die Funktion empty() oder isset angebracht.
Nessus
Antwort 15 von amdreas
Hallo,
ist vielleicht nicht so toll, aber irgedwie funktioniert es.
Habe jetzt auch mal mit empty() gespielt.
Mein Problem ist damit aber nicht weg.
Wähle ich einen Wert z.B. 111 oder 222 klappt die ausgabe. Wähle ich ABC bekomme ich die Meldung "...supplied argument is not a valid mysql reuslt resource in Zeile Nr... Das wäre bei mysql_fetch_array($result)
What Nu?
Andreas
ist vielleicht nicht so toll, aber irgedwie funktioniert es.
Habe jetzt auch mal mit empty() gespielt.
if (empty($row[$i]))
..gut ne :-)Mein Problem ist damit aber nicht weg.
Wähle ich einen Wert z.B. 111 oder 222 klappt die ausgabe. Wähle ich ABC bekomme ich die Meldung "...supplied argument is not a valid mysql reuslt resource in Zeile Nr... Das wäre bei mysql_fetch_array($result)
//*** Datenbank
ID | A1 | A2| A3
1 111| | |
2 |222 |223|
3 | | |ABC
//*** Formular
<form action="gebnis.php" method="post"><br>
<! <form action="../../phpMyAdmin/phpinfo.php" method="post">Typauswahl:<br>
<select name="searchterm">
<option value="111">111
<option value="222">222
<option value="ABC">abc
</select><br>
Spaltenwahl:<br>
<select name="searchtype">
<option value="A1">A1
<option value="A2">A2
<option value="A3">A3
<option value="ABC">ABC
</select>
<br>
<input type=submit value="Suchen">
</form>
//*** Ausgabe
<?php
trim($searchterm);
if($searchtype||$searchterm)
{
echo "Kein Suchkriterium eingegeben, bitte noch einmal.";
exit;
}
$searchtype=addslashes($_POST["searchtype"]);
$searchterm=addslashes($_POST["searchterm"]);
require ("testsqldaten.php");
$connect=@mysql_connect($host,$user,$password);
if (!$connect) {
echo "Fehler: Keine Verbindung zu mySQL Datenbank oder Systemfehler!";
}
mysql_select_db("testdb2")
OR die ("Konnte DB nicht erreichen!");
$query = "select * from tabelle1 where ".$searchtype." like ".$searchterm. "";
$result = mysql_query($query);
$row = mysql_fetch_array($result);
for($i = 0; $i< mysql_num_fields($result);$i++)
{
if($row[$i]!="") echo "$row[$i]<br>";
}
?>
What Nu?
Andreas
Antwort 16 von Nessus
Hi,
ist das auch das richtige Tabellenfeld?
Sprich varchar o.ä?
Nessus
ist das auch das richtige Tabellenfeld?
Sprich varchar o.ä?
Nessus
Antwort 17 von andreasclaas
Moin
..ja ist "leider" alles varchar
Andreas
..ja ist "leider" alles varchar
Andreas
Antwort 18 von andreasclaas
^^^^^^^^^^
schubs, damit der thread nicht gesperrt wird
schubs, damit der thread nicht gesperrt wird
Antwort 19 von andreasclaas
..sind die Ideen ausgegangen?
VG
Andreas
VG
Andreas
Antwort 20 von semi
$result = mysql_query($query);
if(!mysql_errno()) {
if($row=mysql_fetch_array($result)) {
for($i=0; $i<count($row); $i++) {
if(!empty(trim($row[$i])))
echo "{$row[$i]}<br>";
}
}
else
echo "Abfrageergebnis ist leer.<br>";
}
else
echo "Fehler in der Abfrage: " . mysql_error() . "<br>";
Antwort 21 von andreasclaas
Hallo Semi,
vielen Dank für Deinen Tip. Ich werd mir mal den Code genauer ansehen. Zur zeit gibt es noch einen parse error, unexpected T_STRING, expecting T_VARIABLE or '$' in der Zeile if($row=my....
VG
Andreas
vielen Dank für Deinen Tip. Ich werd mir mal den Code genauer ansehen. Zur zeit gibt es noch einen parse error, unexpected T_STRING, expecting T_VARIABLE or '$' in der Zeile if($row=my....
VG
Andreas
Antwort 22 von andreasclaas
Also.. ich habe mir den Code jetzt Zeile für Zeile angesehen. Die Funktion TRIM scheint nicht mit einen Array zu funktionieren.
Jetzt kann ich zwar einen Fehler abfangen aber leider leider ist mein Problem immer noch nicht gelöst:
Ein Wert wird ausgegeben, steht aber eine Zeichenkette im Datenfeld wird nichts angezeigt. Ein Fehler wird aber auch nicht ausgegeben.
Weitere Ideen? oder bin ich der einzige der Daten und Zeichenketten gemischt in einer DB hat?
VG
Andreas
Jetzt kann ich zwar einen Fehler abfangen aber leider leider ist mein Problem immer noch nicht gelöst:
Ein Wert wird ausgegeben, steht aber eine Zeichenkette im Datenfeld wird nichts angezeigt. Ein Fehler wird aber auch nicht ausgegeben.
Weitere Ideen? oder bin ich der einzige der Daten und Zeichenketten gemischt in einer DB hat?
VG
Andreas
Antwort 23 von andreasclaas
mittlerweile bin ich der Meinung das es nicht am DB-Inhalt lietg sondern vieleicht an der Übergabe der DAten aus dem Formular ins Ausgabescript:
Andreas
//*** Formular
<form action="ausgabe.php" method="post">Typauswahl:<br>
<select name="searchterm">
<option value="111">111
<option value="222">222
<option value="ABC">abc
</select><br>
Spaltenwahl:<br>
<select name="searchtype">
<option value="A1">A1
<option value="A2">A2
<option value="A3">A3
<option value="ABC">ABC
</select>
<br>
<input type=submit value="Suchen">
</form>
//*** Ausgabe
<?php
trim($searchterm);
if($searchtype||$searchterm)
{
echo "Kein Suchkriterium eingegeben, bitte noch einmal.";
exit;
}
$searchtype=addslashes($_POST["searchtype"]);
$searchterm=addslashes($_POST["searchterm"]);
require ("testsqldaten.php");
....
....
Andreas
Antwort 24 von semi
Du verwendest einmal
$searchtype
$searchterm
dann wieder
$_POST["searchtype"]
$_POST["searchterm"]
(die erste Variante läuft nicht, wenn register-globals=Off in php.ini ist)
Vielleicht hilft es Dir weiter.
Gruß,
Michael
$searchtype
$searchterm
dann wieder
$_POST["searchtype"]
$_POST["searchterm"]
(die erste Variante läuft nicht, wenn register-globals=Off in php.ini ist)
if($searchtype||$searchterm) {
echo "Kein Suchkriterium eingegeben, bitte noch einmal.";
exit;
}Wenn etwas angegeben ist, dann gibst Du Fehler aus.Vielleicht hilft es Dir weiter.
Gruß,
Michael
Antwort 25 von andreasclaas
Hallo Leute,
das Problem ist gelöst. Habe noch den richtigen Hinweis bekommen. Der Fehler lag in meiner SQL-Abfrage. Mit
funktioniert es einwandfrei.
Vielen Dank für Eure Tipps.
VG
Andreas
das Problem ist gelöst. Habe noch den richtigen Hinweis bekommen. Der Fehler lag in meiner SQL-Abfrage. Mit
$query = "select * from tabelle where $searchtype like '$searchterm'";
~~~~~~~~~~~~~
funktioniert es einwandfrei.
Vielen Dank für Eure Tipps.
VG
Andreas

