web-dev-qa-db-fra.com

Comment utiliser deux boutons d'envoi et différencier celui qui a été utilisé pour envoyer le formulaire?

Actuellement, j'ai un formulaire HTML où l'utilisateur entrera un titre et un texte pour un article. Quand il est temps de soumettre, ils sont présentés avec deux boutons. L'une consiste à "sauvegarder" leur article sans le publier, et l'autre à "publier" l'article et à le rendre public.

J'utilise PHP, et j'essaie de comprendre comment dire quel bouton a été utilisé, afin de stocker la valeur correspondante appropriée dans la base de données.

<td>
<input type="submit" class="noborder" id="save" value="" alt="Save" tabindex="4" />
</td>
<td>
<input type="submit" class="noborder" id="publish" value="" alt="Publish" tabindex="5" />
</td>

J'aurais probablement dû le mentionner plus tôt, mais je ne peux pas attribuer les valeurs des boutons car le bouton est une image, donc le texte apparaîtra au-dessus.

33
fvgs

Donnez à chaque input un attribut name. Seul l'attribut input de name cliqué sera envoyé au serveur.

<input type="submit" name="publish" value="Publish">
<input type="submit" name="save" value="Save">

Et alors

<?php
    if (isset($_POST['publish'])) {
        # Publish-button was clicked
    }
    elseif (isset($_POST['save'])) {
        # Save-button was clicked
    }
?>

Modifier: les attributs value ont été remplacés par alt. Je ne suis pas sûr que ce soit la meilleure approche pour les boutons d'image, pour une raison particulière, vous ne voulez pas utiliser input[type=image]?

Edit: Comme cela ne cesse d'augmenter les votes, j'ai continué et j'ai changé le code bizarre alt/value en de vraies entrées de soumission. Je crois que la question d'origine demandait une sorte de boutons d'image, mais il existe de bien meilleures façons d'y parvenir de nos jours au lieu d'utiliser input[type=image].

73
powerbuoy

Donnez un nom et des valeurs à ces boutons de soumission comme:

    <td>
    <input type="submit" name='mybutton' class="noborder" id="save" value="save" alt="Save" tabindex="4" />
    </td>
    <td>
    <input type="submit" name='mybutton' class="noborder" id="publish" value="publish" alt="Publish" tabindex="5" />
    </td>

puis dans votre script php, vous pouvez vérifier

if($_POST['mybutton'] == 'save')
{
  ///do save processing
}
elseif($_POST['mybutton'] == 'publish')
{
  ///do publish processing here
}
8
Dr. Dan

Si vous ne pouvez pas mettre de valeur sur les boutons. J'ai juste une solution approximative. Mettez un champ caché. Et lorsque l'un des boutons est cliqué avant de soumettre, remplissez la valeur du champ caché avec, disons, 1 lorsque le premier bouton est cliqué et 2 si le second est cliqué. et dans la page de soumission, vérifiez la valeur de ce champ masqué pour déterminer lequel est cliqué.

2
WatsMyName

Vous pouvez l'utiliser comme suit,

<td>

<input type="submit" name="save" class="noborder" id="save" value="Save" alt="Save" 
tabindex="4" />

</td>

<td>

<input type="submit" name="publish" class="noborder" id="publish" value="Publish" 
alt="Publish" tabindex="5" />

</td>

Et en PHP,

<?php
if($_POST['save'])
{
   //Save Code
}
else if($_POST['publish'])
{
   //Publish Code
}
?>
1
Stranger