*問題解決了*查看答案在我的後下方
我要瘋了試圖從$ _ 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