PHP Select Abfrage mit mehreren Ergebnissen, Variablen werden überschrieben

TMM

Mitglied
Hallo an Alle!
Ich habe ein kleines Problem mit einer SELECT-Abfrage und komme da nicht wirklich weiter, hier der Code

PHP:
// Abfrage
  $stmt = $db->prepare(
          ' SELECT 
                  USER_KELLEREI.LeseNr , USER_KELLEREI.kg , USER_KELLEREI.Oechsle , USER_TRAUBENSORTEN.sorten_id, USER_TRAUBENSORTEN.sorten_name
            FROM 
                  USER_KELLEREI, USER_TRAUBENSORTEN
            WHERE
                  USER_KELLEREI.Sorte = USER_TRAUBENSORTEN.sorten_id
                  
            AND
                  USER_KELLEREI.usr_name = ? ');  
  
  //  Parameter füllen
  $stmt->bind_param('s', $_SESSION['username']);
  
  // Statement abschicken
  $stmt->execute();
    
  // Ergebnisse an Variablen binden (pro Feld muss zwingend eine Variable vergeben sein!)
  $stmt->bind_result($LeseNr, $kg, $Oechsle, $sorten_id, $Sorte);
  
  // Ergebnisse ausgeben
  while($stmt->fetch()) { 
    echo "<table class=\"kellerei_listing\">
          <colgroup><col width=\"70px\"></col><col width=\"174px\"></col><col width=\"110px\"></col><col width=\"80px\"></col><col width=\"80px\"></col></colgroup>
              <tr>
                  <td><p class=\"kellerei_aktuelle_lesen\">".$LeseNr. "</p></td>
                  <td><p class=\"kellerei_aktuelle_lesen\">".$Sorte. "</p></td>
                  <td><p class=\"kellerei_aktuelle_lesen\">".number_format($kg, '', '', '.'). "</p></td>
                  <td><p class=\"kellerei_aktuelle_lesen\">".$Oechsle. "</p></td>
                  <td><form action=\"php/trauben_keltern.php\" method=\"post\"><fieldset class=\"fieldset\">
                      <input type=\"submit\" name=\"".$LeseNr."\" value=\"Trauben keltern\" class=\"button_keltern\" id=\"LeseNr_".$LeseNr."\"/></fieldset></form></td>
               </tr>
          </table>";
  }
 
  
          
  
  // Speicher freigeben
  $stmt->close();
  
  
  
// TRAUBEN KELTERN --> Hier folgen die einzelenen Abfragen für diese Aktion

Die Abfrage funktioniert soweit ganz gut und er zieht mir auch alle Ergebnisse aus der Datenbank (insgesamt 4 Ergebnisse für alle Variablen). Er gibt auch alle vier Ergebnisse in der Tabelle aus.
Nun möchte ich die Ergebnisse weiterverarbeiten und zwar jedes Ergebnis für sich, allerdings sind in den Variablen nun nur noch die Werte des letzten Ergebnisses gespeichert, wie kann ich das Ergebnis in einem Array speichern und damit danach auf alle vier Ergebnisse separat zugreifen? Ich komm einfach nicht auf die Lösung - danke für Eure Hilfe!
 
Hallo.
Du könntest die Daten in der Whileschleife in ein oder mehrere Arrays schreiben.

Ich hoffe das hilft dir weiter.
Gruss Joe.
 
Hallo Joe,
dachte schon, keiner interessiert sich für mein Problemchen ;)
Das mit den Arrays dachte ich mir schon (siehe meine Gedanken dazu unter dem Code), doch wie genau mache ich das - das wär die Frage...

Danke schonmal für Deine Hilfe!
 
oO Hab ich irgendwie überlesen :)
Vor der While kannst du dein array deklarieren
$Traubensorten = array();
Und direckt nach dem Schleifenkopf alle Daten ins array füttern.
Und nun kommts drauf an wie du die Daten ausliesst also nach dem Index oder nach einen bestimmten Wert/Variable. Vermutlich musst du ein mehrdimensionales Array machen.
 
Danke Dir, werde mich heute noch damit auseinandersetzen und melde mich wenn es geklappt hat (oder auch nicht) ;)
 
Ich geb dir mal nen Bsp.
Aber wie man das Array strukturiert hängt davon ab wie mans auslesen möchte.
PHP:
$Traubensorten = array();
$i=0;
while($stmt->fetch()) { 
	$Traubensorten[$i][0]=$LeseNr;
	$Traubensorten[$i][1]=$kg;
	$Traubensorten[$i][2]=$Oechsle;
	$Traubensorten[$i][3]=$sorten_id;
	$Traubensorten[$i][4]=$Sorte;
        $i++;
    echo "<table class=\"kellerei_listing\"> ......";
	// Deine Schleife
}
//Array ausgeben
$AnzDaten=count($Traubensorten);
for($i=0; $i<$AnzDaten; $i++){
	$NR=$Traubensorten[$i][0];
	$Gew=$Traubensorten[$i][1];
	$Oechs=$Traubensorten[$i][2];
	$ID=$Traubensorten[$i][3];
	$Art=$Traubensorten[$i][4];
	echo "LeseNr: $NR<br>
			Kg: $Gew<br>
			Oechsle: $Oechs<br>
			ID: $ID<br>
			Sorte: $Art";
}

Edit hab vergessen das $i in der Schleife erhöht werden muss mit $i++;
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: TMM
Ich kenne jetzt deinen SQL-Layer nicht, aber ich denke, das dort Zuweisungen innerhalb einer Bedingung stattfinden (das wäre unsauberer Code, aber kein gravierender Fehler)

Ich würde das Result erst mal in ein Arry packen und dann die HTML-Ausgabe damit füttern, so hättest du zumindest schon mal HTML und PHP/MSQL getrennt
 
@Joe
Ich danke Dir für den Tipp, hab es jetzt hinbekommen und kann die Daten dank des Arrays nun neben der Ausgabe noch zusätzlich weiterverarbeiten, funktioniert also so wie ich es wollte :)

Habe in der Ausgabe noch etwas verändert, sonst zeigt er mir in der Tabelle nur Nullen an:
PHP:
...

// Ergebnisse an Variablen binden (pro Feld muss zwingend eine Variable vergeben sein!)
  $stmt->bind_result($LeseNr, $kg, $Oechsle, $sorten_id, $Sorte);
  
  // Array deklarieren
  $ergebnis = array();
  $i = 0;
  // Array ausgeben  
  while($stmt->fetch()) { 
            $ergebnis[$i][0]=$LeseNr;
            $ergebnis[$i][1]=$kg;
            $ergebnis[$i][2]=$Oechsle;
            $ergebnis[$i][3]=$sorten_id;
            $ergebnis[$i][4]=$Sorte;
            $i++;  
        
  echo "<table class=\"kellerei_listing\">
          <colgroup><col width=\"70px\"></col><col width=\"174px\"></col><col width=\"110px\"></col><col width=\"80px\"></col><col width=\"80px\"></col></colgroup>
              <tr>
                  <td><p class=\"kellerei_aktuelle_lesen\">".$LeseNr. "</p></td>
                  <td><p class=\"kellerei_aktuelle_lesen\">".$Sorte. "</p></td>
                  <td><p class=\"kellerei_aktuelle_lesen\">".number_format($kg, '', '', '.'). "</p></td>
                  <td><p class=\"kellerei_aktuelle_lesen\">".$Oechsle. "</p></td>
                  <td><form action=\"\" method=\"post\"><fieldset class=\"fieldset\">
                    <input type=\"button\" name=\"".$LeseNr."\" value=\"Trauben keltern\" class=\"button_keltern\" id=\"LeseNr_".$LeseNr."\"/></fieldset></form></td>
              </tr>
       </table>";
  }
 
 //OPTIONAL (Prüfung)
 //Array ausgeben
   $AnzDaten = count($ergebnis);
        for($i = 0; $i < $AnzDaten; $i++) {
            $LNR = $ergebnis[$i][0];
            $GEW = $ergebnis[$i][1];
            $OEC = $ergebnis[$i][2];
            $IDN = $ergebnis[$i][3];
            $SOR = $ergebnis[$i][4];
            
        echo "LeseNr: $LNR <br/>
              KG: $GEW <br/>
              Oechsle: $OEC <br/>
              ID: $IDN <br/>
              Sorte: $SOR <br/>";
        }         
  
  // Speicher freigeben
  $stmt->close();
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Joe
item: Und nun würde ich beim Array nicht einen Index verwenden, sondern einen Key. Das macht das ganze gleich lesbar.

item: Kannst du mit compact() den Array auf einmal erstellen. Die Keys sind dann gleich die Variablennamen

item: Musst du den Index der Einträge nicht selber führen. PHP übernimmt das für dich

PHP:
//abfüllen
while($stmt->fetch()) { 
	$ergebis[] = compact($LeseNr, $kg, $Oechsle, $sorten_id, $Sorte);
}

//auswerten
foreach($ergebis as $row){
	echo "LeseNr: {$row['LeseNr']}<br/>
	KG: {$row['kg']}<br/>
	Oechsle: {$row['Oechsle']}<br/>
	ID: {$row['sorten_id']}<br/>
	Sorte: {$row['Sorte']}<br/>";
}
 
  • Gefällt mir
Reaktionen: Joe
Vielen Dank Yaslaw,
die Array-Funktion compact() war mir bisher völlig unbekannt.
Das macht wirklich vieles leichter.
Ich glaub die Index-Nummerierung hat sich bei mir eingeprägt da ich mit foreach noch son bissel Probleme habe :)
So war ich wenigstens in einer For-Schleife in der Lage auf bestimmte Werte zuzugreifen.
So wirds jedoch schnell unübersichtlich viel Code.

Daher ists auf jeden Fall ratsam assoziative Indizies zu nutzen wie von dir gezeigt.
 
Zurück