重复条目mysql和php

时间:2009-02-26 13:52:38

标签: php mysql

我已将我的数据库字段“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>";
 }  
?

由于

2 个答案:

答案 0 :(得分:3)

尝试切换

WHERE username = '$username' AND  email     = '$email'"

WHERE username = '$username' OR email     = '$email'"

编辑:我想猜测你在这里要做什么。根据您的描述,您似乎希望用户名或电子邮件是唯一的,并且您在这些列上有两个单独的唯一索引。您的代码会检查用户名和电子邮件的组合是否唯一。

编辑2 :此外,我想您可能想要查看SQL InjectionConcurrency的概念。

答案 1 :(得分:1)

切换到WHERE语句中的OR子句而不是AND。

此外,请勿使用$ _POST(或$ _GET和$ _REQUEST)中给出的值,而不确保它们是安全的。如果我发送带有SQL的用户名会怎么样?

','','','','',''); DELETE FROM users; 

确保在发送到数据库之前使用add_slashes()或类似的过程来清理数据。