Fehler bei For-Schleife

Gray

Erfahrenes Mitglied
Hier erstmal mein Script:
PHP:
if(isset($speichern)){

for($x=1;$x<$menge;$x++){

		$kommentar = ${"kommentar".$i};
		$e_id = ${"e_id".$i};
     			 
		$sql_update = "Update blogg_kommentare set kommentar='$kommentar' where id_index = '$e_id'";
	       			 
		$result = mysql_query($sql_update) or die (mysql_error($db));
		
		$msg = "Ihre Änderungen wurden erfolgreich übernommen. $x";
		
		}

}
Es gibt mir zwar alles in der entsprechenden Anzahl aus aber die Variable x bleibt auf 1 und wird nicht hochgezählt wenn ich mir diese ausgeben lasse.

es sieht dan so aus:
HTML:
Ihre Änderungen wurden erfolgreich übernommen. 1
Ihre Änderungen wurden erfolgreich übernommen. 1
Es müsste jedoch Theoreisch beim zweiten Aufruf 2 da stehen also so:
HTML:
Ihre Änderungen wurden erfolgreich übernommen. 1
Ihre Änderungen wurden erfolgreich übernommen. 2
Tut es aber nicht.
 
In deiner for-Schleife hast du doch gar keine Ausgabe, oder hast du die für das Forum rausgekürzt?

Ach, und wenn du $x < $menge schreibst, solltest du wohl beim Zählen mit $x = 0 anfangen oder $x <= $menge als Bedingung nutzen.
 
Jetzt mal den Code nicht beachtet: du zählst die Variable nach jedem Schleifendurchgang hoch.
Das heißt es kann gar nicht sein, dass du immer 1 hast. Wenn, dann wäre das ein PHP-Bug, was sehr unwahrscheinlich wäre.

Und im Code selbst seh ich auf den ersten Blick nichts
 
Pendergast hat gesagt.:
Ach, und wenn du $x < $menge schreibst, solltest du wohl beim Zählen mit $x = 0 anfangen oder $x <= $menge als Bedingung nutzen.

Ähm? Weil's auch id's mit 0 gibt, ja?
Er kann ja noch ne if abfrage davor setzen - if mysql_num_rows > 0 (pseudo code)
 
Ich kann im Code auch nichts sehen, von der fehlenden Ausgabe mal abgesehen.
Selbst wenn die Ausgabe nach der Schleife erfolgt, kann dort nicht
Ihre Änderungen wurden erfolgreich übernommen. 1
Ihre Änderungen wurden erfolgreich übernommen. 2
herauskommen, sondern hoechstens
Ihre Änderungen wurden erfolgreich übernommen. 2
da $msg jedes mal durch
PHP:
        $msg = "Ihre Änderungen wurden erfolgreich übernommen. $x";
wieder ueberschrieben wird.

Mein Testcode
PHP:
<?php
for ($x=1;$x<10;$x++)
	{
		$msg=$x;
	}
echo $msg;
?>
macht genau das Erwartete.
Er gibt
aus.

Nachtrag: Und bitte was ist $i?
 
Das ist doch mal wohl klar ;)
Ich hab eher gemeint, dass er das in der Schleife ausgeben will.

Aber selbst wenn nicht: Müsste ja trotzdem 2 anstatt 1 stehen
 
Irgendjemand_1 hat gesagt.:
Ähm? Weil's auch id's mit 0 gibt, ja?
Wo wird hier bitte $x zu einer ID in einer Datenbank? Das $x ist hier wohl eine reine Zählvariable. Und bei seinem Code fehlt schlicht und einfach ein Schleifendurchlauf.

Das von reptiler angesprochene $i dürfte dazu wohl noch eine weitere Fehlerquelle sein ;).
 
Pendergast hat gesagt.:
Wo wird hier bitte $x zu einer ID in einer Datenbank? Das $x ist hier wohl eine reine Zählvariable. Und bei seinem Code fehlt schlicht und einfach ein Schleifendurchlauf.

Das von reptiler angesprochene $i dürfte dazu wohl noch eine weitere Fehlerquelle sein ;).
stimmt das ist nicht die id
sry ;) hab mich vertan
 
Also die komplette Seite sieht so aus:

PHP:
<?php
include "../kontrolle.php";

if(isset($zurueck)){

	Header("Location: wl_eintraege.php?session=$session&wl_id=$wl_id&anzahl=$anzahl");

}

?><!doctype HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<html>
<head>
<link href="../include/css.css" rel="stylesheet" type="text/css">
</head>
<body>
<FORM action="wl_kommentare_bearbeiten.php" method=post>
<input type="hidden" name="session" value="<?php echo $session; ?>">
<input type="hidden" name="wl_id" value="<?php echo $wl_id; ?>">
<input type="hidden" name="id_index" value="<?php echo $id_index; ?>">
<input type="hidden" name="anzahl" value="<?php echo $anzahl; ?>">
<table border=0 align=center width="80%" cellspacing=0 cellpadding=0>
<?php 

mysql_close();

require "../include/gb.inc.php";

$gb_db = MYSQL_CONNECT($gb_server, $gb_user, $gb_passwort);
$db_select = MYSQL_SELECT_DB($gb_datenbank, $gb_db);

if(isset($speichern)){

for($x=1;$x<$menge;$x++){

		$kommentar = ${"kommentar".$i};
		$e_id = ${"e_id".$i};
     			 
		$sql_update = "Update blogg_kommentare set kommentar='$kommentar' where id_index = '$e_id'";
	       			 
		$result = mysql_query($sql_update) or die (mysql_error($db));
		
		$msg = "Ihre Änderungen wurden erfolgreich übernommen.";
		
		}

}

$wl_erg = mysql_query("SELECT * FROM blogg_kommentare WHERE e_index = '$id_index'");

$kommentare_anzahl = mysql_num_rows($wl_erg);
$nr = 0;
?>
<input type="hidden" name="menge" value="<?php echo $kommentare_anzahl; ?>">
<?php if($msg){echo "<tr><td colspan=2><p>".$msg."</p></td></tr>"; } ?>
<tr>
    <td valign=top colspan=2>
        <hr noshade size=1 color="#5284BD">
    </td>
</tr>
<tr>
    <td valign=top colspan=2>
        <p><b>Weblog</b></p>
    </td>
</tr>
<tr>
    <td valign=top colspan=2>
    <hr noshade size=1 color="#5284BD">
    </td>
</tr>
<?php
while ($row = mysql_fetch_array($wl_erg)) {
?>
<tr>
		<td colspan=2>
		    <p><br><b>Kommentar</b><br><textarea name="kommentar<?php echo $nr; ?>" class="abox" style="height:50px;width:100%;"><?php echo $row[kommentar]; ?></textarea></p>
		</td>
</tr>
<input type="hidden" name="e_id<?php echo $nr; ?>" value="<?php echo $id_index; ?>">
<?php 
$nr++;
} ?>
<tr>
                <td colspan=2>
                    <hr noshade size=1 color="#5284BD"></td>
            </tr>
        </td>
</tr>
<tr>
    <td>
		    <p><input type="submit" name="zurueck" value="zurück" class="abox"></p>
		</td>
		<td>
				<p><input type="submit" name="speichern" value="speichern" class="abox"></p>
		</td>
</tr>
<tr>
                <td colspan=2>
                    <hr noshade size=1 color="#5284BD"></td>
            </tr>
        </td>
</tr>
</table>
</form>
</body>
</html>

Das Problem mit der doppelten $msg Variable konnte ich lösen, wurde zweimal aufgerufen, aber der rest geht noch nicht.
 
Zuletzt bearbeitet:
Ich hab den Fehler gefunden:

PHP:
<input type="hidden" name="e_id<?php echo $nr; ?>" value="<?php echo $id_index; ?>">

Das wird wohl nichts, den den Wert für dieses Feld muss ich aus der DB holen, hate eine Falsche Variable drin.

So funktionierts:
PHP:
<input type="hidden" name="i_id<?php echo $nr; ?>" value="<?php echo $row[id_index]; ?>">
 
Zurück