【发布时间】:2015-05-21 12:28:16
【问题描述】:
我已经尝试重写代码,我查看了我之前编写的成功编码,但我真的找不到问题..我快疯了。
我正在尝试将一些数据从表单发布到数据库。
据我所知,我设置正确的数据库,但是每次都会导致脚本失败。
数据库图片:http://imgur.com/F93A9ot
(抱歉,这里的语言是丹麦语。)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<?php
// defining database information
define("HOSTNAME", "localhost");
define("MYSQLUSER", "admin");
define("MYSQLPASS", "admin");
define("MYSQLDB", "lynx");
// establishing database connection
if(isset($_POST['submit'])){
$connection = new mysqli(HOSTNAME, MYSQLUSER, MYSQLPASS, MYSQLDB);
$name = mysqli_real_escape_string($connection, $_POST['name']);
$price = mysqli_real_escape_string($connection, $_POST['price']);
$desc = mysqli_real_escape_string($connection, $_POST['desc']);
$insert = "INSERT into products (id, name, price, desc) VALUES (NULL, '$name', '$price', '$desc')";
if($connection->query($insert)) {
echo "Succes";
} else {
echo "Something went wrong";
}
}
?>
<form action="<?php echo $_SERVER['PHP_SELF']?>" method="post">
<input type="text" name="name">
<input type="text" name="price">
<input type="text" name="desc">
<input type="submit" name="submit">
</form>
</body>
</html>
你能看出我做错了什么吗?
【问题讨论】:
-
显然,您还没有尝试过一切。
desc是 SQL 中的保留字。您应该更改列的名称或将其括在反引号中。 -
您的查询容易受到 MySQL 注入的攻击。您应该使用准备好的语句。
-
您还没有尝试过的主要事情是在代码中添加错误检查。
$connection->query()很可能会失败。您可以使用$connection->error获取描述性错误。 -
@BenPearlKahan OP 使用的是
mysqli,而不是mysql。 -
但我不知道这是一个保留字.. 甚至我的老师也不知道 o.O