web-dev-qa-db-ja.com

フォームが投稿されたときに送信ボタンの値を送信する

名前のリストと製品名の付いたいくつかのボタンがあります。ボタンのいずれかをクリックすると、リストの情報が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
?>

送信ボタンの値を送信する以外のすべては問題なく機能します。

34
M.G.Poirot

ボタン名は送信されないため、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 />';
}
?>
45
robbmj

代わりにこれを使用してください:

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

まず、同じIDを2回使用することはお勧めできません。 IDは一意である必要があります。要素のスタイルを設定する必要がある場合は、代わりにクラスを使用してCSSを適用する必要があります。

最後に、送信ボタンの名前をTea and Coffeeとして定義しましたが、PHPではインデックスとして送信を使用しています。たとえば、インデックスは$ _POST ['Tea']でした。 1つしか送信しないため、設定されているかどうかを確認する必要があります。これはisset()で行えます。

とにかく、ユーザー4035は私にそれを打ち負かしました、彼のコードはあなたのためにこれを「修正」します。

最初の投稿はボタンに言及しました。入力タグをボタンに置​​き換えることもできます。

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

nameおよびvalue属性は、フォームの送信時に値を送信するために必要です(この場合、id属性は必要ありません)。属性type=submitは、このボタンをクリックするとフォームが送信されることを指定します。

サーバーが送信されたフォームを処理しているとき、$_POST['product']には、クリックされたボタンに応じて値「Tea」または「Coffee」が含まれます。

必要に応じて、フォームを送信する前にユーザーに確認を求めることもできます(たとえば、削除ボタンを実装する場合に便利です)。

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

他の人が言ったように、おそらく一意のIDのアイデアを誤解していたでしょう。私が追加しなければならないのは、ここで識別プロパティとして「値」を使用するという考えが好きではないということです。

<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' ] )のようなものを追加できます。

3
DrPepperJo

Htmlをそのまま維持できますが、このphpコードを使用します

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