2017-02-17 13 views
-1

извините, если это очень просто, но я некоторое время ходил по кругу. Я новичок в PHP, но ни одна из документации не помогает, и ни один из предыдущих вопросов здесь не объясняет.Вставка данных переменной формы с использованием PHP и MySQLi

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

У меня нет сообщений об ошибках - страница обновляется, как будто ничего не произошло.

<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

получать значения после запроса на вставку? поместите свои переменные '$ word' и т. д. перед' $ stmt' –

+0

, вы должны определить эти переменные $ word, $ book, $ page после этого условия if (isset ($ _ POST ["submit"])) { –

ответ

0

Почему бы вам просто не написать это так:

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

Это будет вставлять каждый элемент, не создавая лишних переменных, и так как кажется все POST-содержимое из текстовых полей, все строки. Если есть только цифры, вы можете изменить соответствующий s на d

+0

А! Да! Так оно и было. Я не знаю, почему это произошло, но это произошло. Спасибо! – Luke

2

Вам необходимо определить переменные перед их использованием.

Ваш код должен выглядеть следующим образом:

$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

Вы можете изменить ' $ stmt-> bind_param («sss», $ word, $ book, $ name); 'просто' $ stmt-> execute ([$ word, $ book, $ name]); 'чтобы сделать жизнь немного проще * _^ – Option

+1

@Option Хорошая идея, я добавил это к моему ответу. –

+0

@Option Просто из интереса, который из двух методов более безопасен от SQL Injection, или они оба одинаковы? –

0

Вы должны присвоить значения первого, а затем использовать их.

$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

Попробуйте

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

 Смежные вопросы

  • Нет связанных вопросов^_^