while-Scleife: Erster Datensatz fehlt !?
Peterchens Mondfahrt
- php
Hallo zusammen,
ich habe einen select, der eine Reihe von Datensätzen zurückliefert.
Mit
while($select = mysql_fetch_row($query))
möchte ich mir diese Datensätze ausgeben lassen.
Das Problem ist, dass immer der erste Datensatz abgeschnitten wird, also fehlt !?
Kann das jemand von euch nachvollzieghen, bzw. erklären ?
Danke
Gruss
Peter
Mahlzeit,
ich habe einen select, der eine Reihe von Datensätzen zurückliefert.
Mitwhile($select = mysql_fetch_row($query))
möchte ich mir diese Datensätze ausgeben lassen.
Das Problem ist, dass immer der erste Datensatz abgeschnitten wird, also fehlt !?
Kann das jemand von euch nachvollzieghen, bzw. erklären ?
Kannst du denn etwas mehr Code zeigen als while(...)?
Grüße aus Barsinghausen,
Fabian
Hallo,
ja natürlich kann ich das *g*
**************
$select = "SELECT A,B,C FROM Tabelle WHERE A = $wert ORDER BY B";
$query = mysql_query($select, $db) or die($mysql_error());
$queryergeb = mysql_fetch_row($query);
if (!$queryergeb)
echo "<tr><td> </td></tr>";
else {
while($select = mysql_fetch_row($query)) {
echo "<td>".$select[1]."-".$select[2]."</td></tr>";
}
}
*********
Das ist eigentlich schon alles !?
Und in der while-Schleife fehlt halt immer der erste Datensatz !?
Gruss
Peter
Hallo Peter,
$queryergeb = mysql_fetch_row($query);
hier rufst du den ersten Datensatz ab...
while($select = mysql_fetch_row($query)) {
...und hier wunderst du dich, wo der erste Datensatz geblieben ist.
echo "<td>".$select[1]."-".$select[2]."</td></tr>";
was machst du denn ersten aufruf von mysql_fetch_row()? willst du wissen, ob du ein Ergebnis zurückbekommen hast? - dann solltest du mysql_num_rows() verwenden.
Grüße aus Nürnberg
Tobias
Hallo,
willst du wissen, ob du ein Ergebnis zurückbekommen hast? - dann solltest du mysql_num_rows() verwenden.
Japp... so ist es, aber mit "_num_rows()" knallt das select total und liefert mir unendlich viele "L E" und "EC" zurück !?
Gruss
Peter
hi,
Japp... so ist es, aber mit "_num_rows()" knallt das select total und liefert mir unendlich viele "L E" und "EC" zurück !?
dann machst du definitiv etwas falsch.
mysql_num_rows() beeinflusst mit 100%iger sicherheit nicht mehr im nachhinein die vom select-statement erzeugte ergebnismenge.
gruss,
wahsaga
Hallo,
dann machst du definitiv etwas falsch.
Das Gefühl hab ich ja auch ;-)
Also nochmal der KOMPLETTE Code (ohne Kürzungen:
************************************************
$select = "SELECT Tag, P1,Z1,S1,T1,A1 FROM Tabelle WHERE Tag = '$zahl$wann' ORDER BY Z1"; // ($zahl$wann wird korekt übergeben)
$query = mysql_query($select, $db) or die($mysql_error());
$queryergeb = mysql_num_rows($query);
if (!$queryergeb)
echo "<tr><td>".$zahl."</td><td colspan='2'> </td></tr>";
else {
$datalt="".$select[0]."";
while($queryergeb) {
$datneu="".$select[0]."";
if ($datneu == $datalt) {
echo "<tr><td> </td>";
echo "<td>".$select[2]."-".$select[3]."</td>";
echo "<td>".$select[1]."-".$select[4]."<br>".$select[5]."</td></tr>";
}
else {
echo "<tr>";
echo "<td>".$zahl."</td>";
echo "<td>".$select[2]."-".$select[3]."</td>";
echo "<td>".$select[1]."-".$select[4]."<br>".$select[5]."</td></tr>";
}
$datalt="".$select[0]."";
}
}
******************************************************************
... und den Fehler find' ich nicht :(
Gruss
Peter
hi,
$queryergeb = mysql_num_rows($query);
while($queryergeb) {
}
was soll das jetzt wieder werden?
mysql_num_rows() fragt lediglich die anzahl der datensätze ab.
sofern diese grösser null ist, gehst du in deine while-schleife. in dieser verwendest du $queryergeb (die anzahl der datensätze!) als abbruchbedingung - wann bitte soll diese schleife beendet werden?
gruss,
wahsaga
Hi wahsaga,
...klingt logisch, aber wenn ich als Abbruchbedingung "_fetch_row" in der while-Schleife setze, bekomme ich noch immer dieses "LE EC T"-Zeuchs ?!
Gruss
Peter
hi,
...klingt logisch, aber wenn ich als Abbruchbedingung "_fetch_row" in der while-Schleife setze, bekomme ich noch immer dieses "LE EC T"-Zeuchs ?!
sorry, aber mir ist immer noch vollkommen schleierhaft, was du mit "diesem zeuch" meinst ...
gruss,
wahsaga
Hi wahsaga,
nerv ich schon ? *g*
...klingt logisch, aber wenn ich als Abbruchbedingung "_fetch_row" in der while-Schleife setze, bekomme ich noch immer dieses "LE EC T"-Zeuchs ?!
sorry, aber mir ist immer noch vollkommen schleierhaft, was du mit "diesem zeuch" meinst ...
Na, das was da steht... anstelle eines sauberen Datensatzes wie z.B.
Otto - Weber - München
bekomme ich
LE - EC - T
zurückgeliefert.... naja, inzwischen ist es:
S - S - S
!?
Gruss
Peter
Hi !!!!!
Fehler gefunden !
das $select konnte ich knicken... natürlich mussten die Ausgabewerte aus dem ResultSet kommen und nicht aus dem Select (daher auch die lustigen Buchstaben "S" "EL" "EC" und "T") *g*
Besten Dank für die Tipps und Denkanstösse !!
Gruss
Peter
hi,
...klingt logisch, aber wenn ich als Abbruchbedingung "_fetch_row" in der while-Schleife setze, bekomme ich noch immer dieses "LE EC T"-Zeuchs ?!
wie greifst du denn auf die mit mysql_fetch_row angeforderten daten zu?
gruss,
wahsaga
Hi wahsaga,
wie greifst du denn auf die mit mysql_fetch_row angeforderten daten zu?
while(mysql_fetch_row($query)) {
if ($datneu == $datalt) {
echo "<tr>";
echo "<td>".$select['Z1']."-".$select['S1']."</td>";
echo "<td>".$select['P1']."-".$select['T1']."<br>".$select['A1']."</td></tr>";
***********************
vorher hatte ich $select[0]...[1]... etc. da stehen, aber dann kam der Tip tatsächlich die Spaltennnamen zu benutzen !?
Gruss
Peter
Hallo Peter,
vorher hatte ich $select[0]...[1]... etc. da stehen, aber dann kam der Tip tatsächlich die Spaltennnamen zu benutzen !?
das geht aber nur, wenn du mysql_fetch_assoc() verwendest (siehe http://de3.php.net/mysql_fetch_assoc).
Grüße aus Nürnberg
Tobias
Hallo Peter,
$select = "SELECT Tag, P1,Z1,S1,T1,A1 [...]
$datalt="".$select[0]."";
wo willst du $select herhaben? das ist doch dein Query... und da man mit $foo[0] auf das erste Zeichen des Strings in $foo zugreifen kann, hast du in $datalt eben ein großes S stehen (==1.Zeichen deines Querys).
while($queryergeb) {
das versteh ich nicht. imho gibt das eine Endlosschleife. schreib hier mal
while($select = mysql_fetch_row($query)){ hin dann sollte unten was anderes rauskommen.
$datneu="".$select[0]."";
in $datneu steht das gleiche wie in $datalt (s.o.)...
if ($datneu == $datalt) {
...folglich ist das hier immer true
echo "<td>".$select[2]."-".$select[3]."</td>";
echo "<td>".$select[1]."-".$select[4]."<br>".$select[5]."</td></tr>";
lass mich raten, diese zwei Zeilen geben genau
<td>L-E</td><td>E-C<br>T</td></tr>
aus, richtig? (in den Quelltext schauen) - du hohlst dir nämlich einzelen Buchstaben aus deinem Query ganz oben.
}
else {
hier kommst du nie hin, das die if-Bedingung immer true gibt
$datalt="".$select[0]."";
hier reicht übrigends "$datalt=$select[0];" völlig aus, um das gleiche zu erreichen.
... und den Fehler find' ich nicht :(
du solltest etwas konsequenter auf deine Variablen achten, bei mir sieht eine Datenbankabfrage immer etwa so aus:
---
$query = "SELECT...";
$rs = mysql_query($query,DB);
while($row=mysql_fetch_assoc($rs)){
//daten aus $row holen...
}
----
dann kann mit den Variablen auch nichts schiefgehen
Grüße aus Nürnberg
Tobias
Hallo,
JETZT wird's interessant *g*
**********************************************************
$query = mysql_query($select, $db) or die($mysql_error());
$queryergeb = mysql_num_rows($query);
if (!$queryergeb)
echo $leereZeile;
else {
while(mysql_fetch_row($query)) {
$netteAusgabe
}
***********************************************************
Mit "_num_rows" überprüfe ich, ob ein Datensatz zurückkommt (danke für den Tip) und lasse mir mit "while(mysql_fetch_row" alle Datensätze ausgeben ...
Folgendes Phänomen:
Anscheinend wird der erste Datensatz jetzt nichtmehr ausgelassen, was ich aber nicht gut prüfen kann, da das Select nun EWIG lange dauert und $select[0] immer "ET", $select[1] "EC" und $select[3] "T" als Augabe ergibt !?
Um es kurz auszudrücken: "hääää ?"
Bitte um Hilfe !
Danke
Peter
Hallo Peter,
$query = mysql_query($select, $db) or die($mysql_error());
in $select steht das drin, was du erwartest?
$queryergeb = mysql_num_rows($query);
was gibt "echo $queryergeb" aus?
if (!$queryergeb)
warum nicht if($queryergeb!=0)?
echo $leereZeile;
was steht da drin?
else {
while(mysql_fetch_row($query)) {
warum nicht while($row = mysql_fetch_row($query))? (ich weiß nicht, wie du sonst an deine Daten kommen willst)
$netteAusgabe
was soll das ausgeben?
Schreib mal in der while-Schleife "print_r($row);" (wenn du meine Zeile oben verwendest)
Anscheinend wird der erste Datensatz jetzt nichtmehr ausgelassen, was ich aber nicht gut prüfen kann, da das Select nun EWIG lange dauert und $select[0] immer "ET", $select[1] "EC" und $select[3] "T" als Augabe ergibt !?
was steht denn in der Datenbank? du könntest es auch mal mit mysql_fetch_assoc() statt ..._row() versuchen und dann mit nicht z.B. mit $select[0] sondern mit $select['ersterspaltennameinderselectliste'] dein Zeug ausgeben
Um es kurz auszudrücken: "hääää ?"
ja, so ganz versteh ich das was du da treibst auch nicht :-)
Grüße aus Nürnberg
Tobias
Hallo Tobias,
$query = mysql_query($select, $db) or die($mysql_error());
in $select steht das drin, was du erwartest?
Definitiv "ja"
$queryergeb = mysql_num_rows($query);
was gibt "echo $queryergeb" aus?
0
0
0
2
0
0
4...
if (!$queryergeb)
warum nicht if($queryergeb!=0)?
is doch das selbe in grün !?
echo $leereZeile;
was steht da drin?
wirklich nur eine leere Zeile in der HTML-Tabelle, also "<tr><td> </td></tr>"
...
Um es kurz auszudrücken: "hääää ?"
ja, so ganz versteh ich das was du da treibst auch nicht :-)
Tobias, schau mal bitte eion paar posts vorher, da hab ich den Code UNGEKÜRZT geposted...
Mit echo $select['tabellenspaltenname'] bekomme ich jetzt IMMER ein "S" zurück ??
Ich schmeiss gleich alles hin ;-)
Gruss
Peter
Hallo Peter,
$queryergeb = mysql_num_rows($query);
was gibt "echo $queryergeb" aus?
0
0
0
2
0
0
4...
hää? warum denn so viele Zahlen? mysql_num_rows() sollte _ein_ Zahl zurückgeben...
if (!$queryergeb)
warum nicht if($queryergeb!=0)?
is doch das selbe in grün !?
imho ist das schöner if(!$queryergeb) ist nur true weil 0 false entspricht.
Tobias, schau mal bitte eion paar posts vorher, da hab ich den Code UNGEKÜRZT geposted...
hab ich, aber der schaut auch nicht unbedingt besser aus :-)
Mit echo $select['tabellenspaltenname'] bekomme ich jetzt IMMER ein "S" zurück ??
was bekommst du, wenn du an der selben stelle print_r($select); schreibst?
außerdem könntest du mal am Anfang deines Scriptes ein error_reporting(E_ALL); einfügen, vielleicht gibt das was sinnvolles aus?
Grüße aus Nürnberg
Tobias
Hi,
while($select = mysql_fetch_row($query))
möchte ich mir diese Datensätze ausgeben lassen.
Das Problem ist, dass immer der erste Datensatz abgeschnitten wird, also fehlt !?
Kann das jemand von euch nachvollzieghen, bzw. erklären ?
immer diese Probleme mit dem ersten und letzten Datensatz. ;-)
Vermutlich hast Du die Methode 'mysql_fetch_row()' zweimal ausgefuehrt bevor Du die Daten bearbeitet hast. - Stimmt's?
Gruss,
Lude