PHP Schleife und Mysql

  • Themenstarter Themenstarter Comenius
  • Beginndatum Beginndatum
C

Comenius

Hallo,

Ich habe mal wieder ein KLEINES Problem :)

Erstmal den Code, dann die Erklärung.

PHP:
  <?php
  
  // 1.
  
  if(isset($_GET["text"])){
  	 $text = $_GET["text"];
  	 $keys = split("\n", $text);
  	 $i = 1;
  	 foreach($keys as $key){
  	   $i++;
  	} 
  }
  ?>
  
  <?php

   // 2.
 
 for($i = 0; $i < count($keys); $i++)
  {
    mysql_connect($a, $b, $c) or die(mysql_error());
    mysql_select_db($d) or die(mysql_error());
    $sql = "SELECT * FROM kasse WHERE Vnummer='".$keys[$i]."'";
    $result = mysql_query($sql) or die(mysql_error());
    while($row = mysql_fetch_assoc($result))
    {
  	$Nummer	= $row[Vnummer];
  	$Name	  = $row[Vartikel];
  	$Preis	 = $row[Verkaufspreis];
  	$ergebnis1 = $Preis + $ergebnis;
  	$ergebnis  = $ergebnis1;
    }
  ?>
  
    <table border="0">
  	<tr>
  	  <td width="236" bgcolor="#F0F0F0">
  		<b><?php echo $Nummer; ?></b>
  	  </td>
  	  <td width="236" bgcolor="#F0F0F0">
  		<b><?php echo $Name; ?></b>
  	  </td>
  	  <td width="236" bgcolor="#F0F0F0">
  		<b><?php echo $Preis; ?></b>
  	  </td>
  	</tr>
    </table>
  
  <?php
  }
  ?>

1. Als erstes splitte ich jede Zeile einer Textarea und packe sie in eine Variable.
2. Danach mache ich mit der Variable eine Abfrage und suche mir die passenden sachen aus der Datenabank.

Die Variablen aus der Textarea enthalten nur Zahlen (codes), mit denen ich Artikelname etc. aus der Datenbank abfragen möchte.

Da ich vorher nie genau weiss, wie viele Zeilen ich am Ende in der Textarea erhalte (also wie viele Abfragen ich machen muss), ist alles in einer Schleife.

Mein Problem ist nun aber, dass immer nur die letzte Zeile ausgegeben wird, also immer nur die letzte Variable.

Das erkennt man ganz gut daran, dass die oberen Tabellen leer sind (kleiner grauer strich... leere Tabelle eben) und nur die Letzte mit Informationen von der Datenbank gefüllt sind.

Der Fehler liegt 100%ig im PHP-Teil, aber ich finde ihn einfach nicht.

Vielleicht kann mir ja jemand helfen :)

Gruss
Commi
 
Die Ausgabe muss noch in die While Schleife.
Probiers mal damit:
PHP:
for($i = 0; $i < count($keys); $i++)
   {
 	mysql_connect($a, $b, $c) or die(mysql_error());
 	mysql_select_db($d) or die(mysql_error());
 	$sql = "SELECT * FROM kasse WHERE Vnummer='".$keys[$i]."'";
 	$result = mysql_query($sql) or die(mysql_error());
 	while($row = mysql_fetch_assoc($result))
 	{
 	  $Nummer	= $row[Vnummer];
 	  $Name	  = $row[Vartikel];
 	  $Preis	 = $row[Verkaufspreis];
 	  $ergebnis1 = $Preis + $ergebnis;
 	  $ergebnis  = $ergebnis1;
   ?>
   
 	<table border="0">
 	  <tr>
 		<td width="236" bgcolor="#F0F0F0">
 		  <b><?php echo $Nummer; ?></b>
 		</td>
 		<td width="236" bgcolor="#F0F0F0">
 		  <b><?php echo $Name; ?></b>
 		</td>
 		<td width="236" bgcolor="#F0F0F0">
 		  <b><?php echo $Preis; ?></b>
 		</td>
 	  </tr>
 	</table>
   
   <?php
  	}
    }
   ?>
 
Dachte ich auch erst, aber daran wird es nicht liegen.
Die while Schleife ist an dieser Stelle auch eigentlich überflüssig, denn du hast ja immer nur einen Datensatz in $result, oder sehe ich das falsch?
Ansonsten sehe ich bislang auch keinen Fehler. Sicher, dass in der Datenbank alle Werte enthalten sind und auch die richtigen Ergebnisse gefunden werden?
Kann ja sein, dass was mit den Vnummern aus der Textarea nicht stimmt.
 
Zuletzt bearbeitet:
Mein Vorschlag:
PHP:
<?php

	mysql_connect($a, $b, $c) or die(mysql_error());
	mysql_select_db($d) or die(mysql_error());

	$pattern = '/(\x0D\x0A|\x0A|\x0D)/'; // regulärer Ausdruck für einen Zeilenumbruch
	if( isset($_GET['text']) ) {
		if( preg_match($pattern, $_GET['text']) ) {
			$items = preg_split($pattern, $_GET['text']);
		} else {
			$items = array($_GET['text']);
		}
	}
?>

	…

<?php

	$query = "
		SELECT
		        `Vnummer`,
		        `Vartikel`,
		        `Verkaufspreis`
		  WHERE
		        0 OR `Vnummer` = 
		";
	$query .= implode(' OR `Vnummer` = ', $items);
	$result = mysql_query($query);

	echo '<table>';
	while( $row = mysql_fetch_assoc($result) ) {
		echo '<tr><td>'.$row['Vnummer'].'</td><td>'.$row['Vartikel'].'</td><td>'.$row['Verkaufspreis'].'</td></tr>';
		$gesamtpreis += $row['Verkaufspreis'];
	}
	echo '</table>';
	echo 'Gesamtpreis: '.$gesamtpreis;

?>
 
Hmmmm *grübel* .......

JackyD - Die while-Schleife ist ja nur für die Werte aus der Datenbank. Die werden ja in eine Variable umgewandelt, sind also auch ausserhalb der Schleife Verwendbar.

Das splitten klappt auch, ich hab da mal rumexperimentiert, er schneidet nach jedem Zeilenumbruch ab und packt mir den Inhalt in eine Variable.

Mein Problem ist nur das dann am ende ALLES auszugeben.

Gumbo - Da ich dir in deinem Code nicht ganz folgen konnte, habe ich ihn einfach mal 1 zu 1 kopiert und bei mir ausprobiert.
Es kommt eine MySQL-Warnung (Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in blablabla).

Überhaupt fällt es mir im Moment etwas schwer dir zu folgen.

So wie ich es erkannt habe, hast du da nach dem gleichen Prinzip gearbeitet wie ich, aber doch irgendwie anders :)

Falls ich nochmal etwas genauer erklären soll sagt bitte bescheid, denn bevor hier nichts weiter geht.....

Ich schau mir deinen Code nochmal genauer an Gumbo und versuche ihn zu verstehen.

Vielleicht weiss ja auch jemand, wie man meinen alten Code so umstellen kann, dass es funktioniert.

Wäre super :)

Gruss
Commi
 
@Comenius,
dachte erst, dass du mehrer Datensätze durch die Abfrage bekommst und dann wird die while solange ausgeführt bis keiner mehr vorhanden ist und dadurch wird der letzte Datensatz ausgegeben. Ist aber alles nicht der Fall bei dir.
*Gumbo zustimm*
 
Hmmm, ich weiss nicht... Wenn ich meinen Code nehme, wird immer nur die letzte Eingabe ausgegeben. (habe ich 5 Zeilen in der Textarea, ist nur die 5. Tabelle mit Inhalt, habe ich 100 Zeilen, ist nur die 100te mit Inahlt.)

Die Abfrage funktioniert also, ich weiss nur nicht, warum immer nur die letzte Eingabe in der Tabelle mit Inhalt dargestellt wird.

Auf dem Bild kann man das sehr schön erkennen.
In jede Zeile Der Textarea wurde etwas eingegeben, aber nur die letzte Zeile wird ausgegeben, die anderen Tabellen-Spalten sind leer.
Die Mysql-Abfrage funktioniert also

Ich weiss nich weiter, ich finde da einfach keinen Fehler.

Vielleicht hat ja jemand mehr Glück.

Gruss
Commi
 

Anhänge

  • Unbenannt.JPG
    Unbenannt.JPG
    7,8 KB · Aufrufe: 31
Ich habe gerade nochmal ein wenig rumgespielt und das Feld "Vnummer" in phpmyadmin auf "DEZIMAL" umgestellt. Jetzt zeigt er mir alle an.

Ich verstehe dann nur nicht, warum er mir dann vorher immer wenigstens 1 angezeigt hat.

Naja egal, jetzt funktionierts :)

Danke für eure Hilfe

Gruss
Commi
 
Zurück