【问题标题】:duplicate entries mysql and php重复条目mysql和php
【发布时间】:2009-02-26 13:52:37
【问题描述】:

我已将我的数据库字段“用户名”和“电子邮件”设置为取消静音,当使用下面的代码时,这仅在“用户名”已经存在时才有效,然后会回显错误。如果他们的电子邮件存在,则用户会收到一个 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>";
 }  
?

谢谢

【问题讨论】:

标签: php mysql


【解决方案1】:

尝试切换

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

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

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

编辑 2:另外,我认为您可能需要研究 SQL InjectionConcurrency 的概念。

【讨论】:

  • 也没有必要做 SELECT username AND email... 只需做 SELECT 1 (做 select username AND email 没有任何意义)
  • 好的,谢谢,是的,电子邮件和用户名必须是唯一的,我还添加了函数 stripslashes 和 mysql_real_escape_string。防止 SQL 注入 谢谢
【解决方案2】:

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

另外,不要使用 $_POST(或 $_GET 和 $_REQUEST)中给出的值,而不确保它们是安全的。如果我发送包含 SQL 的用户名会怎样?

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

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

【讨论】:

  • 感谢Jus的提醒:$username = stripslashes($username); $password = stripslashes($password); $username = mysql_real_escape_string($username); $password = mysql_real_escape_string($password);应该没问题吧?
  • 根据细节,主要是在任何文本上使用 mysql_real_escape_string()。密码上的 md5() 应该没问题,因为 MD5 从不返回有问题的文本。我通常使用 is_numeric() 测试数字以确保它们能够正常工作。 stripslashes() 有时很有帮助。
猜你喜欢
  • 1970-01-01
  • 2012-05-09
  • 2012-06-04
  • 2012-02-04
  • 1970-01-01
  • 2017-08-15
  • 2019-11-26
  • 2012-02-15
  • 2020-04-09
相关资源
最近更新 更多