我的网站上有以下PHP代码/文件,但由于一些不明智的原因,它不会将用户输入的记录插入到mySQL数据库表中,因为它是必需的。谁能告诉我为什么会这样?
据我所知,代码完全正确,我不知道为什么会发生这种情况......
请帮忙......代码如下......
<html>
<head>
</head>
<body>
<form action="register_development_file_1.php" method="post">
Email: <input type="text" name="email"><br />
Date: <input type="text" name="date"><br />
Time: <input type="text" name="time"><br />
<input type="submit" name="submit">
</form>
<?php
if (isset($_POST['submit']))
{
$con = mysql_connect("localhost","username","password");
if (!$con)
{
die("Could not connect to the database: " . mysql_error());
}
mysql_select_db("wwwbrecs_BREC",$con);
$sql = "INSERT INTO 'signups' ('signup_email_address', 'signup_date', 'signup_time') VALUES ('$_POST[email]','$_POST[date]','$_POST[time]')";
mysql_query($sql,$con);
mysql_close($con);
}
?>
</body>
</html>
答案 0 :(得分:2)
您的查询中存在语法错误,您不会使用引号'
来围绕表格名称和列,至少可以使用反引号`
INSERT INTO 'signups' ('signup_email_address', 'signup_date','signup_time')
应该是
INSERT INTO signups (signup_email_address, signup_date, signup _time) VALUES
或者
INSERT INTO `signups` (`signup_email_address`, `signup_date`, `signup _time`) VALUES
只有值(实际上不是整数列的整数)应该用引号'
包围。
然后我想要记住,mysql_
函数已被弃用,因此我建议您切换到mysqli
或PDO
,确实存在sql injection
的风险,看看How can I prevent SQL injection in PHP?。您应该使用准备好的法规来避免任何风险
答案 1 :(得分:0)
这里是你创建的更好的脚本版本,因为你的SQL注入是100%开放的,甚至不是传统的编码方式,这更安全但如果你需要安全,那么我建议你学习一下PDO来自 here
<?php
if(isset($_POST['submit'])){
mysql_connect("localhost","username","password") or die(mysql_error());
mysql_select_db("wwwbrecs_BREC", $con) or die(mysql_query());
$email = mysql_real_escape_string($_POST['email']);
$date = mysql_real_escape_string($_POST['date'])
$time = mysql_real_escape_string($_POST['time'])
$sql = "INSERT INTO
signups ('signup_email_address', 'signup_date','signup_time')
VALUES ('".$email."','".$date."','".$time."')";
mysql_query($sql, $con) or die(mysql_error());
mysql_close($con);
}
答案 2 :(得分:0)
注册表不应该用单引号括起来,而应该用撇号`
包围因此
$sql = "INSERT INTO 'signups' ('signup_email_address', 'signup_date', 'signup_time') VALUES ('$_POST[email]','$_POST[date]','$_POST[time]')";
应该是
$sql = "INSERT INTO `signups` ('signup_email_address', 'signup_date', 'signup_time') VALUES ('$_POST[email]','$_POST[date]','$_POST[time]')";
答案 3 :(得分:0)
<?php
$sql = "
INSERT INTO signups
(signup_email_address, signup_date, signup_time)
VALUES
('" . mysql_real_escape_string($_POST['email']) . "','" . mysql_real_escape_string($_POST['date']) . "', '" . mysql_real_escape_string($_POST['time']) . "')";
这应该可以解决问题,同时检查你的安全性