it-swarm.com.de

Senden Sie den Wert des Submit-Buttons, wenn das Formular veröffentlicht wird

Ich habe eine Liste von Namen und einige Schaltflächen mit Produktnamen. Wenn Sie auf eine der Schaltflächen klicken, werden die Informationen der Liste an ein Skript PHP gesendet, aber ich kann die Schaltfläche zum Senden nicht drücken, um den Wert zu senden. Wie wird das gemacht? ... Ich habe meinen Code auf Folgendes reduziert:

Die sendende Seite:

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

Die empfangende Seite: buy.php

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

Alles außer das Senden des Submit-Button-Werts funktioniert einwandfrei.

28
M.G.Poirot

Die Schaltflächennamen werden nicht gesendet, daher wird der php $_POST['submit']-Wert nicht festgelegt. Wie in isset($_POST['submit']) wird False ausgewertet.

<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

Verwenden Sie stattdessen diese:

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

Um zu beginnen, die gleiche ID zweimal zu verwenden, ist keine gute Idee. IDs sollten eindeutig sein. Wenn Sie Elemente formatieren müssen, sollten Sie stattdessen CSS verwenden.

Als letztes haben Sie den Namen Ihres Submit-Buttons als Tee und Kaffee definiert, aber in Ihrem PHP verwenden Sie Submit als Index. Ihr Index hätte beispielsweise $ _POST ['Tea'] sein müssen. Das würde erfordern, dass Sie prüfen, ob es gesetzt ist, da es nur einen sendet. Sie können dies mit isset () tun.

Kaufen Sie trotzdem, user4035 hat mich einfach geschlagen, sein Code wird dies für Sie "beheben".

Die anfangs erwähnten Schaltflächen. Sie können die Eingabe-Tags auch durch Schaltflächen ersetzen.

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

Die Attribute name und value sind erforderlich, um den Wert zu übergeben, wenn das Formular gesendet wird (das Attribut id ist in diesem Fall nicht erforderlich). Das Attribut type=submit gibt an, dass durch Klicken auf diese Schaltfläche das Formular gesendet wird.

Wenn der Server das übermittelte Formular verarbeitet, enthält $_POST['product'] den Wert "Tee" oder "Kaffee", je nachdem, auf welche Schaltfläche geklickt wurde.

Wenn Sie möchten, können Sie auch vor dem Absenden des Formulars vom Benutzer eine Bestätigung verlangen (z. B. beim Implementieren einer Löschschaltfläche).

<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

Wie die anderen sagten, haben Sie wahrscheinlich die Idee einer eindeutigen ID nicht richtig verstanden. Ich muss nur hinzufügen, dass ich nicht die Idee mag, "value" als identifizierende Eigenschaft zu verwenden, da sich diese mit der Zeit ändern kann (d. H. Wenn Sie mehrere Sprachen bereitstellen möchten).

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

und in Ihrem PHP-Skript

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

Außerdem können Sie etwas wie if( 'POST' == $_SERVER[ 'REQUEST_METHOD' ] ) hinzufügen, wenn Sie prüfen möchten, ob die Daten tatsächlich gebucht wurden.

2
DrPepperJo

Sie können Ihre HTML-Datei beibehalten, aber diesen PHP-Code verwenden

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