所以,我正在尝试将评论推送到我的数据库(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>
答案 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 statements或PDO 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?