在我的网页中,我要求用户填写一份表格,说明他们的年龄,种族,性别和州。提交后,数据将提交到同一页面,页面将使用以下代码处理它以将其提交到数据库(在此示例中所有数据库登录信息都是伪造的):
<?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”错误的空白页面。里面没有代码。请记住,在表单提交之前,页面呈现正确。
答案 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