HTML表单未插入MySQL DB

时间:2014-05-05 12:20:45

标签: php mysql

仍然在一个小网站上工作,我在使用php的插入语句时遇到问题,以前以其他形式已经成功地将数据插入到我的数据库中但是有一些表单它接受了问题并说查询很好但是在检查数据库时根本没有进入。

HTML表单

<form>
    <form action="comment.php" method="post">
Your Client Number <input type="text" name="clientNo" /><br>
The Boat's Number <input type="text" name="boatNo" /><br>
The View Date <input type="text" name="viewDate" /><br>
Comments <br><textarea name="comment"></textarea><br>   
<input type="submit" value="submit comments" />
</form>

PHP代码

<?php
$client = $_POST['clientNo'];
$boat = $_POST['boatNo'];
$date = $_POST['viewDate'];
$comment = $_POST['comment'];

    $con = mysqli_connect("localhost","root","","boats4u")or die(mysqli_error());;
    $res = mysqli_query($con,"INSERT INTO 'boatviewing'(clientNo,boatNo,viewDate,comment)
    VALUES ('$client','$boat','$date','$comment')");


if($res)
{
    echo "success";
    header("Location:client.php");
}
else {
    echo "no".mysqli_error();
}

?>

感觉就像我遗漏了一些东西,当我从上一页提交表格时,它会运行这个并且你可以看到它是否成功然后返回上一页但它仍然没有出现在数据库中

thanls

5 个答案:

答案 0 :(得分:1)

您必须检查输入中是否有逗号或引号,您必须将其转义,因为查询会返回错误。

答案 1 :(得分:1)

查看表boatviewing之前和之后的insert查询中的单引号,这就是问题所在。

答案 2 :(得分:1)

编辑:(接下来回答)

特别说明: 我注意到您没有接受任何问题的答案,确实找到了解决方案。

StackOverflow系统的工作方式是,一旦给出问题的答案,然后勾选白色复选标记,直到它变为绿色。

请查看以下文章&#34; 如何接受答案 &#34;。

StackOverflow建立在积分/声誉系统之上,以鼓励每个人继续取得成功。

阅读&#34;关于&#34;部分:


答案

error reporting添加到您的文件中会发出错误信号。

error_reporting(E_ALL);
ini_set('display_errors', 1);

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

你要么不在表名周围使用引号,要么使用反引号,如果它是MySQL保留字;在这种情况下,它不会删除表名周围的引号。

$res = mysqli_query($con,"INSERT INTO boatviewing (clientNo,boatNo,viewDate,comment)

(如果你真的想逃避你的表名)

$res = mysqli_query($con,"INSERT INTO `boatviewing` (clientNo,boatNo,viewDate,comment)

您似乎还有一个额外的<form>标签;删除它,并删除die(mysqli_error());;末尾的额外分号。

另外,删除echo "success";上方的header("Location:client.php");,您在标题之前输出,并会抛出错误。

更改

$con = mysqli_connect("localhost","root","","boats4u")or die(mysqli_error());;

为:

$con = mysqli_connect("localhost","root","","boats4u") 
or die("Error " . mysqli_error($con));

根据手册说明的方法:

旁注: 您现在的代码向SQL injection开放。使用prepared statementsPDO


这是一个准备好的陈述方法:

<?php

error_reporting(E_ALL);
ini_set('display_errors', 1);

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

    $mysqli = new mysqli("localhost","root","","boats4u");

    /* check connection */
    if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
    }


    /* Set the params */

    $client = $_POST['clientNo'];
    $boat = $_POST['boatNo'];
    $date = $_POST['viewDate'];
    $comment = $_POST['comment'];

    /* Create the prepared statement */
    if ($stmt = $mysqli->prepare("INSERT INTO boatviewing (clientNo,boatNo,viewDate,comment) VALUES (?, ?, ?, ?)")) {

    /* Bind the params */

    $stmt->bind_param('ssss', $client, $boat, $date, $comment);

    /* Execute the prepared statement */
    $stmt->execute();

    /* Echo results */
    echo "Inserted {$client}, {$boat}, {$date}, {$comment} into database.\n";

    /* Close the statement */
    $stmt->close();
    }
    else {
    /* Error */
    printf("Prepared Statement Error: %s\n", $mysqli->error);
    }

?>

如果您不想使用准备好的陈述(您真正应该)且处于学习状态,请至少使用mysqli_real_escape_string()

进行一些保护
$client = mysqli_real_escape_string($con,$_POST['clientNo']);
$boat = mysqli_real_escape_string($con,$_POST['boatNo']);
$date = mysqli_real_escape_string($con,$_POST['viewDate']);
$comment = mysqli_real_escape_string($con,$_POST['comment']);

答案 3 :(得分:0)

另一件事,请确保您的连接正常,阅读http://docs.php.net/manual/pl/mysqli.construct.php

mysqli_connect("localhost","root","","boats4u")or die(mysqli_error());;

无论如何都会返回一个对象,所以

or die(mysqli_error());

将不会执行,因为connect返回并且对象带有 - &gt; connect_errno set

答案 4 :(得分:0)

$res = mysqli_query($con,"INSERT INTO `boatviewing`(`clientNo`,`boatNo`,`viewDate`,`comment`)
    VALUES ($client,$boat,$date,$comment)");

试试这个。