我有一个用HTML设置的简单表单,可将值传递给PHP并将其放在MYSQL数据库中。我只是无法理解为什么单击“提交”按钮后什么也没有发生。以前它说“失败”,但现在什么也没有。我已经检查了表格中的值-很好。我检查了数据库连接-很好。我已经检查了SQL语句-好吧,我看不到任何错误。
这是我的主要HTML页面
<p class="subtitle">Let me know what you think</p>
<form action="db_insert.php">
<input name="username" placeholder="Name">
<br>
<textarea name="comments" placeholder="Please type your comments here"
cols=120 rows=5></textarea>
<br>
<input type="button" name="submit" value="submit">
<br>
<p id="commTitle">Comments</p>
<br>
<p id="comment"></p>
这是PHP
<?php
include 'db_connection.php';
//create database connection
$conn = OpenCon();
$username = htmlspecialchars($_POST['username']);
$comment = htmlspecialchars($_POST['comment']);
$sql = 'INSERT INTO sitecomments(username, comment) VALUES(:username,:comment)';
$stmt = $conn -> prepare($sql);
$stmt -> bindValue(':username', $username);
$stmt -> bindValue(':comment', $comment);
$q_result = $stmt -> execute();
if($q_result){
echo 'Comment Inserted Successfully';
}
else{
echo 'Failed';
}
db_connection.php如下所示(已删除凭据。
<?php
function OpenCon(){
//pass the database details to variables
$host = "localhost";
$dbuser = "*****";
$dbpass = "*****";
$dbname = "*****";
// combine host and db name in to single variable
$dbhost = "mysql:host=$host;dbname=$dbname";
//create PDO from database information
$dbconn = new PDO($dbhost, $dbuser, $dbpass);
return $dbconn;
}
?>
正如我所说,我已经检查了数据库连接,一切都很好,那么我到底在哪里出错呢?我的数据库有3个字段,但一个字段是自动递增的,因此我没有在查询中包括它。我在MyPHPAdmin中尝试了查询,并通过了ok。
答案 0 :(得分:1)
我注意到的第一件事是输入的名称为“ comments”,而不是您正在访问的$ _POST变量,即注释:
<textarea name="comments" placeholder="Please type your comments here" cols=120 rows=5></textarea>
$comment = htmlspecialchars($_POST['comment']);
尝试进行更改,看看是否可以解决问题。
答案 1 :(得分:0)
在代码中处理错误将很有帮助。在当前示例中,如果出现问题,您将很难找出问题所在。
您可以在PDO error handling和PDO::errorInfo的PHP文档中尝试以下所有示例:
try {
$dbh = new PDO($dsn, $user, $password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING));
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
exit;
}
/* Provoke an error -- bogus SQL syntax */
$stmt = $dbh->prepare('bogus sql');
if (!$stmt) {
echo "\nPDO::errorInfo():\n";
print_r($dbh->errorInfo());
}
通常,错误是pebcak错误,您需要利用适当的调试工具来找出错误的位置。祝你好运!