Frage zu switch() bei POST
Matze
- php
Hallo,
ich wollte mit der switch-Funktion prüfen welcher button von vielen in mehreren Formularen gedrückt wurde.
In der HTML-Datei stehen mehrere Formulare mit jeweils 1 oder 2 submit-buttons. Der Einfachheit wegen hier im Beispiel einfach button1, button2 und button3 genannt.
Ich dachte mit der switch-Funktion komme ich so weiter:
switch($_POST){
// erstes Formular
case 'button1':
// tue etwas sinnvolles
break;
// zweites Formular
case 'button2':
case 'button3':
// tue etwas sinnvoles
break;
}
Leider springt PHP so in keinen case-Zweig.
Ich würde aber gern eine ewig lange if-liste vermeiden (es kommen ja noch ein paar Buttons dazu).
Geht das überhaupt mit switch?
Danke und Grüße, Matze
Mahlzeit Matze,
Ich dachte mit der switch-Funktion komme ich so weiter:
switch($_POST){
// erstes Formular
case 'button1':
// tue etwas sinnvolles
Ich übersetze mal kurz: "Wenn in der Variablen $_POST der Wert 'button1' steht ..."
Ist das so? Ich denke eher nicht - $_POST ist ein Array. Entweder Du findest dafür eine geeignete [link:http://de.php.net/manual/en/ref.array.php@title=Funktion] oder Du gehst alternativ anders vor:
Gib allen Buttons den gleichen Namen, aber verschiedene Werte. So kannst Du mittels eines
[code lang=php]switch($_POST['buttonname']) {
case 'wert1':
break;
case 'wert2':
break;
}
bestimmen, was zu tun ist.
MfG,
EKKi
--
sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
Hallo EKKI!
(..)$_POST ist ein Array. Entweder Du findest dafür eine geeignete Funktion(..)
Das mit der Variablen und dem Array war mir schon irgendwie klar :(
Ich dachte switch() kommt wenigstens irgendwie mit den super-globalen klar.
Ich dachte es würde funktionieren^^
(..)oder Du gehst alternativ anders vor:
Gib allen Buttons den gleichen Namen, aber verschiedene Werte. So kannst Du mittels eines
Das ist leider nicht möglich, da die Werte durchaus gleich sein können bzw. sollen wenn die buttons denselben Zweck erfüllen.
Danke trotzdem für den Vorschlag!
Hier komm ich um if() wohl nicht herum.
Grüße, Matze
Hi,
(..)$_POST ist ein Array. Entweder Du findest dafür eine geeignete Funktion(..)
Das mit der Variablen und dem Array war mir schon irgendwie klar :(
Ich dachte switch() kommt wenigstens irgendwie mit den super-globalen klar.
Natürlich "kommt" es damit klar - wie mit jeder anderen Variablen, die an seiner Position gültig ist, auch.
Aber wenn du versuchst, mittels switch einen gar nicht existenten Wert zu verarbeiten, geht das natürlich nicht - und das hat mit superglobal oder nicht überhaupt nichts zu tun.
MfG ChrisB
Hello,
allen Buttons denselben Namen zu geben, ist nicht gut.
Das zerstört die Sparachunabhängigkeit der Seite, da der Value eines Buttons ja die Beschriftung steuert.
Also hilft folgendes Konstrukt:
$btn = false;
if (isset($_POST['btn'] and is_array($_POST['btn']))
{
$btn = key($_POST['btn']);
}
switch($btn)
{
// erstes Formular
case 'save':
// Daten sichern
break;
case 'search':
// Datensatz suchen
break;
case 'delete':
// Datensatz löschen
break;
}
Der Button heißt dann im Formular
<input type="submit" name="btn[save]" value="speichern">
<input type="submit" name="btn[search]" value="suchen">
<input type="submit" name="btn[delete]" value="löschen">
Und dann funktioniert es auch mit dem Switch.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
![](http://selfhtml.bitworks.de/Virencheck.gif)
--
Nur selber lernen macht schlau
<http://bergpost.annerschbarrich.de>
Mahlzeit Tom,
allen Buttons denselben Namen zu geben, ist nicht gut.
Ist aber zumindest eine Idee. Und bei "richtigen" Buttons funktioniert das auch. Bei Eingabeelementen natürlich nicht ...
Das zerstört die Sparachunabhängigkeit der Seite, da der Value eines Buttons ja die Beschriftung steuert.
http://de.selfhtml.org/html/formulare/klickbuttons.htm#modern@title=Nein.
Der Button heißt dann im Formular
<input type="submit" name="btn[save]" value="speichern">
<input type="submit" name="btn[search]" value="suchen">
<input type="submit" name="btn[delete]" value="löschen">
Wenn man gerne <input>-Elemente statt <button>-Elemente verwendet, trifft das zu.
MfG,
EKKi
Hello EKKi,
Wenn man gerne <input>-Elemente statt <button>-Elemente verwendet, trifft das zu.
Kann man denn jetzt mit <button>-Elementen auch ohne (Java)Script requesten?
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
echo $begrüßung;
» Wenn man gerne <input>-Elemente statt <button>-Elemente verwendet, trifft das zu.
Kann man denn jetzt mit <button>-Elementen auch ohne (Java)Script requesten?
Zumindest der IE8 hat den <button type=submit>-Fehler nicht mehr. Wenn ich mich recht erinnere, hat der 7er den noch ... ja, richtig (3. Punkt).
echo "$verabschiedung $name";
Hello,
Kann man denn jetzt mit <button>-Elementen auch ohne (Java)Script requesten?
Zumindest der IE8 hat den <button type=submit>-Fehler nicht mehr. Wenn ich mich recht erinnere, hat der 7er den noch ... ja, richtig (3. Punkt).
Also ohne JavaScript geht es weder im IE 6.0, noch im Firefox 3.0.10
Mit
<button name="Klickmich" type="button"
value="Überraschung" onclick="this.form.submit();">
<p>
<img src="buttonpicture.gif" width="100" height="100" alt="SELFHTML Logo"><br>
<b>Was passiert wohl?</b>
</p>
</button><br>
kommt beim IE, wie allseits bekannt, der Inhalt des HTML-Elementes als Wert
[Klickmich] => <P><IMG height=100 alt="SELFHTML Logo" src="buttonpicture.gif" width=100><BR><B>Was passiert wohl?</B> </P>
erstaunlicherweise mit escapten Doublequotes und der Name [Klickmich] wird als Parametername übermittelt.
Beim Firefox kommt vom Button gar nichts, aber die übrigen Elemente des Forms, die mit einem normalen Submit-Button übertragen würden, werden übertragen.
Was soll man also mit einem solchen Button-Element anfangen?
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hi,
Also ohne JavaScript geht es weder im IE 6.0, noch im Firefox 3.0.10
<button name="Klickmich" type="button"
value="Überraschung" onclick="this.form.submit();">
http://de.selfhtml.org/html/formulare/formularbuttons.htm#modern:
Um einen Button zum Absendebutton (Submit-Button) zu erklären, müssen Sie im einleitenden <button>-Tag type="submit" notieren.
MfG ChrisB
Hello,
http://de.selfhtml.org/html/formulare/formularbuttons.htm#modern:
Um einen Button zum Absendebutton (Submit-Button) zu erklären, müssen Sie im einleitenden <button>-Tag type="submit" notieren.
Ach, wer hätte das gedacht!
Das Leben kann doch so einfach sein :-P
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hello,
http://de.selfhtml.org/html/formulare/formularbuttons.htm#modern:
Um einen Button zum Absendebutton (Submit-Button) zu erklären, müssen Sie im einleitenden <button>-Tag type="submit" notieren.
Ach, wer hätte das gedacht!
Das Leben kann doch so einfach sein :-P
Oder doch nicht?
Wenn man type="submit" benutzt, sendet der IE6.x, der ja noch oft vertreten ist, die <button>-Elemente in seiner gewohnt falschen Form immer mit, egal, ob sie gedrückt wurden, oder nicht.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
echo $begrüßung;
Wenn man type="submit" benutzt, sendet der IE6.x, der ja noch oft vertreten ist, die <button>-Elemente in seiner gewohnt falschen Form immer mit, egal, ob sie gedrückt wurden, oder nicht.
Ja, das ist der zweite Teil vom Bug. Content statt value-Attribut und alle <button type=submit> auf einmal. Beides lässt sich mit dem per Javascript und erst bei onclick gesetzten name- und value-Attribut beheben.
echo "$verabschiedung $name";
Hello,
Wenn man type="submit" benutzt, sendet der IE6.x, der ja noch oft vertreten ist, die <button>-Elemente in seiner gewohnt falschen Form immer mit, egal, ob sie gedrückt wurden, oder nicht.
Ja, das ist der zweite Teil vom Bug. Content statt value-Attribut und alle <button type=submit> auf einmal. Beides lässt sich mit dem per Javascript und erst bei onclick gesetzten name- und value-Attribut beheben.
Irgendwie steht der bei uns auch auf der Sperrliste. Ich komm leider gerade nicht an die Begründung. Der Datenbankserver ist down.
Fehlervermeidung scheint aber noch die beste Möglichkeit der Fehlernehebung zu sein. :-(
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
echo $begrüßung;
Also ohne JavaScript geht es weder im IE 6.0, noch im Firefox 3.0.10
Der Firefox hat kein Problem (abgesehen von seinem Verhalten "Bei Entertaste sende ich irgendeinen unbeteiligten Submit-Button mit.")
<button name="Klickmich" type="button" value="Überraschung" onclick="this.form.submit();">
Wie ChrisB schon bemerkte, geht es um Submit- und nicht um Click-Buttons. Das Javascript wird für die Submit-Buttons benötigt, um name- und value-Attribut zu setzen. Dann schickt der IE6 keinen Unfug (und der 7er auch).
echo "$verabschiedung $name";