*问题解决了*查看答案在我的后下方
我要疯了试图从$ _ POST一个简单的HTML表单数据插入到PHP和PDO的数据库。目前我没有收到任何错误,但没有任何内容会进入数据库。如果我在代码中手动输入值,但在输入html表单时没有任何反应。在某个时候,我输入了“Array”。
如果有人能告诉我我做错了什么,或者指出我朝着正确的方向,我会非常感激!我是初学者所以请裸跟我:)
UPDATE: 我得到的错误是: 致命错误:未捕获的异常“PDOException”有消息“SQLSTATE [23000]:完整性约束违规:1048列'标题'不能为空'in ...
为什么列标题为空?
数据库仅仅是一个4个字段(ID,标题,消息和时间/时间戳字段表。 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>
回答
您需要将所有东西都包起来,并检查$ _POST是否为空。此外,问题是在表单中的action =“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>
将所有的东西,看看你发现任何错误。 – aynber
@aynber让你知道,例外完全可见没有任何catch块 –
大多数情况下,如果你知道在哪里看:-) catch块让你输出它,如果有错误,你想要的。 – aynber