INSERT с PDO $ _POST не работает

РЕШЕННЫЙ – ОТВЕТ, ПОЛУЧЕННЫЙ НА НИЖНЕЙ ПОЧТЕ

Пожалуйста, кто-нибудь может помочь мне, так как я не могу понять, что я делаю неправильно. У меня есть html-форма с двумя полями «title» и «message». Я пытаюсь заставить это войти в базу данных с PDO и $ _POST, но я просто получаю эту ошибку:

Неустранимая ошибка: исключить исключение «PDOException» с сообщением «SQLSTATE [23000]: нарушение ограничения целостности: 1048« заголовок столбца »не может быть« null »в

Я делаю все по книге, но это не работает, и я скоро выкину компьютер. Поэтому, пожалуйста, кто-нибудь знает, что не так? Почему название становится «NULL»?

База данных представляет собой таблицу из четырех столбцов (идентификатор, заголовок, сообщение и временную метку). Поле id является основным и автоматическим.

ЛЮБАЯ помощь действительно оценена !!! И я начинаю …

Вот файл post.php:

<?php require 'connect.inc.php'; $db = new DB('blogdata'); $stmt = $db->prepare("INSERT INTO blogposts (title, message, time) VALUES (:title, :message, :time)"); $stmt->bindParam(':title', $_POST['title']); $stmt->bindParam(':message', $_POST['message']); $stmt->bindParam(':time', $time); $title = $_POST['title']; $message = $_POST['message']; $stmt->execute(); ?> <!DOCTYPE html> <html> <head> <title>Create blog post</title> <meta charset="utf-8" /> <link rel="stylesheet" href="reset.css" /> <link rel="stylesheet" href="style.css" /> </head> <body> <!--- Add blog post ---> <div class="add_form"> <form id="add_post" method="post" action="post.php" enctype="text/plain"> <fieldset> <legend>Create post</legend> <label for="post_title">Title: <input id="title" type="text" name="title" value="<?php if (isset($title)) { echo htmlentities ($title); } ?>" > </label> <label for="message">Message: <textarea id="message" name="message" rows="20" cols="30" maxlength="50" value="<?php if (isset($message)) { echo htmlentities ($message); } ?>" ></textarea> </label> </fieldset> <input id="send" type="submit" value="Send"> </form> </div> </body> </html> 

И вот файл connect.inc.php:

 <?php class DB extends PDO { public function __construct($dbname = "blogdata") { $opt = array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION); $dsn = "mysql:host=localhost;dbname=$dbname;charset=utf8"; parent::__construct($dsn, "root", "", $opt); } } ?> 

ОТВЕТ:

Эта проблема была окончательно решена. Проблема в том, что вам нужно проверить, пуст ли $ _POST или нет. И сразу после if (!empty($_POST)) { установите require 'connect.inc.php'; , Кроме того, чтобы свести к минимуму код, как Dave Just сказал, измените:

 $stmt->bindParam(':title', $_POST['title']); $stmt->bindParam(':message', $_POST['message']); 

Для того, чтобы:

 $stmt->execute(array(':title' => $_POST['title'], ':message' => $_POST['message'])); 

Вот рабочий код в post.php:

 <?php if (!empty($_POST)) { require 'connect.inc.php'; $db = new DB('blogdata'); $stmt = $db->prepare("INSERT INTO blogposts (title, message) VALUES (:title, :message)"); $stmt->execute(array(':title' => $_POST['title'], ':message' => $_POST['message'])); $title = $_POST['title']; $message = $_POST['message']; // Redirect to index.php header ('Location: index.php'); exit; } ?> <!DOCTYPE html> <html> <head> <title>Create blog post</title> <meta charset="utf-8" /> <link rel="stylesheet" href="reset.css" /> <link rel="stylesheet" href="style.css" /> </head> <body> <!--- Add blog post ---> <div class="add_form"> <form id="add_post" method="post"> <fieldset> <legend>Create post</legend> <label for="post_title">Title: <input id="title" type="text" name="title" value="<?php if (isset($title)) { echo htmlentities ($title); } ?>" > </label> <label for="message">Message: <textarea id="message" name="message" rows="20" cols="30" maxlength="50" value="<?php if (isset($message)) { echo htmlentities ($message); } ?>" ></textarea> </label> </fieldset> <input id="send" type="submit" value="Send"> </form> </div> </body> </html> 

Related of "INSERT с PDO $ _POST не работает"

Если вы уже не выкинули компьютер из окна, вы должны проверить, были ли установлены значения $_POST vars или нет, прежде чем передавать их в инструкцию выполнения PDO.

 <?php require 'connect.inc.php'; if( isset($_POST['title'], $_POST['message']) ) { $db = new DB('blogdata'); $stmt = $db->prepare("INSERT INTO blogposts (title, message, time) VALUES (:title, :message, :time)"); $stmt->bindParam(':title', $_POST['title']); $stmt->bindParam(':message', $_POST['message']); $stmt->bindParam(':time', $time); $title = $_POST['title']; $message = $_POST['message']; $stmt->execute(); } ?> 

PS

Я понятия не имею, что $time будет делать время.