web-dev-qa-db-fra.com

Envoyer la valeur du bouton d'envoi lorsque le formulaire est envoyé

J'ai une liste de noms et des boutons avec des noms de produits. Lorsque l'un des boutons est cliqué, les informations de la liste sont envoyées à un script PHP, mais je ne peux pas appuyer sur le bouton d'envoi pour envoyer sa valeur. Comment cela se passe-t-il? J'ai résumé mon code comme suit:

La page d'envoi:

<html>
<form action="buy.php" method="post">
    <select name="name">
        <option>John</option>
        <option>Henry</option>
    <select>
    <input id='submit' type='submit' name = 'Tea'    value = 'Tea'>
    <input id='submit' type='submit' name = 'Coffee' value = 'Coffee'>
</form>
</html>

La page de réception: buy.php

<?php
    $name = $_POST['name'];
    $purchase = $_POST['submit'];
    //here some database magic happens
?>

Tout sauf l'envoi de la valeur du bouton d'envoi fonctionne parfaitement.

28
M.G.Poirot

Les noms des boutons ne sont pas soumis. La valeur php $_POST['submit'] n'est pas définie. Comme dans isset($_POST['submit']) est évalué à false.

<html>
<form action="" method="post">
    <input type="hidden" name="action" value="submit" />
    <select name="name">
        <option>John</option>
        <option>Henry</option>
    <select>
<!-- 
make sure all html elements that have an ID are unique and name the buttons submit 
-->
    <input id="tea-submit" type="submit" name="submit" value="Tea">
    <input id="coffee-submit" type="submit" name="submit" value="Coffee">
</form>
</html>

<?php
if (isset($_POST['action'])) {
    echo '<br />The ' . $_POST['submit'] . ' submit button was pressed<br />';
}
?>
42
robbmj

Utilisez ceci à la place:

<input id='tea-submit' type='submit' name = 'submit'    value = 'Tea'>
<input id='coffee-submit' type='submit' name = 'submit' value = 'Coffee'>
13
user4035

Pour commencer, utiliser le même identifiant deux fois n'est pas une bonne idée. Les identifiants doivent être uniques. Si vous devez styler des éléments, vous devez utiliser une classe pour appliquer CSS.

Enfin, vous avez défini le nom de votre bouton d'envoi comme étant thé et café, mais dans votre PHP, vous utilisez l'envoi en tant qu'index. votre index aurait dû être $ _POST ['Tea'] par exemple. cela nécessiterait que vous vérifiiez qu'il soit défini car il n'en envoie qu'un, vous pouvez le faire avec isset ().

Achetez quand même, user4035 vient de me battre, son code "corrigera" cela pour vous.

La publication initiale mentionnait des boutons. Vous pouvez également remplacer les balises d'entrée par des boutons.

<button type="submit" name="product" value="Tea">Tea</button>
<button type="submit" name="product" value="Coffee">Coffee</button>

Les attributs name et value sont requis pour soumettre la valeur lorsque le formulaire est soumis (l'attribut id n'est pas nécessaire dans ce cas). L'attribut type=submit indique que cliquer sur ce bouton provoque l'envoi du formulaire.

Lorsque le serveur gère le formulaire soumis, $_POST['product'] contient la valeur "Thé" ou "Café" en fonction du bouton sur lequel l'utilisateur a cliqué.

Si vous le souhaitez, vous pouvez également demander à l'utilisateur de confirmer avant de soumettre le formulaire (utile lorsque vous implémentez un bouton de suppression, par exemple).

<button type="submit" name="product" value="Tea" onclick="return confirm('Are you sure you want tea?');">Tea</button>
<button type="submit" name="product" value="Coffee" onclick="return confirm('Are you sure you want coffee?');">Coffee</button>
2
phn

Comme l'ont dit les autres, vous avez probablement mal compris l'idée d'un identifiant unique. Tout ce que je dois ajouter, c'est que je n'aime pas l'idée d'utiliser "valeur" comme propriété d'identification ici, car elle peut changer avec le temps (c'est-à-dire si vous souhaitez fournir plusieurs langues).

<input id='submit_tea'    type='submit' name = 'submit_tea'    value = 'Tea' />
<input id='submit_coffee' type='submit' name = 'submit_coffee' value = 'Coffee' />

et dans votre script php

if( array_key_exists( 'submit_tea', $_POST ) )
{
  // handle tea
}
if( array_key_exists( 'submit_coffee', $_POST ) )
{
  // handle coffee
}

De plus, vous pouvez ajouter quelque chose comme if( 'POST' == $_SERVER[ 'REQUEST_METHOD' ] ) si vous voulez vérifier si les données ont été réellement publiées.

2
DrPepperJo

Vous pouvez maintenir votre code HTML tel quel mais utiliser ce code php

<?php
    $name = $_POST['name'];
    $purchase1 = $_POST['Tea'];
    $purchase2 =$_POST['Coffee'];
?>
0
Orchid Engr