Christian: 2 Submit-Buttons für 1 Formular

Guten Tag allerseits,

ich habe eine (von PHP aus einer MySQL-db gelesene) Liste mit Einträgen.
Diese Liste ist von einem Formular umschlossen.
Zu jedem Eintrag befindet sich am Anfang jeder Zeile eine Checkbox.
Unter der Liste soll man per Klick auf ein edit-Bildchen alle markierten Einträge bearbeiten können oder per Klick auf ein delete-Bildchen alle markierten Einträge löschen können.

Bisher sah das so aus:
<td><input type="image" src="images/bearbeiten.jpg" name="submit" value="edit"></td>
<td><input type="image" src="images/loeschen.jpg" name="submit" value="del"></td>

Ich hatte dabei ganz naiv gehofft, dass ich auf der Zielseite einfach per if-Abfrage (ob $submit == "edit" oder "del" ist) feststellen kann, ob die markierten Einträge bearbeitet oder gelöscht werden sollen.

Klappt aber nicht. Ein zweiter Versuch, diese notwendige Information mit abzuschicken, schlug auch fehl:

<input type="hidden" name="type">
<td><input type="image" src="images/bearbeiten.jpg" name="submit" value="edit" onclick="document.multi.type.value = edit"></td>
<td><input type="image" src="images/loeschen.jpg" name="submit" value="del" onclick="document.multi.type.value = del"></td>

$type ist nach absenden weiterhin inhaltsleer.

Hat jemand einen Tipp?

Gute Nacht!

Christian

  1. Hi,

    Ich hatte dabei ganz naiv gehofft, dass ich auf der Zielseite einfach per if-Abfrage (ob $submit == "edit" oder "del" ist) feststellen kann, ob die markierten Einträge bearbeitet oder gelöscht werden sollen.

    Ich würde auch wenn dann mit $_POST['submit'] bzw $_GET['submit'] überprüfen.

    MfG
    TheBigfoot

    1. Hallo!

      Warum? Ich glaube, ich habe das mit dem $_POST - Array noch nicht ganz verstanden. Erst habe ich es ausschließlich benutzt, bis mir jemand sagte, was ich mir doch für 'ne Arbeit damit mache, das ginge schließlich auch ohne den _POST['...']-Kram.
      Ich dachte bis jetzt, dass das wirklich nur dazu gut ist, den originalen $_POST['submit']-Wert vom Formular nochmal aufzurufen, wenn $submit innerhalb der verarbeitenden Datei schon geändert wurde.

      Hat das auch was mit Servereinstellungen zu tun? Unterstützen manche Server nur $_POST['submit'] und nicht $submit bei übertragenen Formularen mit method="post" ?

      Grüße
      Christian

      1. Moin!

        Warum? Ich glaube, ich habe das mit dem $_POST - Array noch nicht ganz verstanden. Erst habe ich es ausschließlich benutzt, bis mir jemand sagte, was ich mir doch für 'ne Arbeit damit mache, das ginge schließlich auch ohne den _POST['...']-Kram.

        Da hat dir derjenige aber wirklich keinen guten Rat gegeben.

        Natürlich stimmt, dass man statt $_POST['formularfeldname'] auch auf $formularfeldname zugreifen kann - aber das gilt nur, solange die PHP-Option "register_globals" eingeschaltet ist. Da genau dieses Verhalten aber zu vielen Sicherheitslücken geführt hat, ist die erwünschte Einstellung aber "ausgeschaltet", und man sollte heute nur noch so programmieren, dass die Skripte auch mit ausgeschalteten register_globals zurechtkommen - und das bedeutet eben, dass Formulardaten AUSSCHLIESSLICH per $_POST oder $_GET erreichbar sind.

        Ich dachte bis jetzt, dass das wirklich nur dazu gut ist, den originalen $_POST['submit']-Wert vom Formular nochmal aufzurufen, wenn $submit innerhalb der verarbeitenden Datei schon geändert wurde.

        Falsch gedacht. Erstens kann man natürlich auch Werte im $_POST verändern, andererseits würde ich dies nicht wirklich tun wollen. Wenn du Formulardaten verändern und weiterverarbeiten willst, gehören die Veränderungen natürlich in eine andere Variable. Nur: Die Variable darf nicht einfach als existierend vorausgesetzt werden, der Automatismus ist, wie erwähnt, eben abschaltbar.

        • Sven Rautenberg
        1. Ah, danke für die Aufklärung!

  2. "document.multi.type.value = 'edit'"
    "document.multi.type.value = 'del'"
    Strings immer in irgendwelche Anführungszeichen packen
    ;)

    1. oh, richtig, danke

  3. Moin!

    <td><input type="image" src="images/bearbeiten.jpg" name="submit" value="edit"></td>
    <td><input type="image" src="images/loeschen.jpg" name="submit" value="del"></td>

    Ich hatte dabei ganz naiv gehofft, dass ich auf der Zielseite einfach per if-Abfrage (ob $submit == "edit" oder "del" ist) feststellen kann, ob die markierten Einträge bearbeitet oder gelöscht werden sollen.

    Image-Submitbuttons senden die X- und Y-Koordinate des Mausklicks. Nur ganz wenige existierende Browser senden außerdem noch das name/value-Paar. Folglich mußt du die Unterscheidung im name-Attribut treffen und auf Existenz von Koordinaten des Namens prüfen.

    print_r($_POST) zeigt dir an, was das Formular an Daten sendet.

    • Sven Rautenberg
    1. Moin moin!

      Image-Submitbuttons senden die X- und Y-Koordinate des Mausklicks.

      Oha. Ich wusste gar nichts von einem solchen Koordinatensystem. Und wie fragt man die ab?

      Folglich mußt du die Unterscheidung im name-Attribut treffen und auf Existenz von Koordinaten des Namens prüfen.

      Wenn der Name nicht "submit" sein muss, dann folgere ich daraus, dass das Formular abgesendet wird, sobald der Benutzer auf _irgendein_ <input type="image"> innerhalb des Formulars klickt?

      Beste Grüße
      Christian

      1. Moin!

        Image-Submitbuttons senden die X- und Y-Koordinate des Mausklicks.
        Oha. Ich wusste gar nichts von einem solchen Koordinatensystem. Und wie fragt man die ab?

        Wie ich schon sagte: Lass dir mit print_r($_POST) (oder $_GET) die Inhalte des gesendeten Formulars ausgeben, dann siehst du es sofort.

        Folglich mußt du die Unterscheidung im name-Attribut treffen und auf Existenz von Koordinaten des Namens prüfen.

        Wenn der Name nicht "submit" sein muss, dann folgere ich daraus, dass das Formular abgesendet wird, sobald der Benutzer auf _irgendein_ <input type="image"> innerhalb des Formulars klickt?

        Der Name eines Formularelementes sorgt für gar nichts. Die Eigenschaft "Submitbutton" ist das entscheidende, und davon gibts eben verschiedene. Ein simpler <input type="submit"> reicht schon vollkommen aus zum Absenden. Namen sind nirgendwo zwangsdefiniert.

        • Sven Rautenberg