2014-10-03 6 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

+3

И не отправляйте пароли! – Jost

+1

Что произойдет, когда я напечатаю это в вашем почтовом ящике '1 ИЛИ 1 = 1'? – Daan

ответ

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 varaible, даже если он никогда не был установлен.

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

Спасибо за ответ и объяснение, но условие все еще не работает, даже если я вхожу в тот же адрес электронной почты, он все еще проталкивается. –

+1

не использовать 'isset (email)'. лучше проверить 'mysql_num_rows ($ xxx)> 0') –

+0

Ох. Я попытался повторить его, чтобы проверить его. Спасибо. :) –

Смежные вопросы