Отправить значение кнопки отправки при отправке формы

У меня есть список имен и несколько кнопок с названиями продуктов. Когда одна из кнопок нажата, информация из списка отправляется на PHP-скрипт, но я не могу нажать кнопку отправки, чтобы отправить ее значение. Как это делается? Я откинул свой код до следующего:

Страница отправки:

<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> 

Страница получения: buy.php

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

Все, кроме отправки значения кнопки отправки, работает безупречно.

Имена кнопок не отправляются, поэтому значение php $_POST['submit'] не задано. Как и в isset($_POST['submit']) значение 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 />'; } ?> 

Используйте это вместо этого:

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

Для начала использование одного и того же идентификатора дважды – это не очень хорошая идея. Идентификаторы должны быть уникальными, если вам нужно стилизовать элементы, вы должны использовать класс для применения CSS.

Наконец, вы определили имя своей кнопки отправки как «Чай и кофе», но на вашем PHP вы используете submit как индекс. ваш индекс должен был бы, например, $ _POST ['Tea']. это потребует от вас проверки того, что он установлен, поскольку он отправляет только один, вы можете сделать это с помощью isset ().

Купите, в любом случае, user4035 просто избил меня, его код «исправит» это для вас.

Как и другие, вы, вероятно, пропустили идею уникального идентификатора. Все, что я должен добавить, это то, что мне не нравится идея использовать значение как свойство идентификации здесь, поскольку оно может меняться со временем (т. Е. Если вы хотите предоставить несколько языков).

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

и в вашем php-скрипте

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

Кроме того, вы можете добавить что-то вроде if( 'POST' == $_SERVER[ 'REQUEST_METHOD' ] ) если вы хотите проверить, действительно ли данные были размещены.

Вы можете поддерживать свой html как есть, но использовать этот php-код

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

Попробуйте этот код:

  <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); } ?>