我希望用户将表格中的数据提交到数据库中。但由于某些原因,我的代码无效?
<form action="newpostsubmit.php" method="post">
<h2 class="form-signin-heading">New Post (beta)</h2>
<div class="form-group">
<label for="title">Title</label>
<input type="text" class="form-control" name="title" id="title">
</div>
<br>
<div class="form-group">
<label for="post">Post</label>
<textarea class="form-control" rows="5" name="post" id="post"></textarea>
</div>
<br>
<input type="submit">
</form>
PHP提交
<?php
//Connecting to sql db.
$connect = mysqli_connect("localhost","root","pwd","db");
//Sending form data to sql db.
mysqli_query($connect,"INSERT INTO posts (title, post)
VALUES ('$_POST[title]', '$_POST[post]')";
?>
答案 0 :(得分:3)
首先,您的$_POST
变量不正确,因为您忘记引用$_POST['title']
之类的项目。
其次,你真的应该使用prepared statements。它们会使您的代码更清晰,并且可以保护您免受 SQL Injection Attacks.的侵害。
您还应该对连接和查询执行最少的错误检查,很可能您缺少一些有助于您获得成功的信息。错误已存在于错误日志中,但您可以将它们回显到屏幕上。
//Connecting to sql db.
$connect = mysqli_connect("localhost","root","pwd","db");
if (!$connect) {
echo "Connection failed: ". mysqli_connect_error();
exit();
}
//Sending form data to sql db.
$stmt = mysqli_prepare($connect, "INSERT INTO `posts` (`title`, `post`) VALUES (?,?)");
mysqli_stmt_bind_param($stmt, 'ss', $_POST['title'], $_POST['post'] );
// execute prepared statement
mysqli_stmt_execute($stmt);
// was there a problem?
if(mysqli_stmt_error($stmt)) {
echo "There was an error performing the query, " . mysqli_stmt_error($stmt);
}
这里有很多内容,但最值得注意的是prepare()
,您可以使用占位符代替变量(?
)和mysqli_stmt_bind_param()
将变量绑定为字符串({查询的每个项目{1}}。
最后,检查是否有任何错误,并使用mysqli_stmt_error()
注意:确保为用户优雅地处理错误,从不向他们显示实际问题,从而使您的网站受到攻击。在开发阶段,正如此处所做的那样,将信息回显到屏幕上是很好的。
答案 1 :(得分:0)
您需要清理POSTed变量以防止SQL注入和其他错误,然后在将它们插入数据库时正确引用它们(作为字符串)。
$cleanTitle = mysqli_real_escape_string($connect,$_POST['title'];
$cleanPost = mysqli_real_escape_string($connect,$_POST['post'];
$sql = "INSERT INTO posts (title, post) VALUES ('$cleanTitle', '$cleanPost')";
$insert = mysqli_query($connect,$sql);
if(!$insert){
echo 'ERROR :'.mysqli_error($connect);
}
答案 2 :(得分:0)
mysqli_query($connect,"INSERT INTO posts (title, post)
VALUES ('".$_POST[title]."', '".$_POST[post]."')";
查询应该是这样的。希望这会有所帮助。