SQL – вставка формы в базу данных

У меня есть php-скрипт для ввода ввода формы в базу данных, называемую XXXX_comments, в таблицу с названием «Комментарии», которая имеет имя и комментарий в виде столбцов. Когда пользователь нажимает кнопку «Сохранить», форма должна быть вставлена ​​в БД. Я подключаюсь к базе данных с помощью connect.php:

<?php $servername = "localhost"; $username = "XXXXX"; $password = "XXXXX"; $Dbconnect = "XXX_comments"; // Create connection $conn = new mysqli($servername, $username, $password); mysqli_select_db($conn,$Dbconnect); // Check connection if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } echo "Connected successfully"; ?> 

в моем файле index.php у меня есть следующий вид:

 <?php include ('connect.php'); ?> <?php if(isset($_POST['Save'])){ $sql = $conn->prepare("INSERT INTO Comments (Name, Comment) VALUES (?, ?)"); $stmt->bind_param("ss", $firstname, $comment); $firstname = $_POST['firstname']; $comment = $POST['comment']; $stmt->execute(); Echo "Succefully inserted to table"; } ?> <div class="container"> <div class="row" id="post-review-box" style="display:none;"> <div class="col-md-12"> <form id="form" accept-charset="UTF-8" action="index.php" method="post"> <input type="text" class="form-control animated" id="firstname" type="hidden" placeholder="Enter your Name"> <br> <input id="ratings-hidden" name="rating" type="hidden"> <textarea class="form-control animated" cols="50" id="comment" placeholder="Enter your review here..." rows="5"></textarea> <br> <div class="text-right"> <div class="stars starrr" data-rating="0"></div> <a class="btn btn-danger btn-sm" href="#" id="close-review-box" style="display:none; margin-right: 10px;"> <span class="glyphicon glyphicon-remove"></span>Cancel</a> <button class="btn btn-success btn-lg" type="submit" name="Save">Save</button> </div> </form> </div> </div> </div> <div class="display"></div> </div> </div> </div> 

Соединение выполнено успешно, но данные не вставлены.

Вам необходимо назначить значения, прежде чем их использовать, как показано ниже:

 $firstname = $_POST['firstname']; $comment = $_POST['comment']; $sql = $conn->prepare("INSERT INTO Comments (Name, Comment) VALUES (?, ?)"); $stmt->bind_param("sss", $firstname, $comment); 

Вы должны указать имя для своих входов и textarea внутри формы как

 <input type="text" name="firstname" class="form-control animated" id="firstname" type="hidden" placeholder="Enter your Name"> <input id="ratings-hidden" name="rating" type="hidden"> <textarea class="form-control animated" cols="50" name="comment" id="comment" placeholder="Enter your review here..." rows="5"></textarea 

и вы присваиваете значения после привязки к запросу, вам следует назначить значения для $firstname и $comment прежде чем привязывать его к запросу как

 if(isset($_POST['Save'])){ $firstname = $_POST['firstname']; $comment = $_POST['comment']; $sql = $conn->prepare("INSERT INTO Comments (Name, Comment) VALUES (?, ?)"); $stmt->bind_param("ss", $firstname, $comment); $stmt->execute(); echo "Succefully inserted to table"; } 

Изменить: в коде использовался $ POST вместо $ _POST.

Несколько замечаний :

Прежде всего, в файле connect.php вы смешиваете ООП и процедурные стили, вы можете получить тот же результат, используя следующий код:

  $conn = new mysqli($servername, $username, $password, $Dbconnect); 

Затем в вашем index.php вы создали подготовленный оператор, но вы присвоили ему переменную $ sql, а позже вы попытались использовать неопределенную переменную $ stmt, поэтому, чтобы исправить это, просто измените первые 2 строки

  $stmt = $conn->prepare("INSERT INTO Comments (Name, Comment) VALUES (?, ?)"); $stmt->bind_param("ss", $firstname, $comment); 

Надеюсь, он решит вашу маленькую проблему!

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

 <input class="btn btn-default" onclick="myFunction()" value="Submit"> <script> function myFunction() { document.getElementById("form").submit(); } </script> 

Спасибо за ответы на все вопросы.