2014-10-03 138 views
-2

如何检查电子邮件是否已被使用?如果正在使用,用户会收到电子邮件已被使用的警告,如果没有,则会继续。PHP检查电子邮件是否已被使用

这里在我的代码,它没有工作,它仍然登记,即使我输入了相同的电子邮件。

<?php 

session_start(); 


[email protected]_connect("localhost","root","secretpassword"); 
$dbcheck = mysql_select_db("buybranded"); 

    if (!$dbcheck) { 
     echo mysql_error(); 
    } 


$new_email= $_POST['email']; 
$xxx = mysql_query("SELECT email FROM users WHERE email = $new_email"); 
$yyy = mysql_fetch_row($xxx); 

if(!isset($yyy['email'])){ 

$hashed_password = hash('sha512', $_POST['password']); 
$type="customer"; 
$sql="INSERT INTO users(first_name, middle_name, last_name, gender, email, password, birth_date, home_address, postal_code, home_phone, mobile_phone, source, type) 
VALUES 
('$_POST[first_name]','$_POST[middle_name]','$_POST[last_name]','$_POST[gender]','$_POST[email]','$hashed_password','$_POST[birth_date]','$_POST[home_address]','$_POST[postal_code]','$_POST[home_phone]','$_POST[mobile_phone]','$_POST[source]','$type')"; 
} 

else { 
echo "hahaha"; 
} 

if (!mysql_query($sql,$con)) 
    { 
    die('Error: ' . mysql_error($con)); 
    } 

header('refresh: 0; url=../index.php#openModal'); 
$message = "You are now Registered, Please Sign In."; 
echo("<script type='text/javascript'>alert('$message');</script>"); 

?>

我希望你们能帮助,我是新用PHP。 :) 谢谢!

+2

你真的,因为它是过时不应该使用'mysql_'功能的新项目。改为使用mysqli或PDO。 – TheWolf 2014-10-03 14:19:58

+3

并且不要发布密码! – Jost 2014-10-03 14:20:24

+1

当我在你的电子邮件输入'1或1 = 1'中输入时会发生什么? – Daan 2014-10-03 14:21:20

回答

1

您的查询语法错误,导致所有查询失败。您也无法检查是否存在故障,所以你只需承担一切都会继续工作:

$xxx = mysql_query("SELECT email FROM users WHERE email = $new_email"); 
                  ^---------^--- no quotes 

这将产生

... WHERE email = [email protected] 

ple.com

,我很怀疑你有您的用户表中的[email protected]列。

$xxx = mysql_query("SELECT email FROM users WHERE email = '$new_email'") or die(mysql_error()); 
                  ^----------^-- 

请注意这里的引号,以及or die(...)的加法。

然后你有更多的逻辑错误。如果第一个查询不返回任何有效数据,则仅设置$sql。但是,你无条件地试图执行`$ sql变量,即使它永远不会被设置。

if (...) { 
    $sql = "INSERT ..."; 
} 
mysql_query($sql); 

因为它只被设置为在电子邮件不存在,你一味地试图执行一个不存在的查询,而查询()调用失败,也是如此。该代码应该更像:

if (...) { 
    $sql = "INSERT..." 
    mysql_query($sql) or die(mysql_error()); 
    die("Email created"); 
} 
die("Email not created"); 

而在这一切之上,你就容易sql injection attacks

+0

感谢您的回复和解释,但条件仍然不起作用,即使我输入相同的电子邮件,它仍然通过。 – 2014-10-03 14:52:49

+1

不要使用'isset(email)'。最好检查一下'mysql_num_rows($ xxx)> 0') – 2014-10-03 14:57:29

+0

哦。我试着回应它,所以我可以测试它。谢谢。 :) – 2014-10-03 15:02:12

相关问题