* ПРОБЛЕМА решаемые * См ответ на мой пост ниже
Я схожу с ума, пытаясь вставить данные из простой HTML формы с $ _POST в базу данных с PHP и PDO. На данный момент я не получаю никаких ошибок, в базу данных ничего не происходит. Если я набираю значения вручную в коде, он работает, но при вводе в форму html ничего не происходит. В какой-то момент я набрал «Массив».
Если кто-нибудь может сказать мне, что я делаю неправильно, или указать мне в правильном направлении, я был бы действительно благодарен! Я новичок так что, пожалуйста, голые со мной :)
UPDATE: Ошибка я получаю: Фатальная ошибка: Uncaught исключение «PDOException» с сообщением «SQLSTATE [23000]: Integrity нарушение ограничения: 1048 Колонка «title» не может быть null ... in
Почему название столбца недействительно?
Баз данные просто таблица с 4 полямов (ID, названием, сообщениями и полем времени/метками времени. Полем идентификатора является первичным AI и поле временной метки набирают время автоматически.
Здесь это файл connect.inc.php:
<?php
class DB extends PDO
{
public function __construct($dbname = "blogdata")
{
try {
parent::__construct("mysql:host=localhost;dbname=$dbname;charset=utf8",
"root", "");
} catch (Exception $e) {
var_dump($e);
}
}
}
?>
А вот файл 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" />
</head>
<body>
<!--- Add blog post --->
<div class="add_form">
<form id="add_post" method="post" action="index.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>
ANSWER
Вам нужно все обернуть и проверить, не является ли $ _POST пустым. Также проблема заключалась в действии = "index.php" в форме. Его нужно было установить post.php.
Вот правильный код в 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->bindParam(':title', $_POST['title']);
$stmt->bindParam(':message', $_POST['message']);
$title = $_POST['title'];
$message = $_POST['message'];
$stmt->execute();
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" action="post.php">
<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>
Положите все в Try/поймать блока и посмотреть, если вы ловите ошибки , – aynber
@aynber, чтобы вы знали, исключения отлично видны БЕЗ любых блоков catch –
В основном, если вы знаете, где искать :-) Блоки catch позволяют выводить его туда, где вы хотите, если есть ошибки. – aynber