• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Variable immer überschrieben ?!

T4k3C4r3

Mitglied
Hallo Forum :)

Ich hab grad eine fette Logiklücke, an der ich schon eine Zeit lang hänge.

Ich hab folgenden Code (VEREINFACHT!)

PHP:
<form action="datei" method="post">
<?php
while(DB Abfrage[Schleife wird etwa 4mal durchlaufen]) {

    $echo '<input type="hidden" value="'.$db['wichigerWert'].'" name="wert"/>';
    $echo ''<input type="submit" ....nicht relevant....>;
}
?>
</form>

Wenn ich in Folge des o.g. Codes einen Button-Klick mit einer if-Anweisung abfange:
PHP:
if ($_POST) {
    $wert = $_POST['wert'];

    //.....
}

dann hat die Variable wert, immer den wert des letzten Durchlaufes von der while-Schleife.

Wenn aber der button zB bei der zweiten auflistung gedrückt wird, dann hat $wert noch immer den Wert des letzten (4ten) durchlaufes.

Wie schaff ich es nun das wenn der button bei der 2ten Auflistung gedrückt wird, auch die variable $wert auch den Wert des zweiten Durchlaufes hat?


Ich hoffe ich habs verständlich rübergebracht.

Danke mal im vorraus.

Mfg
 
Werbung:
Steht die if-Bedingung oberhalb der Schleife?
Gibt es evtl. ein zweites Formularfeld mit dem Namen "wert"?
Hast Du auch mal im erzeugten HTML-Code geschaut was dort genau drinne steht bei den Formularfeldern?
 
Also die If_Bedingung steht unterhalb der Schleife.

Das Formular besteht (jeweils pro Schleifendruchgang) aus einem Submitbutton, und einem Feld vom Typ "hidden"

Im fertigen/ausgeführten Quelltext steht im >value< der Datenbankwert, aber da der name immer gleich ist wird dieser überschrieben. Und somit gild nur die letzte Überschreibung.

Ich hab im Anschluss probiert dem element >name< eine durch variable veränderten wert zu geben- Funktioniert auch, aber damit hab ich das Problem die richtige Variable abzufangen.

Bspl:
PHP:
$num = 1;

while(#####) {
    echo '<input type="hidden" value="'.$db['wichtigerWert'].'" name="wert_'.$num.'" ';

    $num++;
}
 
Werbung:
Ah, jetzt versteh ich. Du willst beim Klick auf den Button den jeweiligen Wert dann verarbeiten. Daher solltest Du auf das input-Feld komplett verzichten. Binde den Wert an den Button selbst:

PHP:
<input type="submit" name="wert" value="<?php echo $db['feldname']; ?>">
 
Ah, jetzt versteh ich. Du willst beim Klick auf den Button den jeweiligen Wert dann verarbeiten. Daher solltest Du auf das input-Feld komplett verzichten. Binde den Wert an den Button selbst:

PHP:
<input type="submit" name="wert" value="<?php echo $db['feldname']; ?>">

In dem Fall wird doch der "Geheime Wert" (mit dem der Benutzer nichts anfangen kann bzw nicht sehen soll) als Buttonaufschrift ausgegeben.
 
Stimmt. Dann machs eben als button-Element:

PHP:
<button type="submit" name="wert" value="<?php echo $db['feldname']; ?>">Abschicken</button>
 
Werbung:
Das Problem hat sich jetzt zwar anders gelöst, trotzdem möchte ich (wegen des Lerneffekts) auf den ursprünglichen Fehler hinweisen:

Du gibst <input type="hidden" name="wert" value="123" /> wie du selbst schreibst etwa 4 mal aus. In einem Formular (also zwischen <form> und </form>) darf ein Input-Name nur ein einziges Mal vorkommen, andernfalls wird beim Absenden des Formulars immer nur der Wert des letzten Feldes übergeben.
Eine andere Lösung wäre gewesen, die Zeilen jeweils in ein Formular zu packen.

@threadi hat zwar schon in diese Richtung nachgefragt, aber ich wollte die Geschichte nochmal beleuchten.
 
In einem Formular (also zwischen <form> und </form>) darf ein Input-Name nur ein einziges Mal vorkommen, andernfalls wird beim Absenden des Formulars immer nur der Wert des letzten Feldes übergeben.

Den Fehler selbst, den Du hier beschreibst hatte ich ja auch schon von Anfang an gekannt. Nur ich wusste nicht was hier ein guter Weg gewesen wäre um diesen zu Umgehen.

Eine andere Lösung wäre gewesen, die Zeilen jeweils in ein Formular zu packen.

Verstehe ich nicht so ganz. Wie genau meinst du das ?
Würde mich mal eben ziemlich interessieren.

Danke dennoch
 
Werbung:
Den Fehler selbst, den Du hier beschreibst hatte ich ja auch schon von Anfang an gekannt. Nur ich wusste nicht was hier ein guter Weg gewesen wäre um diesen zu Umgehen.



Verstehe ich nicht so ganz. Wie genau meinst du das ?
Würde mich mal eben ziemlich interessieren.

Danke dennoch

Für mich las sich das so, dass du zwar den Fehler erkannt hast, aber nicht die Ursache. Aber umso besser.

Ich dachte daran, für jede Zeile ein eigenes Formular zu machen, mit dem input-field und dem Submit Button. Nächste Zeile dann wieder ein eigenes Formular.
Dann kommen sich die gleichnamigen inputs nicht in die Quere. Den jetzt eingeschlagene Weg finde ich allerdings eleganter.
 
Ja so wie es jetzt is gefällt es mir am besten. Mehrere Formulare wäre zum einen umständlich und zum Anderen nicht wirklich möglich da die Anzahl der DB Einträge nicht immer konstant ist.

~T4k3C4r3
 
Zurück
Oben