为什么我的PHP代码在运行时返回空白页?

时间:2017-12-11 03:38:42

标签: php mysql sql database

在我的网页中,我要求用户填写一份表格,说明他们的年龄,种族,性别和州。提交后,数据将提交到同一页面,页面将使用以下代码处理它以将其提交到数据库(在此示例中所有数据库登录信息都是伪造的):

<?php
if($_COOKIE['infoGiven']==true){    
    $con=mysql_connect('localhost','asasdfasd','asdf','asdfasdf');
    if($_COOKIE['like']==true){
        $sql="INSERT INTO LIKE(state, age, gender, race)
        VALUES(\'".$_POST["state"]."\'".$_POST["age"]."\'".$_POST["gender"]."\'".$_POST["race"].")";
        $con->query($sql);
    }
    if($_COOKIE['like']!=true){
        $sql="INSERT INTO DISLIKE(state, age, gender, race)
        VALUES(\'".$_POST["state"]."\'".$_POST["age"]."\'".$_POST["gender"]."\'".$_POST["race"].")";
        $con->query($sql);
    }
}
?>

这应该只是将用户数据提交到数据库,而是收到一个“500”错误的空白页面。里面没有代码。请记住,在表单提交之前,页面呈现正确。

1 个答案:

答案 0 :(得分:1)

你在插入语句中缺少逗号;当你使用双引号时,你也不必逃避单引号。

正如您的代码现在,您正在尝试插入一个真正连接的字符串。

$sql="INSERT INTO LIKE(state, age, gender, race)
        VALUES(\'".$_POST["state"]."\'".$_POST["age"]."\'".$_POST["gender"]."\'".$_POST["race"].")";

应该是:

$sql="INSERT INTO `LIKE`(state, age, gender, race)
        VALUES('".$_POST["state"]."', '".$_POST["age"]."', '".$_POST["gender"]."', '".$_POST["race"]."')";

但这是为了说明参数的标点符号问题:不要使用该代码本身,因为替代方案更安全,更少弃用。

使用mysqli预处理语句的更好版本:

$db = new mysqli("DBHOST","DBUSERNAME","DBPASS","DBNAME");
$stmt = $db->prepare("INSERT INTO `LIKE`(state, age, gender, race) VALUES (?,?,?,?)");

$stmt->bind_param('i', $VALUE)

^绑定这样的参数。第一个参数是第二个参数的类型(在本例中为整数,对于字符串等为's')。 $VALUE是要绑定的变量。 绑定的参数数量必须与占位符/问号的数量匹配;这份准备好的声明预计有四个。

要在一行中绑定多个参数,可以使用格式bind_param('sss', $string1, $string2, $string3)来选择示例。然后:

$stmt->execute();
$stmt->close();

我还会检查您的连接对象,以确保它已成功连接到具有实际登录信息的数据库。除此之外,不要忘记在进入数据库之前清理/验证您的输入。 This covers it well