我正在将数据添加到mysqli数据库中。可能我只是将代码放在错误的位置,但添加到我的表单中的信息似乎都没有通过。如果你可以帮助我,那会很棒。感谢。
PS我删除了部分原始代码,例如错误消息。
<?php
$servername = "A";
$username = "B";
$password = "C";
$dbname = "D";
if (isset($_POST["submit"])) {
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
//Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
$query = "INSERT INTO Form (name, email, message)".
"VALUES ('" . $name . "', '" . $email . "', '" . $message . "');";
mysqli_query($query);
//close connection
mysqli_close($conn);
}
?>
答案 0 :(得分:2)
mysqli_query($conn, $query);
此外,您需要使用mysqli_real_escape_string()
阻止SQL注入:
$name = mysqli_real_escape_string($conn, $_POST['name']);
$email = mysqli_real_escape_string($conn, $_POST['email']);
$message = mysqli_real_escape_string($conn, $_POST['message']);
答案 1 :(得分:2)
简单,您从未将数据库连接传递给mysqli_query($query);
并确保您的POST数组包含值。
所以,mysqli_query($conn, $query);
并检查错误。
mysqli_query()
http://php.net/manual/en/mysqli.query.php 请参阅以下链接http://php.net/manual/en/mysqli.error.php和http://php.net/manual/en/function.error-reporting.php并将其应用于您的代码。
您目前的代码向SQL injection开放。使用prepared statements或PDO与prepared statements。
还要确保此条件语句启动:
if (isset($_POST["submit"])) {...}
如果您的提交按钮不包含submit
名称属性(以及所有其他POST数组),则其中的任何内容都不会执行。
即:name="submit"
,name="name"
,name="email"
,name="message"
并且表单确实使用了POST方法。
错误报告可以帮助您。
将error reporting添加到文件的顶部,这有助于查找错误。
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// Then the rest of your code
旁注:只应在暂存时进行显示错误,而不是生产。
N.B。:您还应检查空白字段,如果这是一个实际网站或打算上线。
如果用户没有输入任何内容,则可能会因此而出现错误/失败。
对这些输入使用条件!empty()
。
即:
if (isset($_POST["submit"])) {
if(!empty($_POST['name']) && !empty($_POST['email']) && !empty($_POST['message'])){
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
// Rest of your query here
}
else{ echo "One of the fields is empty."; exit; }
}
else{ echo "Submit is not set."; }
<强>脚注:
您不确定如何运行此代码,以及是否已安装并正确配置了Web服务器/ PHP / MySQL。
如果您以file:///file.xxx
而不是http://localhost/file.xxx
进行访问,则会失败。
答案 2 :(得分:0)
而且我认为如果不这样做,你需要对表名和列名使用1
abd
324
1:is a command,
abd:is a name,
324:is an id
字符。 (靠近键盘上的1,也用于stackoverflow中的代码简单)。也许您使用了该字符,但stackoverflow不显示字符。