试图mysqli_query插入到我的数据库.没有接收到错误


Trying to mysqli_query to INSERT INTO my database. Not receiving errors

我试图使一个非常基本的形式插入到我的数据库。我为此花了无数时间。我觉得我理解了每一行代码。我想象不出有什么问题。我没有收到任何错误,尽管我还没有在我的代码中设置错误检查。希望我的问题简单明了。

这是我的connect.php文件。$con是我与一个新的自我的连接。Talk是我的数据库。

<?php
$con= new mysqli("localhost","root","","talk");
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
?>

这是我的html中相关的表单部分。标题和内容以及我试图插入到我的数据库的两个信息。我包含了connect.php。文本区域应该通过form="talkform"链接到表单。这个表单使用action="process.php",后面我会讲到。

<?php
include 'connect.php';
?>
<center>
<h1>/talk/</h1>
<form method="post" action="process.php" id="talkform">
    <input type="text" name="title"/><br><br>
    <textarea form="talkform" rows="10" cols="80" name="content"></textarea><br>
    <input type="submit" value="talk" />
 </form>

这里是process。php。我还在这个文件中包含了connect.php。我不确定这是否多余,是否会造成问题,但我不这么认为。我还使用了$_SERVER['REQUEST_METHOD'],这是我从教程中获得的。不确定是否有更好的方法来实现这一点。我把所有东西都变成了变量。当我在处理错误时,它都在mysqli_query行上。我非常怀疑他就是罪魁祸首。

 <?php
include 'connect.php';
 if($_SERVER['REQUEST_METHOD'] = 'POST')
{
$title = $_POST['title'];
$content = $_POST['content'];
$operation = "INSERT INTO
                main(title, content)
            VALUES($title, $content);";
$result = mysqli_query($con, $operation);     
}
    ?>
我希望我没有遗漏任何东西。我一直在努力得到一个数据库工作了一个多星期。这是一个痛苦的过程,虽然我学到了很多,但我没有得到任何有用的东西。请帮忙,谢谢。

使用==运算符进行比较

 if($_SERVER['REQUEST_METHOD'] == 'POST')

并引用查询变量

$operation = "INSERT INTO main(title, content) VALUES('$title', '$content');";

所以代码看起来像转义字符串

if($_SERVER['REQUEST_METHOD'] == 'POST') {
   $title = mysqli_real_escape_string($_POST['title']);
   $content = mysqli_real_escape_string($_POST['content']);
   $operation = "INSERT INTO main(title, content) VALUES('$title', '$content');";
   $result = mysqli_query($con, $operation);     
 }

对于empty()isset()

,最好使用检查post值是否存在。

第4行:if($_SERVER['REQUEST_METHOD'] == 'POST')

最好是直接检查表单是否使用if (isset($_POST['title']))发送。

当你调用mysqli_error()时,你会发现你试图插入没有引号的字符串(并且你没有转义输入-寻找SQl注入)。

$operation = "INSERT INTO main(title, content) VALUES('" . mysqli_real_escape_string($con, $title) . "', '" . mysqli_real_escape_string($con, $content) . "')";
  1. 你没有检查mysqli_query调用后的错误,当然你不会看到任何。
  2. 你很容易受到SQL注入。使用mysqli准备好的查询语法来避免这种情况。参考如何在PHP中防止SQL注入。
  3. 您的直接问题是您的查询读取... VALUES(foobar, baz),这是无效的。您缺少值周围的引号。但是,如果您正确地使用预处理语句,这将成为一个无关紧要的问题,因此忽略它。