Valeur d'envoi du bouton de soumission lorsque le formulaire est posté
J'ai une liste de noms et quelques boutons avec des noms de produits. Lorsque l'on clique sur l'un des boutons, les informations de la liste sont envoyées à un script PHP, mais je ne peux pas appuyer sur le bouton submit pour envoyer sa valeur. Comment est-il fait? J'ai fait bouillir mon code à ce qui 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: acheter.php
<?php
$name = $_POST['name'];
$purchase = $_POST['submit'];
//here some database magic happens
?>
Tout sauf l'envoi de la valeur du bouton de soumission fonctionne parfaitement.
7 réponses
Les noms des boutons ne sont pas soumis, donc la valeur php $_POST['submit']
n'est pas définie. Comme dans isset($_POST['submit'])
évalue à 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 />';
}
?>
Utilisez ceci à la place:
<input id='tea-submit' type='submit' name = 'submit' value = 'Tea'>
<input id='coffee-submit' type='submit' name = 'submit' value = 'Coffee'>
Pour commencer, utiliser le même ID deux fois n'est pas une bonne idée. Les ID doivent être uniques, si vous avez besoin d'éléments de style, vous devez utiliser une classe pour appliquer CSS à la place.
Enfin, vous avez défini le nom de votre bouton de soumission comme du thé et du café, mais dans votre PHP, vous utilisez submit comme index. votre index aurait dû être $_POST ['Tea'] par exemple. cela vous obligerait à vérifier qu'il est défini car il n'en envoie qu'un , vous pouvez le faire avec isset().
Acheter de toute façon, user4035 juste me battre pour elle , son code va "réparer" cela pour vous.
Comme les autres l'ont dit, vous manquez probablementcompris 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 "value" comme propriété d'identification ici, car elle peut changer avec le temps (c'est-à-dire si vous voulez 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
}
En outre, vous pouvez ajouter quelque chose comme if( 'POST' == $_SERVER[ 'REQUEST_METHOD' ] )
Si vous voulez vérifier si les données ont été validées.
Vous pouvez maintenir votre html tel quel mais utilisez ce code php
<?php
$name = $_POST['name'];
$purchase1 = $_POST['Tea'];
$purchase2 =$_POST['Coffee'];
?>
Le message initial mentionné 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
spécifie que cliquer sur ce bouton provoque l'envoi du formulaire.
Lorsque le serveur gère le formulaire soumis, $_POST['product']
contiendra la valeur " thé " ou "café" en fonction du bouton cliquer.
Si vous le souhaitez, vous pouvez également demander à l'utilisateur de confirmer avant de soumettre le formulaire (utile lorsque vous implémentez un bouton Supprimer 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>
Essayez ce code :
<html>
<form action="" method="post">
<input type="hidden" name="action" value="submit" />
<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>
<?php
if (isset($_POST['name']) && isset($_POST['tea'])){
$tea = $_POST['tea'];
$name = $_POST['name'];
$message .= "Button : ".$tea."\n";
$message .= "Name : ".$name."\n";
$send = "your_email@service.tld";
$subject = "Your Subject here";
$headers = "From:$name<email@local.com>";
mail($send,$subject,$message,$headers);
}
else if (isset($_POST['name']) && isset($_POST['coffee'])){
$coffee = $_POST['coffee'];
$name = $_POST['name'];
$message .= "Button : ".$coffee."\n";
$message .= "Name : ".$name."\n";
$send = "your_email@service.tld";
$subject = "Your Subject here";
$headers = "From:$name<email@local.com>";
mail($send,$subject,$message,$headers);
}
?>