Felix Riesterer: verschiedene Submit-Buttons in einem Formular

Beitrag lesen

Liebe(r) xHBBo,

ist mir neu. Also meinst du dieses so?

<form name="form1" method="post" action="">

<p>Eintrag 1 -
    <input type="submit" name="loeschen" id="loeschen" value="Löschen">
  </p>
  <p>Eintrag 2 -
  <input type="submit" name="loeschen" id="loeschen" value="Löschen">
  </p>
  <p>Eintrag 3 -
  <input type="submit" name="loeschen" id="loeschen" value="Löschen">
  </p>
</form>

  
eher so:  
  
~~~html
<form action="" method="post" id="user-management">  
    <fieldset>  
        <legend>User bearbeiten</legend>  
        <ul>  
            <li>  
                <label for="user-login">User-Login</label>  
                <input id="user-login" name="user-login" type="text" value="xHBBo" />  
                <input name="user-id" type="hidden" value="4192" />  
            </li>  
            <li>  
                <label for="user-type">User-Typ</label>  
                <select id="user-type" name="user-type">  
                    <option value="user">einfacher User</option>  
                    <option value="mod">Moderator</option>  
                    <option value="admin" selected="selected">Administrator</option>  
                </select>  
            </li>  
            <li>  
                <label for="user-pw">User-Passwort</label>  
                <input id="user-pw" name="user-pw" type="text" value="changeme" />  
            </li>  
            <li>  
                <label for="user-pw2">User-Passwort (2x)</label>  
                <input id="user-pw2" name="user-pw2" type="text" value="changme" />  
            </li>  
        </ul>  
        <p>  
            <input type="submit" name="delete-button" value="User entfernen" />  
            <input type="submit" name="update-button" value="Userdaten aktualisieren" />  
        </p>  
    </fieldset>  
</form>

Wie Du sehen kannst, bietet dieses Formular zwei Buttons, die beide verschiedene Namen(!) haben. Diese name-Attributwerte werden im $_POST-Array als Schlüssel geführt werden. Allerdings taucht nur der Schlüssel in $_POST auf, dessen Button auch betätigt wurde. Folgende zwei Fälle an $_POST-Daten kannst Du mit dem vorliegenden Formular haben, wenn es exact so abgeschickt wird:

// wenn "User entfernen" betätigt wurde:  
$_POST = array(  
    'delete-button' => 'User entfernen',  
    'user-login'    => 'xHBBo',  
    'user-pw'       => 'changeme',  
    'user-pw2'      => 'changme',  
    'user-type'     => 'admin',  
);  
  
// wenn "Userdaten aktualisieren" betätigt wurde:  
$_POST = array(  
    'update-button' => 'Userdaten aktualisieren',  
    'user-login'    => 'xHBBo',  
    'user-pw'       => 'changeme',  
    'user-pw2'      => 'changme',  
    'user-type'     => 'admin',  
);

Nun willst Du eigentlich zwei Dinge prüfen:

1.) Was ist zu tun?
2.) Sind die Daten OK?

Zu der ersten Frage gehst Du vielleicht so vor:

$task = '';  
  
if (array_key_exists('delete-button', $_POST)) {  
    $task = 'delete';  
}  
  
if (array_key_exists('update-button', $_POST)) {  
    $task = 'update';  
}  
  
// password ok?  
if (array_key_exists('user-pw', $_POST)  
    && !empty($_POST['user-pw'])  
    && array_key_exists('user-pw2', $_POST)  
    && $_POST['user-pw'] === $_POST['user-pw2']  
) {  
    // password ok  
    ...  
}

Du kannst natürlich völlig andere Wege gehen, um Deine Userdaten handzuhaben, aber als Anregung, wie man verschiedene Submitbuttons einsetzen kann, sollte obiges Beispiel genügen.

Liebe Grüße,

Felix Riesterer.

--
"Wäre die EU ein Staat, der die Aufnahme in die EU beantragen würde, müsste der Antrag zurückgewiesen werden - aus Mangel an demokratischer Substanz." (Martin Schulz, Präsident des EU-Parlamentes)