有一些问题我无法找到解决方案,虽然通过许多来源搜索(以及此处的问题)。所以,这里是。
使用下面的PHP代码,我想从HTML表单中收集数据并将其发送到本地WAMP服务器。但是,虽然最终检查显示我“成功!”,但没有找到数据库表中的新行,它仍然是空的。名字是正确的,命令是(我也看到),所以我只是不知道什么是错的
我希望你们能帮助我。 ^^
//Check if user submited a form
if (isset($_POST['submit'])) {
//Check if from is properly filled
if (empty($_POST['itemName']) || empty($_POST['itemPic']) || empty($_POST['itemPrice']) || empty($_POST['itemProvider'])) {
echo '<script>alert ("Fill out the form please!")</script>';
} else {
$conn = new mysqli('localhost:3306', 'root', '', 'goods-review');
//Check if connection established
if (mysqli_connect_errno()) {
exit('Connect failed: ' . mysqli_connect_error());
}
//Sending data
$newItem = array('itemName' => $_POST['itemName'], 'itemPic' => $_POST['itemPic'], 'itemPrice' => $_POST['itemPrice'], 'itemProvider' => $_POST['itemProvider']);
$sql = "INSERT INTO goods (itemName, itemPic, itemPrice, itemDate, itemProvider) VALUES ('" . $newItem['itemName'] . "', '" . $newItem['itemPic'] . "', '" . $newItem['itemPrice'] . "', date('Y:m:d, H:i:s'), '" . $newItem['itemProvider'] . "')";
//Check if sent
if ($sql) {
echo '<script>alert ("Success!")</script>';
} else {
echo '<script>alert ("Error!")</script>';
}
$conn->close();
}
}
答案 0 :(得分:0)
代码只是为变量赋值。
$sql = "INSERT ...";
字符串值未提交给数据库;它不是作为SQL语句执行的。关于变量的名称并没有什么神奇之处。就PHP而言,代码只是为变量赋值。就是这样。
如果要执行SQL语句,则需要添加实际执行该操作的代码。找到如何做到这一点的例子应该不难。
重要说明:问题中的代码似乎创建了一个易受SQL注入攻击的SQL语句。一个更好的模式是使用预备语句和绑定占位符。
如果有一些(不可理解的)原因导致您无法使用预准备语句,那么至少必须正确转义SQL文本中包含的任何可能不安全的值。
答案 1 :(得分:-2)
如果您先设置$newItem
阵列。
Normaly您将验证用户输入并确保用户输入中没有SQL注入。 请在此处阅读:What is SQL injection?
之后
(您必须添加$newItem['itemDate']=date('Y:m:d, H:i:s');
)
$sql = "INSERT INTO goods (".implode(', ',array_keys($newItem)).")"
." VALUES ('".implode("', '",$newItem)."')";
if (mysqli_query($conn,$sql)){
echo '<script>alert ("Success!")</script>';
} else {
echo '<script>alert ("Error!")</script>';
}
如果你使用它:
你没有太注意正确的田间秩序
每个字段值围绕它们变为'
您编写的代码较少
字段数和订单可以更改
如果没有插入任何内容,mysqli_query()
最后会返回FALSE,您可以检查它。
旁注:尝试使用MYSQLi扩展和准备状态的OOP版本。在此处阅读:mysqli, OOP vs Procedural