Twiggy Geschrieben 24. März 2004 Teilen Geschrieben 24. März 2004 Hallo zusammen. ich möchte über das Ergebnis einer Select-Abfrage mehrfach den Befehl mysql_fetch_row laufen lassen. Je nach gegebenen Parametern sollen nämlich andere Werte aus dem Result gezogen werden. Ich habe erstmal mit zwei Beispielfällen angefangen um Fehler besser aufzuspüren und Promt gabs auch einen, den ich mir aber nicht erklären kann, bzw. keinen Lösungsansatz gefunden habe. Man wählt auf einer HTML-Seite aus, welche Felder man sich anzeigen lassen will. Wähle ich nur Rechnungsdatum oder nur Garantieende klappt alles wunderbar. Wähle ich aber beide aus, bleibt die Spalte für Garantieende leer. Ich habe verschiedene Kontrollpunkte eingebaut um zu sehen, ob alle Variablen einwandfrei übergeben werden, das ist auch der Fall. Nun weis ich nicht mehr weiter, hab auch schon probiert, das result vor jedem neuen mysql_fetch_row in eine temp-Variable zu packen, aber auch das klappte nicht. Hier mal ein Auszug des Quelltextes, vielleicht weis ja jemand rat. $anzahl = count($felder); if ($haus == "reinoldi" or $haus == "Reinolidstrasse") { $select = "select * from hardware where standort < '1000' or standort like 'Info%' or (standort = 'Empfang' and persnr = '20383')"; $result = mysql_db_query("newinventory", $select); $num = mysql_num_rows($result); $haus = "Reinoldistrasse"; if ($felder[0] == "rechdate") { $beschr[0] = "Rechnungsdatum"; $i = 0; $resulttemp = $result; while ($row = mysql_fetch_row($resulttemp)) { $rechdate[$i] = mysql_result($resulttemp, $i, "rechdate"); $i++; } } if ($felder[0] == "garantieende") { $beschr[0] = "Garantieende"; $i = 0; $resulttemp = $result; while ($row = mysql_fetch_row($resulttemp)) { $garantieende[$i] = mysql_result($resulttemp, $i, "garantiedate"); $i++; } } elseif ($felder[1] == "garantieende") { $beschr[1] = "Garantieende"; $i = 0; $resulttemp = $result; while ($row = mysql_fetch_row($resulttemp)) { $garantieende[$i] = mysql_result($resulttemp, $i, "garantiedate"); $i++; } } for ($h=0; $h < $anzahl; $h++) { echo '*'.$beschr[$h].'*'.$felder[$h].'*'; } echo '<br>'; for ($j=0; $j < $num; $j++) { echo '#'.$rechdate[$j].'#'.$garantieende[$j].'#<br>'; } } [/PHP] Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kills Geschrieben 24. März 2004 Teilen Geschrieben 24. März 2004 kannste ma ein bisschen besser umschreiben? mit weniger worten mehr umschreiben ;-) ich raffs nicht. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
HELLinG3R Geschrieben 24. März 2004 Teilen Geschrieben 24. März 2004 $a=MYSQL_FETCH_ROW(..) ^^ das spuckt doch ein indiziertes array aus, oder täusch ich mich? das bedeutet, dass du EINEN datensatz abfrägst und die inhalte der spalten über einen index angesprochen werden. MYSQL_FETCH_ARRAY(...) liefert ein assoziatives array, d.h. die Spaltennamen entsprechen den indexnamen. beispiel +---------+-------------+ |spalte1 | spalte2 | +---------+-------------+ | test1 | blabla | +---------+-------------+ $a=MYSQL_FETCH_ARRAY($ergebnisID) echo $a['spalte1']; // liefert test1 echo $a['spalte2']; // liefert blabla $a=MYSQL_FETCH_ROW($ergebnisID) echo $a[0]; // liefert test1 echo $a[1]; // liefert blabla Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kLeiner_HobBes Geschrieben 25. März 2004 Teilen Geschrieben 25. März 2004 Also, soweit ich deinen Code verstehen kann, passiert folgendes: Angenommen, du hast sowohl Rechnungsdatum als auch Garantieende ausgewählt: Er springt natürlich erstmal in if (...=="rechdate") rein. Dort liest der das komplette Ergebnis der Abfrage aus und zwar schon mit while ($row = mysql_fetch_row($resulttemp)). In der Schleife benutzt du unsinnigerweise den Aufruf "mysql_result", der ersten SEEEHHHR langsam ist und du zweitens die aktuelle Spalte auch schon in $row drinstehen hast. Nach Bearbeitung dieser Schleife steht der Abfrage-Cursor sozusagen auf dem Ende der Abfrage. Das heißt, wenn du dann in if (...=="garantieende") (und zwar solltest du das mit dem index 1 nehmen) reinspringst, liefert dir while ($row = mysql_fetch_row($resulttemp)) false zurück. Du müsstest also zwischen den if-Abfragen den Cursor mit mysql_data_seek zurücksetzen. Ich hielte es allerdings für sinnvoller, die fetchrow-Schleife um diese If-Dinger zu machen, und für jeden Datensatz einzeln zu entscheiden, ob was ausgewählt wurde und was dann machen usw... HTH Benjamin Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Twiggy Geschrieben 25. März 2004 Autor Teilen Geschrieben 25. März 2004 @kLeiner_HobBes Ja, Du hast recht. Ich war da gestern etwas Quelltextblind glaube ich. Das mit dem $row / mysql_result habe ich auch gemerkt und die Idee die while-Schleife um die ifs zu bauen ist einfach simpel-genial, dass ich da nicht selbst drauf gekommen bin. *kopfschüttel* Aber trotzdem Danke, an alle Antworter. Manchmal muss man seine Probleme glaub ich anderen mitteilen um selbst wieder einen besseren Betrachtungswinkel zu bekommen. THX Twiggy Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.