【发布时间】:2014-11-25 18:10:46
【问题描述】:
表单和代码工作没有任何问题,表单数据由于某种原因没有插入数据库。我已经尝试过更改 INSERT INTO 部分,但它不起作用。
if ($_POST['submit']){
if (!$_POST['email']) $error.="<br />please enter your email";
else if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) $error.="<br />please enter valid email address";
if(!$_POST['password']) $error.="<br />please enter your password";
else {
if(strlen($_POST['password'])<8) $error.="<br />please enter password with 8";
if (!preg_match('`[A-Z]`', $_POST['password'])) $error.="<br />please include at least one captial letter";
}
if ($error) echo "<br />There were errors in your singup details".$error;
else{
$link = mysqli_connect("localhost", "root", "root", "test");
$query="SELECT * FROM users WHERE email='".mysqli_real_escape_string($link, $_POST['email'])."'";
$result = mysqli_query($link,$query);
$result = mysqli_num_rows($result);
if ($result) echo"That email already resgitered";
else{
$query= "INSERT INTO `users` (`email`, `password`) VALUES ('".mysqli_real_escape_string($_POST['email'])."','".md5(md5($_POST['email'].$_POST['password']))."')";
mysqli_query($link, $query);
echo "Signed up!";
}
}
}
【问题讨论】:
-
警告:使用
mysqli时,您应该使用参数化查询和bind_param将用户数据添加到您的查询中。 请勿使用字符串插值来完成此操作,因为您将创建严重的SQL injection bugs。您还紧急需要阅读proper password handling procedures,因为即使是最粗略的审核,使用 MD5 也会自动失败。 -
这是错误的
'".md5(md5($_POST['email'].$_POST['password']))."'- 将or die(mysqli_error($link))添加到mysqli_query()。 -
在你打开
<?php标签error_reporting(E_ALL); ini_set('display_errors', 1);之后在文件顶部添加错误报告,看看它是否产生任何东西。 -
如果向查询中添加硬值,脚本会将值插入数据库中?
-
您希望用户如何使用经过 MD5 处理的电子邮件地址登录?你将不得不重新考虑这一点。
标签: php mysql database forms login