24. März 200421 j 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]
24. März 200421 j kannste ma ein bisschen besser umschreiben? mit weniger worten mehr umschreiben ;-) ich raffs nicht.
24. März 200421 j $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
25. März 200421 j 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
25. März 200421 j @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
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.