Mehrere Submit-Buttons aus einem Formular heraus
Manfred Dessel
- php
Hallo Zusammen
Überall kann man nachlesen, das man mittels Form action und input type submit ein PHP-Script aufrufen kann.
Nirgendwo steht aber geschrieben, wie man auf der selben Seite mehrere Buttons erstellen kann die verschiedene PHP-Scripte ausführen. Z.B. <Speichern> <Datensatz editieren> <Neu> <Datensatz löschen> usw.
Ich hab's wie folgt versucht, funktioniert aber nicht
<form action="eintragen.php" method="post" target="SELFHTML_in_a_box">
<form action="loeschen.php" method="post" target="SELFHTML_in_a_box">
<tr> <th align=right> name1:
</th> <td>
<input type=text name="name1" size="30" maxlength=30 value="<? echo $name1; ?>">
</td>...
...
<input type="submit" name="Submit" value="Eintragen">
<input type="submit" name="Submit" value="loeschen">
Wenn ich stattdessen nur einen einfachen Link benutze, kann ich zwar die einzelnen PHP-Dateien öffnen, aber ich kann keine Variablen übergeben.
Kann vielleicht jemand eine Idee, wie man so etwas Codiert?
Über eine Antwort würde ich mich sehr freuen.
mfg
M.Dessel
Hallo Zusammen
Hallo,
<form action="eintragen.php" method="post" target="SELFHTML_in_a_box">
<form action="loeschen.php" method="post" target="SELFHTML_in_a_box">
[...]
Du darfst die Formulare nicht verschachteln. Jeder Button muss ein eigenes Formular bekommen, welches jeweils die entsprechende Action hat. Die Felder, welche an das aufzurufende PHP-Script übergeben werden sollen, musst du in jedem Formular definieren.
Gruß,
Jens
Hallo Jens,
danke für Deine schnelle Antwort. Es handelt sich aber im Prinzip um die selben Eingabefelder innerhalb der Seite. Diese sollen nur verschieden behandelt werden.
z.B.
Input Anrede
Input Vorname
Input Nachname
-> Speichern Soll den aktuellen Datensatz in DB speichern
-> loeschen Soll den aktuellen Datensatz aus DB loeschen
-> Editieren Soll Datensatz aus DB holen und in die Inputfelder einfügen.
usw.
Kannst Du mir vielleicht ein kleines Beispiel andeuten wie Du es machen würdest.
Vielen Dank
Manfred
echo $begrüßung;
<input type="submit" name="Submit" value="Eintragen">
<input type="submit" name="Submit" value="loeschen">
Anhand des name-value-Paares, das ebenso im $_POST-Array auftaucht kannst du unterscheiden, welcher Button gedrückt wurde und dementsprechend innerhalb deines Scripts verzweigen. Dazu ist dann nicht mehrere Formulare nötig.
Beachte, dass die Browser es durchaus unterschiedlich handhaben, wenn das Formular mit Enter abgesendet wurde. Der IE sendet dann gar keinen Button-Wert (hier kann man sich mit einem gleichnamigen hidden field den gewünschten default-Wert übermitteln), der FF sendet den Wert des ersten Button den er findet.
echo "$verabschiedung $name";
Hi,
danke für Deine Antwort. Hört sich gut an nur ich hab 2 Fragen:
Die 2 Buttons "Speichern" und "Loeschen" habe ich schon erstellt.
Gruss
Manfred
Hi!
- Wie und wo finde ich heraus, wie mein $_POST-Array lautet?
echo '<pre>';
print_r($_POST);
echo '</pre>';
- Wie funktioniert das mit dem Hidden-field.
Schaue dir mal den entsprechenden Eintrag in Selfhtml an: http://de.selfhtml.org/html/formulare/versteckte.htm
Ansonsten behandelst du hidden-Felder wie alle anderen auch.
Grüße,
Fabian St.
Hi!
Nirgendwo steht aber geschrieben, wie man auf der selben Seite mehrere Buttons erstellen kann die verschiedene PHP-Scripte ausführen. Z.B. <Speichern> <Datensatz editieren> <Neu> <Datensatz löschen> usw.
Ich hab's wie folgt versucht, funktioniert aber nicht<form action="eintragen.php" method="post" target="SELFHTML_in_a_box">
<form action="loeschen.php" method="post" target="SELFHTML_in_a_box">
Wie du unter http://de.selfhtml.org/html/referenz/elemente.htm#form nachlesen kannst, darf in einem Formular kein anderes Formular vorkommen. Dein bisheriger Versuch fällt demnach flach.
Erstelle stattdessen _ein_ Formular mit _mehreren_ Submit-Buttons, die unterschiedliche Namen tragen:
<form action="bearbeitung.php" method="post">
...
<input type="submit" name="btn[edit]" />
<input type="submit" name="btn[remove]" />
...
</form>
In der Seite bearbeitung.php frägst du dann mittels isset($_POST['btn']['edit']) bzw. isset($_POST['btn']['remove']) ab, welcher der Buttons gedrückt würde und leitest die dementsprechende Verarbeitung ein.
Grüße,
Fabian St.
Hi,
vielen Dank an alle die mir geholfen haben. Funktioniert super.
Dennoch habe ich noch eine Frage:
Die Eingabezeile in meiner From sieht z.B.so aus:
<input type=text name="Vorname" size="30" maxlength=30 value="<? echo $Vorname; ?>">
Kann ich, wenn ich z.B. den Wert für Vorname mittels PHP im Script verändert habe, diesen wieder in das Eingabefeld übertragen, sozusagen anders herum?
Wäre Toll wenn Ihr mir da auch noch helfen könntet.
mfg
Manfred
Hi!
vielen Dank an alle die mir geholfen haben. Funktioniert super.
Dennoch habe ich noch eine Frage:Die Eingabezeile in meiner From sieht z.B.so aus:
<input type=text name="Vorname" size="30" maxlength=30 value="<? echo $Vorname; ?>">
Du solltest bei den Name-Value-Paaren die Werteangaben immer in Anführungszeichen setzen. Es geht zwar auch ohne, aber dies ist schlechter Stil. Darüber hinaus sieht das hier so aus, als ob bei dir register_globals auf On stehen - das solltest du ändern, da dies ein Sicherheitsrisiko darstellt.
Kann ich, wenn ich z.B. den Wert für Vorname mittels PHP im Script verändert habe, diesen wieder in das Eingabefeld übertragen, sozusagen anders herum?
Sicher. Das hast du doch bereits oben gemacht. Oder verstehe ich deine Frage falsch?
Grüße,
Fabian St.
Hi,
habe Register_Globals auf Off gestellt.
Es wir trotzdem kein Wert zurückgeschrieben.
Ich habe hier mal die beiden PHP-Dateien aufgelistet:
Wenn ich z.B. in der Index.PHP den Wert 555 eintrage und rufe
mittels Button die "Edit"-Funktin auf, so wird dieser Wert richtig übergeben. In der ausgabe1.php wird dieser Wert auch auf 999 gesetzt.
Wechsel ich aber zurück in die Index.php, so bleibt das Feld Wert leer.
Was mach ich nur falsch
mfg
Manfred
Index.PHP
---------
<head>
<title>TestSite</title>
</head>
<body>
<form action="ausgabe1.php" method=get>
<hr noshade>
<table border bgcolor=#CCFFFF>
<!----------->
<! Wert
<!----------->
<tr> <!Einleitung einer Tabellenzeile>
<th align=right> <!Einleitung einer Kopfzeile rechtsbündig>
Wert:
</th> <!Ende der Kopfzeile>
<td>
<input type=text name='Wert' size="30" maxlength=30 value='<? echo $Wert; ?>'>
</td>
</table>
<hr noshade>
<input type="submit" name="edit" />
<input type="submit" name="remove" />
</form>
</body>
</html>
ausgabe1.php
------------
<?
If (isset($edit)) {
echo "Edit ".$Wert;
$Wert="999";
echo "Edit ".$Wert;
}
If (isset($remove)) {
echo "Remove ".$Wert;
}
?>
<br>
<a href="index.php">Back To Index</a><br>
Hi!
habe Register_Globals auf Off gestellt.
Nein, offenbar _nicht_, da du sonst in der ausgabe1.php die Variablen $edit, $Wert mit ihren dazugehörigen Werten nicht verwenden könntest. Unter der Bedingung, dass register_globals auf Off steht, könntest du nur mit $_GET['Wert'] bzw. $_POST['Wert'] auf die Werte zugreifen.
Wenn ich z.B. in der Index.PHP den Wert 555 eintrage und rufe
mittels Button die "Edit"-Funktin auf, so wird dieser Wert richtig übergeben. In der ausgabe1.php wird dieser Wert auch auf 999 gesetzt.
Wechsel ich aber zurück in die Index.php, so bleibt das Feld Wert leer.
Was mach ich nur falsch
[...]
Die Variable $Wert bleibt auf index.php natürlich leer, da du sie ja dort nirgends definiert hast [1] - wo soll sie denn auch sonst herkommen? Die einfachste Lösung für dein Problem wäre vermutlich ein Formular auf der Seite ausgabe1.php, das dann die Daten zur index.php schickt.
Für was jedoch eine solche Konstruktion gut sein soll, erschließt sich mir nicht.
Grüße,
Fabian St.
[1] Auf so etwas hätte dich u.a. auch ein error_reporting(E_ALL)
gebracht, welches eigentlich zu Beginn eines jeden Skriptes zum Debuggen gesetzt werden sollte.
Hi,
Die Variable $Wert bleibt auf index.php natürlich leer, da du sie ja dort nirgends definiert hast [1] - wo soll sie denn auch sonst herkommen? Die einfachste Lösung für dein Problem wäre vermutlich ein Formular auf der Seite ausgabe1.php, das dann die Daten zur index.php schickt.
Für was jedoch eine solche Konstruktion gut sein soll, erschließt sich mir nicht.
Der Grund soll sein, dass ich nach dem z.B. Abspeichern der Daten, diese noch weiterhin im Eingabeformular zu sehen und diese evtl. weiterbearbeiten kann oder andere Dinge damit zu erledigen.
Gruss
Manfred