Mehrere SQL-Abfragen in einem FORM-Element ausgeben

syntax

Mitglied
Hallo Leute,
ich habe 3 SQL-Abfragen die ich in PHP ausgeben will, mein Problem ist allerdings, wenn ich mehr als einen Datensatz ausgebe wird immer nur der Wert des ersten Datensatz angezeigt. Die SQL-Abfragen einzeln ausgebe funktioniert es.

Meine Suche im Netz hat ergeben das ich einen Fehler mit den While-Schleifen mache, leider habe ich keine passende Lösung gefunden.

Über eure Hilfe wäre ich wie immer Dankbar :D

PHP:
    while ($dauer_datensatz = mysql_fetch_array( $dauer_ergebnis ))
    while ($umsatz_datensatz = mysql_fetch_array( $umsatz_ergebnis ))
    while ($arbeitszeiten_datensatz = mysql_fetch_array( $arbeitszeiten_ergebnis ))
    {
    echo '<form action="'.$_SERVER['SCRIPT_NAME'].'" method="post">',
    '<tr>',
    '<td><input name="checkbtn[]" type="checkbox" value="'.$arbeitszeiten_datensatz['id'].'"></td>',
    '<td><input name="uncheckbtn[]" type="checkbox" value="'.$arbeitszeiten_datensatz['id'].'"></td>',
    '<td><input type="text" name="startdatum" value="' . $arbeitszeiten_datensatz['startdatum'] . '"></td>',
    '<td><input type="text" name="startzeit" value="' . $arbeitszeiten_datensatz['startzeit'] . '"></td>',
    '<td><input type="text" name="endedatum" value="' . $arbeitszeiten_datensatz['endedatum'] . '"></td>',
    '<td><input type="text" name="endezeit" value="' . $arbeitszeiten_datensatz['endezeit'] . '"></td>',
    '<td><input type="hidden" name="calc_dauer" value="'.$dauer_datensatz['calc_dauer'].'" >' . $dauer_datensatz['calc_dauer'] . '</td>',
    '<td><input type="hidden" name="calc_umsatz" value="'.$umsatz_datensatz['calc_umsatz'].'" >' . $umsatz_datensatz['calc_umsatz'] . ' €</td>',
    '<td><input type="hidden" name="id" value="'.$arbeitszeiten_datensatz['id'].'" ></td>',
    '<td><input type="submit" name="update" value="U" ></td>',
    '<td><input type="submit" name="delete" value="X" ></td>',
    '<tr>',
    '</form>';
    }
 
Warum lädst du nicht erst einmal alle Datensätze in entsprechende Arrays und durchläufst dann die Arrays? Ich könnte mir vorstellen, dass die MySQL-Funktionen intern den gleichen Puffer nutzen und dementsprechend ihre Datensätze überschreiben.
 
Als erstes solltes du dein Code so formatieren damit man sieht welche while-Schleife wo endet.

Dann siehst du auch, dass die ersten 2 Schleifen keine {} besitzen. Von wo bis wo gehen sie denn?

Nachtrag: Warum zerlegst du den String für den Echo?

Nachtrag 2:
Wenn du das ganze noch lesbar im PHP habe willst, dann empfehle ich die folgenden 2 Punkte
a) den HTML-Teil in PHP formatieren: Heredoc-Syntax
b) Die Complex (Curly) Syntax anwenden um die Strings zusammenzusetzen. Das reduziert das Chaos mit öffnenden und schliessenden Anführungszeichen und den Verbindungs-Punkten

PHP:
   while ($dauer_datensatz = mysql_fetch_array( $dauer_ergebnis )){
    	while ($umsatz_datensatz = mysql_fetch_array( $umsatz_ergebnis )){
    		while ($arbeitszeiten_datensatz = mysql_fetch_array( $arbeitszeiten_ergebnis )){
			    echo <<<HTML
				    <form action="{$_SERVER['SCRIPT_NAME']}" method="post">,
				    	<tr>,
				    		<td>
				    			<input name="checkbtn[]" type="checkbox" value="{$arbeitszeiten_datensatz['id']}">
				    		</td>
				    		<td>
				    			<input name="uncheckbtn[]" type="checkbox" value="{$arbeitszeiten_datensatz['id']}">
				    		</td>
				    		<td>
				    			<input type="text" name="startdatum" value="{$arbeitszeiten_datensatz['startdatum']}">
				    		</td>
				    		<!-- //TODO: Rstlcihe Felder auch noch formatiert eintragen -->
				    	<tr>
				    </form>
HTML;
			}
		}
    }
 
Was hast du vor?

Verstehe nicht was du da machst. Wenn du nur $arbeitszeiten_ergebnis aufrufst passiert doch das gleiche. Ich sehe ja nicht mal eine Abhängigkeit zwischen den Schleifen.
 
Ich habe die Klammern für die Schleifen gesetzt, aber es wird immer nur die letzte Schleife richtig ausgegeben.
PHP:
while ($arbeitszeiten_datensatz = mysql_fetch_array( $arbeitszeiten_ergebnis )){

Die 2 obersten Schleifen geben immer nur den Wert des ersten Datensatzes auf alle Datensätze aus.
Nehme ich aber immer nur eine von den 3 Schleifen, egal welche funktionieren Sie.
 
Ich denke man kann die SQL-Abfrage zu einer zusammenfügen, das du alle Datensätze in einer Rowset hast.

Ansonsten musst du dir ein Array zusammenstellen aus allen 3 Abfragen.
 
Hey Leute,

ich hab das jetzt mit den Arrays probiert wie mir das @einfach nur crack vorgeschlagen hat.
Ich bin allerdings nicht so richtig weiter gekommen.
Er gibt mir zwar meine Datensätze aus, allerdings jeden Datensatz x3, was ich nachvollziehen kann, da ich 3 foreach-Schleifen in einander gepackt habe.

Wo ich wieder beim selben Probelm bin. Ich habe bestimmt einen Dankfehler.

Wär schön wenn mir jemand auf die Sprünge helfen könnte.

Danke :)

PHP:
$abz_result = mysql_query ("SELECT arbeitszeiten.startdatum,
    arbeitszeiten.startzeit, arbeitszeiten.endedatum, arbeitszeiten.endezeit AS abz_list FROM arbeitszeiten" );

    $dauer_result = mysql_query ("SELECT SEC_TO_TIME(TIME_TO_SEC(arbeitszeiten.endezeit) - TIME_TO_SEC(arbeitszeiten.startzeit)) AS dauer_list FROM arbeitszeiten" );

    $umsatz_result = mysql_query ("SELECT ROUND(((taetigkeiten.stundensatz /60) / 60) * TIME_TO_SEC(arbeitszeiten.dauer),2) AS umsatz_list FROM arbeitszeiten, taetigkeiten " );

        $abz_list = array();
        while ($row = mysql_fetch_assoc($abz_result)) {
        $abz_list[] = $row;
        }
        
        $dauer_list = array();
        while ($row = mysql_fetch_assoc($dauer_result)) {
        $dauer_list[] = $row;
        }
        
        $umsatz_list = array();
        while ($row = mysql_fetch_assoc($umsatz_result)) {
        $umsatz_list[] = $row;
        }

     foreach ($abz_list as $i => $abz_data) {
     foreach ($dauer_list as $i => $dauer_data) {
     foreach ($umsatz_list as $i => $umsatz_data) {
echo <<<HTML
    <form action="{$_SERVER['SCRIPT_NAME']}" method="post">
    <tr>
    <td>
     <input name="checkbtn[]" type="checkbox" value="{$abz_data['id']}">
   </td>
    <td>
     <input name="uncheckbtn[]" type="checkbox" value="{$abz_data['id']}">
    </td>
    <td>
      <input type="text" name="startdatum" value="{$abz_data['startdatum']}">
    </td>
    <td>
      <input type="text" name="startzeit" value="{$abz_data['startzeit']}">
    </td>
    <td>
      <input type="text" name="endedatum" value="{$abz_data['endedatum']}">
    </td>
    <td>
      <input type="text" name="endezeit" value="{$abz_data['endezeit']}">
    </td>
    <td>
      <input type="hidden" name="dauer_list" 
      value="{$dauer_data['dauer_list']}" > {$dauer_data['dauer_list']}
     </td>
    <td>
      <input type="hidden" name="umsatz_list" 
       value="{$umsatz_data['umsatz_list']}" > {$umsatz_data['umsatz_list']}  €
    </td>
    </tr>
HTML;
}
}
}
 
Zuletzt bearbeitet:
Na das ist doch das gleiche, nur das du vorher das alles in Array schreibst.

Ich verstehe deine schleifen da überhaupt nicht. Was hast du denn vor?

Also wenn du z.B. Daten Rekursiv ermitteln willst oder so...

Wenn ich jetzt das mit den 3 foreach-schleifen sehe, würde ich dir, wenn du für mich arbeiten würdest, den Code um die Ohren hauen.
 
Ich habe jetzt in meinen letzten Beitrag die SQL-Abfragen reingeschrieben, vielleicht wird mein Vorhaben dann deutlicher.

Zusammengefasst ich will mit den Werten aus meiner Arbeitszeiten-Tabelle den Umstatz und die Dauer ausrechnen und in einem Form-Element ausgeben, was im einzelfall auch funktioniert und nur bei der Ausgabe von mehreren Datensätzen Fehler verursacht.

Ich habe auch schon mit array_merge experiementiert, allerdings ohne Erfolg.

PHP:
$abz_list = array();
        $dauer_list = array();
        $umsatz_list = array();

      foreach (array_merge($abz_list, $dauer_list, $umsatz_list ) as $data) {

echo <<<HTML
    <form action="{$_SERVER['SCRIPT_NAME']}" method="post"> 
......
<td><input type="text" name="startdatum" value="{$data['startdatum']}"></td>
.....
HTML;
}
 
Zuletzt bearbeitet:
Zurück