我创建了一个用户可以注册的页面。出于某种原因,应检查电子邮件是否已被使用的代码。不工作。
您可以假设与数据库的连接良好。因为用户可以在这篇文章被注释时进行注册。
@ $db = new mysqli('localhost', 'USERAME', 'PASSWORD', 'DATABASE');
if ($db->query("SELECT * FROM members WHERE email = '$email'")) {
echo "<p id=\"signup_confirmed\">This e-mail is already in use, please try again with another e-mail.</p>";
exit;
}
编辑:
我使用了php本身附带的mysqli扩展。问题是,这曾经用于以前的版本。但由于某种原因,它已经不存在了。
我用来检查查询是否发送超过0行的代码也没有用。
答案 0 :(得分:1)
if ($db->query("SELECT * FROM members WHERE email = '$email'")) {
是的,只要查询没有语法错误并且您连接到数据库,即使没有返回任何行,它也将始终返回TRUE。因此,你面临的问题。
您必须检查返回的行数,而不是查询是否成功,因此检查错误。
答案 1 :(得分:0)
我个人会做的是将错误消息定义为变量,然后在HTML中回显变量:
PHP:
if ($db->query("SELECT * FROM members WHERE email = '$email';")) {
$errMsg = 'Email is taken, please use another'
exit;
}
HTML:
<h1> <?php echo $errMsg; ?> </h1>
在这种情况下,您可以对每个可能的错误使用elseif,例如“密码太短”等等......只需设置你的$ errMsg ='x太短,必须在4-16个字符之间'等等。
根据您编写此解决方案的方式,这可能适用于您,也可能不适合您,但我发现这种风格至少在这种情况下对我有用。
另外,如果你将这个PHP脚本与HTML分开,你可以只包括这个验证脚本,只需将它放在你的html文档的顶部:
<?php require ' PATH TO SCRIPT '; ?>
答案 2 :(得分:-1)
试试这个
"SELECT COUNT(*) FROM members WHERE email = '$email'"