Twiggy Geschrieben 24. März 2004 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]
kills Geschrieben 24. März 2004 Geschrieben 24. März 2004 kannste ma ein bisschen besser umschreiben? mit weniger worten mehr umschreiben ;-) ich raffs nicht.
HELLinG3R Geschrieben 24. März 2004 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
kLeiner_HobBes Geschrieben 25. März 2004 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
Twiggy Geschrieben 25. März 2004 Autor 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
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden