Matze: Frage zu switch() bei POST

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

  1. 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:|
    
    1. 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

      1. 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

        --
        Light travels faster than sound - that's why most people appear bright until you hear them speak.
  2. 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>
    
    1. 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

      --
      sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
      1. 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

        --
        Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de
        1. 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";

          1. 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

            --
            Nur selber lernen macht schlau
            http://bergpost.annerschbarrich.de
            1. 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

              --
              Light travels faster than sound - that's why most people appear bright until you hear them speak.
              1. 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

                --
                Nur selber lernen macht schlau
                http://bergpost.annerschbarrich.de
                1. 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

                  --
                  Nur selber lernen macht schlau
                  http://bergpost.annerschbarrich.de
                  1. 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";

                    1. 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

                      --
                      Nur selber lernen macht schlau
                      http://bergpost.annerschbarrich.de
            2. 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";