2017-02-17 4 views
-1

Entschuldigung, wenn das sehr einfach ist, aber ich bin seit einiger Zeit im Kreis herumgegangen. Ich bin neu in PHP, aber nichts von der Dokumentation scheint zu helfen, und keine der vorherigen Fragen hier erklärt es recht.Einfügen von variablen Formulardaten mit PHP und MySQLi

Ich versuche, ein einfaches Formular zu erstellen, das Benutzereingaben nimmt und einen Datensatz in einer Datenbank erstellt, aber der Code, den ich habe, scheint die bereitgestellten Variablen nicht zu erkennen. Wenn ich stattdessen Zeichenfolgen verwende, wird die Einfügeoperation abgeschlossen, sodass ich weiß, dass es kein Problem mit der Verbindung gibt.

Ich bekomme keine Fehlermeldungen - die Seite wird aktualisiert, als wäre nichts passiert.

<form action="" method="post"> 
    <input type="text" name="new_word" id="word" required="required"/> 
    <input type="text" name="book_ref" id="book" required="required"/> 
    <input type="text" name="page_range" id="page" required="required"/> 
    <input type="submit" value="Submit" name="submit"/> 
</form> 
<?php 
if(isset($_POST["submit"])){ 
    $servername = "localhost"; 
    $username = "user"; 
    $password = "pass"; 
    $dbname = "database"; 
    $conn = new mysqli($servername, $username, $password, $dbname); 
    if ($conn->connect_error) { 
     die("Connection failed: " . $conn->connect_error); 
    } 
    $stmt = $conn->prepare("INSERT INTO `words` (`Word`, `Book ID`, `Page`) 
VALUES (?,?,?)"); 
    $stmt->bind_param(1, $word); 
    $stmt->bind_param(2, $book); 
    $stmt->bind_param(3, $page); 
    $word = $_POST["new_word"]; 
    $book = $_POST["book_ref"]; 
    $page = $_POST["page_range"]; 
    $stmt->execute(); 
    $conn->close(); 
} 
?> 
+0

Werte nach dem Einfügen Abfrage ändern? setze deine '$ word' etc Variablen vor' $ stmt' –

+0

du musst diese Variablen definieren $ word, $ book, $ page nach dieser Bedingung if (isset ($ _ POST ["submit"])) { –

Antwort

0

Warum gehst du nicht einfach schreiben Sie es wie folgt aus:

$stmt->bind_param('sss', $_POST['new_word'], $_POST['book_ref'], $_POST['page_range']);

Es wird jedes Element einzufügen, ohne überflüssige Variablen zu schaffen, und da es scheint Der gesamte POST-Inhalt stammt aus Textfeldern, sie sind alle Zeichenfolgen. Wenn nur Ziffern vorhanden sind, können Sie die entsprechenden s in eine d

+0

Ah! Ja! Das hat es getan. Ich weiß nicht, warum das so war, aber es hat es getan. Vielen Dank! – Luke

2

Sie müssen die Variablen definieren, bevor Sie sie verwenden.

Der Code sollte wie folgt aussehen:

$word = $_POST["new_word"]; 
$book = $_POST["book_ref"]; 
$page = $_POST["page_range"]; 

$stmt = $conn->prepare("INSERT INTO `words` (`Word`, `Book ID`, `Page`) 
VALUES (?,?,?)"); 
$stmt->bind_param("sss", $word, $book, $name); 
$stmt->execute(); 
$conn->close(); 
+0

Du könntest '' ändern $ stmt-> bind_param ("sss", $ word, $ book, $ name); 'nur um $ stmt-> execute ([$ word, $ book, $ name]);' um das Leben etwas einfacher zu machen^_^ – Option

+1

@Option Gute Idee, ich habe das zu meiner Antwort hinzugefügt. –

+0

@Option Gerade aus Interesse, welche der beiden Methoden sind sicherer vor SQL-Injection, oder sind sie beide gleich? –

0

Sie haben Werte zuerst zuweisen und sie dann verwenden.

$word = $_POST["new_word"]; 
$book = $_POST["book_ref"]; 
$page = $_POST["page_range"];  

$stmt = $conn->prepare("INSERT INTO `words` (`Word`, `Book ID`, `Page`) 
VALUES (?,?,?)"); 
$stmt->bind_param(1, $word); 
$stmt->bind_param(2, $book); 
$stmt->bind_param(3, $page); 



$stmt->execute(); 

$conn->close(); 
0

Versuchen Sie, diese

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> 
<input type="text" name="new_word" id="word" required="required"/> 
<input type="text" name="book_ref" id="book" required="required"/> 
<input type="text" name="page_range" id="page" required="required"/> 
<input type="submit" value="Submit" name="submit"/> 
</form> 

<?php 
if(isset($_POST["submit"])){ 
    $servername = "localhost"; 
    $username = "user"; 
    $password = "pass"; 
    $dbname = "database"; 
    $conn = new mysqli($servername, $username, $password, $dbname); 
    if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
    } 
$word = $_POST["new_word"]; 
$book = $_POST["book_ref"]; 
$page = $_POST["page_range"]; 
$stmt = $conn->prepare("INSERT INTO `words` (`Word`, `Book ID`, `Page`) VALUES (?,?,?)"); 
$stmt->bind_param(1, $word); 
$stmt->bind_param(2, $book); 
$stmt->bind_param(3, $page); 
$stmt->execute(); 
$conn->close(); 
} 
?>