while schlaufe gibt nur einen Datensatz aus warum?

zigomeier

Mitglied
Also ich habe folgenden Quelltext der mir eigendlich 20 Datensätze zeigen sollte, er zeigt aber nur einen an... Wer kann mir helfen?

PHP:
<? $sql = "SELECT * FROM bank_transaktionen WHERE `from` LIKE '$kto' OR `to` LIKE '$kto' ORDER BY `id` DESC LIMIT 0 , 20";
   $result = mysql_query($sql);
   $end = "";
   while (!$end) {
   $data = mysql_fetch_array($result);
   $from = $data["from"];
   $to = $data["to"];
   $datum = $data["datum"];
   $text = $data["text"];
   $betrag = $data["betrag"];
   $personn = $data["user"];
   if (!$text) { $end = 1; }
   else { 
   if ($to == $kto) {
   $sql = "SELECT * FROM bank_konten WHERE ktonr LIKE '$from'";
   $result = mysql_query($sql);
   $data = mysql_fetch_array($result);
   $fromktoname = $data["name"];
   $sql = "SELECT * FROM bank_users WHERE id LIKE '$personn'";
   $result = mysql_query($sql);
   $data = mysql_fetch_array($result);
   $person = $data["user"];?>
  <tr><td><center>Von <? echo "$from - $fromktoname" ?><br><i><? echo $person ?></i></center></td>
   <td><center><? echo $datum ?></center></td>
   <td><center><? echo $text ?></center></td>
   <td><center>+ <? echo $betrag ?> Rau</center></td></tr>
   <? } if ($from == $kto) {
   $sql = "SELECT * FROM bank_konten WHERE ktonr LIKE '$to'";
   $result = mysql_query($sql);
   $data = mysql_fetch_array($result);
   $toktoname = $data["name"];
   $sql = "SELECT * FROM bank_users WHERE id LIKE '$personn'";
   $result = mysql_query($sql);
   $data = mysql_fetch_array($result);
   $person = $data["user"];?>
  <tr><td><center>An <? echo "$to - $toktoname" ?><br><i><? echo $person ?></i></center></td>
   <td><center><? echo $datum ?></center></td>
   <td><center><? echo $text ?></center></td>
   <td><center>- <? echo $betrag ?> Rau</center></td></tr>
   <? } } } ?>
 
Sorry hab ich vergessen... habs überarbeitet:

PHP:
<? $sql = "SELECT * FROM bank_transaktionen WHERE `from` LIKE '$kto' OR `to` LIKE '$kto' ORDER BY `id` DESC LIMIT 0 , 20";
 $result = mysql_query($sql);
 $end = "";
  
 while (!$end) { //Begin der Schlaufe
 	$data = mysql_fetch_array($result);
 	$from = $data["from"];
 	$to = $data["to"];
 	$datum = $data["datum"];
 	$text = $data["text"];
 	$betrag = $data["betrag"];
 	$personn = $data["user"];
 	if (!$text) { //Datensatz Inhalt prüfen
 		$end = 4; 
 	}
 	else { //Wenn Datensatz vorhanden
 		if ($to == $kto) { //Prüfung der $to Variable
 			$sql = "SELECT * FROM bank_konten WHERE ktonr LIKE '$from'";
 			$result = mysql_query($sql);
 			$data = mysql_fetch_array($result);
 			$fromktoname = $data["name"];
 			$sql = "SELECT * FROM bank_users WHERE id LIKE '$personn'";
 			$result = mysql_query($sql);
 			$data = mysql_fetch_array($result);
 			$person = $data["user"];?>
 		    <tr><td><center>Von <? echo "$from - $fromktoname" ?><br><i><? echo $person ?></i></center></td>
 		    <td><center><? echo $datum ?></center></td>
 		    <td><center><? echo $text ?></center></td>
 		    <td><center>+ <? echo $betrag ?> Rau</center></td></tr>
 		<? 	} if ($from == $kto) { // Prüfung der $from Variable
 			$sql = "SELECT * FROM bank_konten WHERE ktonr LIKE '$to'";
 			$result = mysql_query($sql);
 			$data = mysql_fetch_array($result);
 			$toktoname = $data["name"];
 			$sql = "SELECT * FROM bank_users WHERE id LIKE '$personn'";
 			$result = mysql_query($sql);
 			$data = mysql_fetch_array($result);
 			$person = $data["user"];?>
 		    <tr><td><center>An <? echo "$to - $toktoname" ?><br><i><? echo $person ?></i></center></td>
 		    <td><center><? echo $datum ?></center></td>
 		    <td><center><? echo $text ?></center></td>
 		    <td><center>- <? echo $betrag ?> Rau</center></td></tr>
 		<? } 
 	}
 } ?>
 
Du muss das fetch_array auch in die While-Bedingung aufnehmen:
PHP:
$end = "";
  
 while (!$end && $data = mysql_fetch_array($result)) { //Begin der Schlaufe
    $from = $data["from"];
 
Habe die Schlaufe wie folgt geändert er Zeigt jedoch nur einen Datensatz. Wenn ich den SQL Befehl in phpMyAdmin eingebe dann gibt er 5 Datensätze aus. Was auch korrekt wäre. Somit ist der SQL-Befehl richtig.

PHP:
<? $sql = "SELECT * FROM bank_transaktionen WHERE `from` LIKE '$kto' OR `to` LIKE '$kto' ORDER BY `id` DESC LIMIT 0 , 20";
 $result = mysql_query($sql);
 $end = "";
  
 while ($data = mysql_fetch_array($result)) { //Begin der Schlaufe
 	$from = $data["from"];
 	$to = $data["to"];
 	$datum = $data["datum"];
 	$text = $data["text"];
 	$betrag = $data["betrag"];
 	$personn = $data["user"];
 	if ($to == $kto) { 
 		$sql = "SELECT * FROM bank_konten WHERE ktonr LIKE '$from'";
 		$result = mysql_query($sql);
 		$data = mysql_fetch_array($result);
 		$fromktoname = $data["name"];
 		$sql = "SELECT * FROM bank_users WHERE id LIKE '$personn'";
 		$result = mysql_query($sql);
 		$data = mysql_fetch_array($result);
 		$person = $data["user"];?>
 	    <tr><td><center>Von <? echo "$from - $fromktoname" ?><br><i><? echo $person ?></i></center></td>
 		<td><center><? echo $datum ?></center></td>
 		<td><center><? echo $text ?></center></td>
 		<td><center>+ <? echo $betrag ?> Rau</center></td></tr>
 	<? 	} if ($from == $kto) { // Prüfung der $from Variable
 		$sql = "SELECT * FROM bank_konten WHERE ktonr LIKE '$to'";
 		$result = mysql_query($sql);
 		$data = mysql_fetch_array($result);
 		$toktoname = $data["name"];
 		$sql = "SELECT * FROM bank_users WHERE id LIKE '$personn'";
 		$result = mysql_query($sql);
 		$data = mysql_fetch_array($result);
 		$person = $data["user"];?>
 	    <tr><td><center>An <? echo "$to - $toktoname" ?><br><i><? echo $person ?></i></center></td>
 		<td><center><? echo $datum ?></center></td>
 		<td><center><? echo $text ?></center></td>
 		<td><center>- <? echo $betrag ?> Rau</center></td></tr>
 	<? } 
 } ?>
 
"Schlaufe" find ich gut :)
Prüfe mal, ob er nicht irgendwo in deinen "Schlaufen" in eine Abbruchbedinung läuft... Die eigentlich Abfrage mit dem Daten-Array müsste so korrekt sein..

LG
Mike
 
Verfl....er unübersichtlicher Code, grrr.
Dennoch ist mir aufgefallen, daß du deine Variable $data innerhalb der Schlaufe (is echt niedlich) immerwieder überschreibst......
 
Ja, stimmt..
Du weißt der Variable $data zu beginn den fetch_array zu, dann überschreibst Du die Variable aber erneut und daher wird er die "schlaufe" nur einmal "durchschlüpfen" -> nur ein Datensatz wird ausgeliefert.

Benenne die beiden nachfolgenden Variablen mal in $data1 resp. $data2 um, dann müsste es klappen..
 
Zurück