我已将我的数据库字段“username”和“email”设置为unquie,当使用下面的代码时,仅当“username”已经存在时才会起作用,然后回显错误。如果存在电子邮件,则当出现与上述相同的错误时,用户会收到mysql重复错误。
<?php
require_once ( 'connection.php' );
$username=$_POST['username'];
$password=md5($_POST['password']);
$email=($_POST['email']);
$ip=$_SERVER['REMOTE_ADDR'];
session_start();
$query = "INSERT INTO users (username, password, email, rank, ip, active) VALUES ('$username','$password', '$email', '1', '$ip', '0')";
$sql = "SELECT username AND email FROM users WHERE username = '$username' AND email = '$email'" ;
$result=mysql_query($sql);
$count=mysql_num_rows($result);
$row = mysql_fetch_array($result);
if ( $count== 0 )
{
if (!mysql_query($query))
{
die('Error: ' . mysql_error());
}
echo "You are signed up, please follow the link on your email to active your account.";
}
else
{
echo "Username or Email already exists"."<br><a href=\"sign_up.php\">Try Again</a></br>";
}
?
由于
答案 0 :(得分:3)
尝试切换
WHERE username = '$username' AND email = '$email'"
到
WHERE username = '$username' OR email = '$email'"
编辑:我想猜测你在这里要做什么。根据您的描述,您似乎希望用户名或电子邮件是唯一的,并且您在这些列上有两个单独的唯一索引。您的代码会检查用户名和电子邮件的组合是否唯一。
编辑2 :此外,我想您可能想要查看SQL Injection和Concurrency的概念。
答案 1 :(得分:1)
切换到WHERE语句中的OR子句而不是AND。
此外,请勿使用$ _POST(或$ _GET和$ _REQUEST)中给出的值,而不确保它们是安全的。如果我发送带有SQL的用户名会怎么样?
','','','','',''); DELETE FROM users;
确保在发送到数据库之前使用add_slashes()或类似的过程来清理数据。