Formular in Schleife auswerten, mittels Array?

Eurocid

Mitglied
Hallo malwieder

Folgende Frage?

Ich habe einen Datenbank-Ausgabe mit einer While-Schleife. (Eine Art-DoTo-Liste)

Sieht so aus:

  • Aufgabe 1
    • ToDo
    • ToDo
    • ToDo
  • Aufgabe 2
    • ToDo
    • ToDo
    • ToDo


Hier werden die einzelnen Aufträge aus einer Datenbank gezogen, mit einer Schleife.
Und in jeder Ausgabe wird nochmal die DoTo-Liste über eine Schleife gezogen.

Soweit so gut, das hab ich ja schon alles, jetzt zu meiner Frage :)

Ich habe unter jeder ToDo-Liste einen HINZUFÜGEN BUTTON mit einem kleinen Eingabefeld eingefügt, und würde gerne, wenn ich auf hinzufügen drücke, haben das mir der eintrag direkt gemacht wird. Leider funktioniert das nur beim untersten Auftrag, was ja auch klar ist da das Script nach unten abgearbeitet wird und mir der letzte eintrag nur behalten wird.

Die Frage ist jetzt wie schreibe ich das Formular, so das mein HINZUFÜGEN BUTTON weis von wo der Eintrag kommt?
Schon klar ich gebe die ID mit, aber dadurch das es ja eine Schleife ist überschreibt er mir die Variablen solange bis ich beim letzten Auftrag bin. Die Lösung ist sicher mit Arrays verbunden leider hab ich keine Idee wie ich das angehen kann. :(

Kann mir da jemand einen Denkanstoss geben.

Mfg
Cid
 
Du hast mehrere Möglichkeiten:

- Du baust pro Aufgabe ein Eingabefeld (unter den letzten Punkt unten drunter) und benennst ihn nach der Aufgaben-ID
- Du baust nur ein Eingabefeld unter alle Aufgaben, baust einen onclick-Event auf das UL, was deine Aufgabe repräsentiert; im onclick wird das Aufgaben-Feld entsprechend umbenannt oder ein hidden-Field mit einem Wert versorgt => Nachteil: JavaScript wird benötigt.
- Du baust mehrere Submit-Buttons, pro Aufgabe einen Button und wertest diese im PHP-Script aus.

Was ist dir lieber?
 
Wenn man auf Hinzufügen klickt, dann taucht also ein Eingabefeld auf oder was. Füg da einfach noch eine ComboBox hinzu, die die Aufgaben darstellt, damit man sich die richtige Aufgabe auswählen kann. Und wenn man dann auf OK klickt (oder wie auch immer das bei dir ist), dann sollte das eigentlich an die richtige Stelle eingefügt werden.
 
Hallo und danke für die schnellen Antworten.

@Saftmeister:

Option 3 hab ich gemacht, aber wie kann ich das jetzt PHP auswerten, bzw. wie baue ich die Submit Buttons richtig auf, sodass die PHP auswertung auch weis was von wo kommt?

@ Akeshihiro:

Die Textbox ist immer sichtbar, man kann einen kleinen ToDo reinschreiben und auf OK drücken, fürs einfügen. Nach dem OK, soll sich die Seite neu aufbaun und natürlich der DoTo beim richtigen Auftrag erscheinen.

Mfg
Cid
 
Z.B. So:

Die Value des Submit-Buttons ist dann der Titel der Aufgabe
HTML:
<form action.... method="post">
<input type="text" name="aufgabenschritt"/>
<input type="submit" name="submit" value="Aufgabe 1"/>
<input type="submit" name="submit" value="Aufgabe 2"/>
</form>

Im PHP-Script dann:

PHP:
// Daten aus dem POST-Form holen
$aufgabenTitel = $_POST['submit'];
$aufgabenSchrittNeu = $_POST['neuer_aufgabenschritt'];

// TODO: Validieren und Filtern (Sanitizing)

$sql = sprintf("SELECT id FROM aufgaben WHERE titel = '%s'", mysql_real_escape_string($aufgabenTitel);
// ID mittels mysql_query und mysql_fetch_row/array/assoc/object abholen

// Nun neuen Aufgabenschritt einfügen
$insert = sprintf("INSERT INTO aufgaben_schritte (aufgaben_id, aufgabenschritt) VALUES (%d, '%s')", 
  $aufgabenId, /* aus dem SELECT oben */
  mysql_real_escape_string($aufgabenSchrittNeu)
);
 
Hallo nochmal

Ich habe folgendes Formular, immer eingebunden:
(Ist jetzt nicht original, hab das nur schnell runtergetippselt)

<input type="hidden" name="id" value="$id"> Hier wird die Auftrags ID gesendet
<input type="text" name="new_todo" value=""> Das eingabe Feld
<input type="submit" name="new" value="OK"> Der Button

Beim Button value="" möchte ich Ok, oder soetwas stehen haben, und nicht irgendeine Fortlaufende Zahl, deshalb kann ich deinen Vorschlag leider nicht umsetzten. :(

Weist du vielleicht eine Lösung, die ich hier einbauen kann?

Mfg
Cid
 
Du könntest Radio-Buttons einbinden:

PHP:
while($row = mysql_fetch_array($result)) {
$id = $row['id'];
$auftrag = $row['auftrag'];
?>
<input type="radio" name="auftrag_id" value="<?php echo $id;?>"/> <?php echo $auftrag;?><br/>
<?php
}

Dann kannst du im PHP-Script, was die Formular-Daten entgegennimmt, einfach $_POST['auftrag_id'] auswerten.
 
Moin,

du könntest auch dein Feld "new_todo" einfach als Array anlegen.

Hier ein Beispiel:

Listenausgabe:
PHP:
echo "<ul>";
while($auftrag = mysql_fetch_assoc()) {
  echo "<li>".$auftrag["text"]."</li>";
  echo "<ul>";

  $todo_result = mysql_query([...]); //hier deine Abfrage rein für jeweilige $auftrag["id"];
  
  while($todo = mysql_fetch_assoc($todo_result)) {
    echo "<li>".$todo["text"]."</li>";
  }

  echo "<li>"
  echo "<input type=\"text\" name=\"newtodo[".$auftrag["id"]."]\" value="" />";
  echo "<input type=\"submit\" name=\"send\" value=\"ToDo hinzufügen\" />";
  echo "<li></ul>";
}
echo "</ul>";

Und die Verarbeitung:
PHP:
foreach($POST["newtodo"] as $key => $value) {
  //hier deine Verarbeitung
  //$key ist deine Auftrags-ID
  //$value dein neues Todo
}

Have fun
 
Hallo wiedermal

@ TheBodo:

Danke für deinen Beitrag, genau an das hab ich gedacht, des wegen auch der Themenname ;)
Leider bin ich mit Arrays zu schwach drauf. Deshalb bin ich nicht selbst gleich drauf gekommen. :(

Auf jedenfall hab ich das jetzt so gelöst und es funktioniert, sieht zwar ein wenig kompliziert aus aber was solls.

PHP:
if(isset($_POST["new_todo"]))
    {
    foreach($_POST["new_todo"] as $key => $value)
    {
        if($value != "")
        {
            $sql = "INSERT INTO project_todo (  project_id,
                                                todo,
                                                status)
                                    VALUES (    '$key',
                                                '$value',
                                                '1')";
            $result = mysql_query($sql) or die (mysql_error());
        }
    }
}

Wenn jemand einen Vorschlag hat wie es leichter geht, ich bin gerne für alles offen. ;)

Mfg
Cid
 
Zurück