Php 使用不同的用户名和电子邮件注册新用户
我的注册页面有问题。您可以使用已通过其他电子邮件注册的用户名注册新用户 例如,首次注册: 用户名:User-1Php 使用不同的用户名和电子邮件注册新用户,php,if-statement,registration,Php,If Statement,Registration,我的注册页面有问题。您可以使用已通过其他电子邮件注册的用户名注册新用户 例如,首次注册: 用户名:User-1 密码:123 电子邮件:123@email.com 收到消息:“您已注册” 另一项注册: 用户名:User-1 密码:123 电子邮件:另一个_email@email.com 收到消息:“您已注册” 页面应显示“用户名已存在”,但这并没有发生。我真的不知道少了什么 代码如下: <?php if(isset($_POST["register"])){ $username = $
密码:123
电子邮件:123@email.com 收到消息:“您已注册” 另一项注册: 用户名:User-1
密码:123
电子邮件:另一个_email@email.com 收到消息:“您已注册” 页面应显示“用户名已存在”,但这并没有发生。我真的不知道少了什么 代码如下:
<?php
if(isset($_POST["register"])){
$username = $_POST['username'];
$password = $_POST['password'];
$email = $_POST['email'];
if (!empty($username) && !empty($password) && !empty($email)){
$checkusername = mysql_query("SELECT `id` FROM `user` WHERE `username` = '".$username."'") or die(mysql_error());
$checkemail = mysql_query("SELECT `id` FROM `user` WHERE `email` = '".$email."'") or die(mysql_error());
if(mysql_num_rows($checkusername) == 1){
?><p><?php echo "Username already exists"; ?></p><?php
}
if(mysql_num_rows($checkemail) == 1){
?><p><?php echo "Email already exists"; ?></p><?php
}
else{
mysql_query("INSERT INTO `database`.`user`(`username`,`password`,`email`) VALUES ('".$username."','".$password."','".$email."')") or die(mysql_error());
?><p><?php echo "You are Registered"; ?></p><?php
}
}
else{
if(empty($username)){
$error[] = "Please insert a username";
}
if(empty($password)){
$error[] = "Please insert a password";
}
if(empty($email)){
$error[] = "Please insert a email";
}
foreach ($error as $value) {
?><p><?php echo "'".$value."'<br>"; ?></p><?php
}
}
}
?>
您的第二个if
应该是elseif
if(mysql_num_rows($checkusername) == 1){
?><p><?php echo "Username already exists"; ?></p><?php
}
elseif(mysql_num_rows($checkemail) == 1){
?><p><?php echo "Email already exists"; ?></p><?php
}
else{
mysql_query("INSERT INTO `database`.`user`(`username`,`password`,`email`) VALUES ('".$username."','".$password."','".$email."')") or die(mysql_error());
?><p><?php echo "You are Registered"; ?></p><?php
}
if(mysql\u num\u行($checkusername)==1){
?>除上述内容外,如果您已经有两个来自先前测试的User-1==1,则返回false?Try>=1
我也不确定| | mysql_die()是否是一个好主意,但可能不是问题所在。您的数据库中可能有多个使用此用户名的用户。可以尝试类似的方法
mysql_num_rows($checkusername) > 0
if
中的条件错误,导致您在输入的电子邮件尚不存在时插入用户
但是,检查也有点风险。检查匹配数是否正好为1。这意味着,无论出于何种原因,如果该用户在数据库中已经存在两次,则可以继续添加更多同名用户
最后,除了修复脚本中的所有逻辑之外,还要确保在用户名字段中添加一个唯一的索引,并在电子邮件字段中添加一个类似的索引。这样,无论脚本中有什么缺陷,从技术上讲,都不可能创建重复的用户
不过,您仍然需要修复与MySQL的联系方式。您现在的联系方式已经过时,而且非常危险。快速猜测>0而不是==(或者清空您的表)。例如,您已经有多个名为Fred的用户。您使用的mysql连接已过时且不推荐使用。此外,您非常容易受到SQL注入的攻击。此外,如果您的if
错误。如果用户名匹配,但电子邮件不匹配,则仍将创建新用户。为什么您会对此感到惊讶?您会检查重复的用户名,但不会用这些信息做任何事。你只是盲目地插入新记录。另外,你很容易受到@Marc B的攻击,很严厉,但却是真的。[已解决]?WTF,这不是一个支持论坛。
mysql_num_rows($checkusername) > 0