在localhost上将注释推送到我的数据库

时间:2014-12-03 19:57:30

标签: php html

所以,我正在尝试将评论推送到我的数据库(icposts,下面),我没有得到任何结果。我可以拉出并显示我直接插入到数据库表中的注释,但是当我尝试从html表单发送注释时,它似乎根本不起作用。

<?php

$connect=mysqli_connect("localhost","root","");
$database=mysqli_select_db("icposts");


$username=$_POST['poster'];
$title=$_POST['postTitle'];
$body=$_POST['postText'];
$date=$_POST['currentDate'];
$submit=$_POST['submit'];

if($submit)
{
        $query=mysql_query("INSERT INTO 'posts'('id', 'username', 'title', 'body', 'date') VALUES ('','$username','$title','$body','$date')");

}
?>

这是表单的html,供参考:

<form name="input" action="comments.php" method="POST">
	Username: <input id = "poster" type="text" name="poster"value="Guest" /><br>
	Tite: <input id = "postTitle" type="text" name="postTitle" /><br>
	Comment: <br> <textarea id = "postText"  name = "postText"rows="4" cols="50"></textarea>
	<input id = "submit" name = "submit" type="submit" value="Submit" />
	<input id = "currentDate" name = "currentDate" type = "hidden" value = "" />
</form> 
我一直在看各种各样的例子,当我把它与其他人在网上发布的内容进行比较时,我没有看到我在那里有什么问题。

2 个答案:

答案 0 :(得分:2)

首先,您需要将连接传递给$database=mysqli_select_db("icposts");

然后您开始将MySQL API与mysql_query混合使用。他们只是没有混合。

$database=mysqli_select_db($connect,"icposts");

然后您使用错误的identifiers作为您的表格和列,作为报价。

使用滴答或删除它们(引号)并将连接传递给查询:

$query=mysqli_query($connect,"INSERT INTO `posts` (`id`, `username`, `title`, `body`, `date`)

 VALUES ('','$username','$title','$body','$date')");

同时将or die(mysqli_error($connection))添加到mysqli_query()check for DB errors,这就是您没有收到错误的原因;你没有检查它们。 Error reporting是另一个你应该研究的问题。

示例:

if (!mysqli_query($connection,"INSERT INTO `posts` (`id`, `username`, `title`, `body`, `date`)
     VALUES ('','$username','$title','$body','$date')");
)
  {
  echo("Error description: " . mysqli_error($connection));
  }
else{
    echo "Success!";
}

您也可以使用所有4个参数:

$connect=mysqli_connect("localhost", "root", "", "icposts");

您可能还想将if($submit)替换为

if(isset($_POST['submit']))

然后你可以摆脱$submit=$_POST['submit'];。最好使用isset()

Nota:您需要确保currentDate列允许空白数据,否则您需要为其提供某种形式的价值。

另一个关于&#34; id&#34;柱。如果是auto_increment,您可以从查询中省略它。

数据库会自行增加。


旁注:

您目前的代码向SQL injection开放。使用prepared statementsPDO with prepared statements他们更安全

与此同时,在您使用预准备语句之前,请使用以下命令更改您的代码:

$username = stripslashes($_POST['poster']);
$username = mysqli_real_escape_string($connection, $_POST['poster']);

并对所有变量执行相同的操作。


这是一份准备好的声明:

<?php
$link = new mysqli('localhost', 'root', '', 'database');
if ($link->connect_errno) {
    throw new Exception($link->connect_error, $link->connect_errno);
}

// Check that the expected value has been provided via a POST request
if (!isset($_POST['input1'])) {
    throw new Exception('Missing POST request parameter [input1]');
}

// now prepare an INSERT statement
if (!$stmt = $link->prepare('INSERT INTO `your_table` (`name`) VALUES (?)')) {
    throw new Exception($link->error, $link->errno);
}

// bind parameters
$stmt->bind_param('s', $_POST['input1']);

if (!$stmt->execute()) {
    throw new Exception($stmt->error, $stmt->errno);
}

答案 1 :(得分:0)

$connect=mysqli_connect("localhost","root","");

应该是(可以简单地删除选择的数据库)

$connect=mysqli_connect("localhost","root","", "icposts");

$query=mysql_query("INSERT INTO 'posts'('id', 'username', 'title', 'body', 'date') VALUES ('','$username','$title','$body','$date')");

应该是

$query=mysqli_query("INSERT INTO 'posts'('id', 'username', 'title', 'body', 'date') VALUES ('','$username','$title','$body','$date')", $database);

请记住,这是一个非常糟糕的aprouch,也看着你的查询似乎id是一个自动递增列。如果是这种情况,您甚至不必在查询本身中编写它。

您可能希望进一步了解参数化查询。 这是一个很好的帖子。 How can I prevent SQL injection in PHP?