HTML表单不会提交到数据库

时间:2015-07-10 12:22:04

标签: php html forms

我希望用户将表格中的数据提交到数据库中。但由于某些原因,我的代码无效?

 <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]')";
?>

3 个答案:

答案 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]."')";

查询应该是这样的。希望这会有所帮助。