PHP检查电子邮件是否已被使用

时间:2014-10-03 14:18:28

标签: php forms email

如何检查电子邮件是否已被使用?如果在使用中,将警告用户已经使用了电子邮件,如果没有,则会继续。

在我的代码中,它不起作用,即使我输入了相同的电子邮件,它仍然会注册。

<?php

session_start();


$con=@mysql_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>");

&GT?;

我希望你们能帮忙,我是php的新手。 :)谢谢!

1 个答案:

答案 0 :(得分:1)

您的查询语法错误,导致所有查询失败。你也没有检查失败,所以你只是假设一切都会继续工作:

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

这将产生

... WHERE email = foo@exam

ple.com

我非常怀疑您的用户表中有foo@example.com列。

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

请注意此处的引号,以及or die(...)

的添加

然后你有进一步的逻辑错误。 $sql仅在第一个查询DOESN&T退回任何有效数据时才会设置。但是你无条件地尝试执行`$ sql varaible,即使它从未设置过。

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

由于只有在电子邮件DIDN&t存在的情况下才会设置,因此您盲目地尝试执行不存在的查询,然后THAT query()调用也会失败。代码应该更像:

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

除此之外,您还容易受到sql injection attacks

的攻击