2017-11-15 2 views
1

Ich habe eine Dropdown-Liste mit 6 Optionen erstellt.Button mit mysql Abfrage in Aktion

Nachdem Sie eine Option ausgewählt und auf die Schaltfläche Senden geklickt haben, sollte der ausgewählte Wert in die mysql-Datenbank eingefügt werden. Dies ist Code:

<form name="name" method="get" action="<?php echo $_SERVER['PHP_SELF']; ?>"> 

<select id="broj" name="name">      
    <option value="0">--Select--</option> 
    <option value="2">Option 1</option> 
    <option value="3">Option 2</option> 
    <option value="4">Option 3</option> 
    <option value="5">Option 4</option> 
    <option value="6">Option 5</option> 
    <option value="7">Option 6</option> 
</select> 
<input type="submit" name="submit" value="Submit" /> 
</form> 

<?php 
if($_GET){ 
    $result= $_GET['name']; 
    } 
?> 
// 
After this follows the code that inserts the $result into the mysql database 

Ich habe zwei Probleme mit diesem Code:

  1. Sobald die Seite (vor dem Klick auf den Button) geöffnet wird, wird der Wert 0 in die Datenbank eingefügt (Wert von „Select“ Option)

  2. Nach erfrischender Seite wird der ausgewählte Wert wieder einsetzt in die Datenbank

Wie die ausgewählte Option nur in die Datenbank eingefügt wird, wenn auf die Schaltfläche zum Senden geklickt wird

Antwort

2

Ich denke, Sie sollten Ihre Formularmethode zu POST anstelle von GET ändern. Und überprüfen Sie für die Post vor dem Einsetzen in die Datenbank

if ($_SERVER['REQUEST_METHOD'] == 'POST') 
    { 
     // Code insert into database here 
    } 

In Ihrem Code sehe ich

action="<?php echo $_SERVER['PHP_SELF']; ?>" 

$ _SERVER [ ‚PHP_SELF‘] mit Formularmethode GET enthält Ihre Parameter einreichen und das kann einige seltsame Probleme verursachen . Ich denke, es kann kein Problem sein, wenn Sie action = „“ lassen, Ihre Form noch Daten vorlegen zu aktueller Seite

+0

'$ _SERVER ['PHP_SELF']' führt die GET-Werte nicht durch; Sie könnten an '$ _SERVER ['REQUEST_URI']' denken – RToyo

0

Zum ersten Mal auf der Seite fügt eine 0-Wert Reihe:

Der entsprechende Code für diesen wird von Ihrer Frage ausgeschlossen, aber Sie sollten immer überprüfen, ob Ihr Array $ _GET (oder $ _POST oder $ _REQUEST oder $ _SESSION usw.) mindestens einen Wert (zB if (count($_GET))) vor dem Einfügen hat. Ich würde jedoch vorschlagen, dass Sie die POST-Methode anstelle von GET verwenden. Es ist eine winzige Verschleierungsschicht für jemanden, der versucht, Daten in Ihre DB zu zwingen, und es macht es viel schwieriger für Unfälle/falsch eingegebene URLs, zufällige Daten einzufügen.

erneut übermittelt Daten:

Dies hat ein paar Möglichkeiten, um ihn zu arbeiten. Die meisten Leute setzen einfach die POST Methode für ihre Formulare, anstatt GET (es gibt einige Standards, die sagen, dass Sie POST verwenden sollten, aber ich werde nicht darauf eingehen). Wenn der Benutzer versucht, eine Seite zu aktualisieren, an die ein Formular gesendet wurde, wird bei den meisten modernen Browsern ein Bestätigungsdialogfeld angezeigt, bevor die Formulardaten erneut übergeben werden.

Eine andere gängige Technik ist redirect von der Zielseite des Formulars, sobald die Daten in die Datenbank eingefügt wurden. Auf diese Weise kann der Benutzer die Seite nicht aktualisieren. Mit anderen Worten, Sie haben eine leere Formularantwortseite, die einfach die DB einfügt und dann zu einer Seite mit einem "Danke für das Absenden des Formulars" Text oder was auch immer Sie anzeigen möchten, nachdem das Formular übermittelt wird. Der Browser des Benutzers befindet sich nie auf der URL/Seite, die die tatsächliche DB-Einfügung ausführt.

Sie können auch eine kleine Validierung vor dem Einfügen durchführen. Wenn Sie Ihre Datenbank nicht vor dem Einfügen abfragen möchten (oder eine Einschränkung auf DB-Ebene anwenden möchten, z. B. einen eindeutigen Index für die Tabelle), könnte jedes Formular bei jeder Anforderung ein Token zur einmaligen Verwendung senden.Wenn ein Formular zum zweiten Mal mit diesem Token gesendet wird, wissen Sie, dass es erneut gesendet wurde. Ein einfaches Beispiel hierfür könnte das Hinzufügen eines Captchas zu Ihrem Formular sein.