2016-01-08 2 views
1

У меня возникла проблема с проверкой подлинности электронной почты.PHP сначала отправляет данные в базу данных, затем проверяет

Проверка подлинности электронной почты работает, но она сначала отправляет форму, и если я обновляю страницу и отправляю те же данные снова, она проверяется. Почему он не проверяет перед отправкой?

Мой код:

<?php 
include_once 'init.inc.php'; 

// database connection 

error_reporting(E_ALL); 

// function for Registration 

function regUser($db) 
{ 
$password = password_hash($_POST['password3'], PASSWORD_BCRYPT); 
$sql = "INSERT INTO users SET username = '{$_POST['username']}', email = '{$_POST['email']}', password = '$password', laender = '{$_POST['selection']}'"; 
$result = $db->query($sql); 
return $result; 
} 

// function for emailValidation 

function emailValidate() 
{ 
$email1 = $_POST['email']; 
$email1 = filter_var($email1, FILTER_SANITIZE_EMAIL); 
if (!filter_var($email1, FILTER_VALIDATE_EMAIL)) 
{ 
    return true; 
} 
else 
{ 
    return false; 
} 
} 

// function to check if username already registered 

function usernameExists($db) 
{ 
$sql = "SELECT username FROM users WHERE username='" . $_POST['username'] . "'"; 
$result = $db->query($sql); 
if (mysqli_num_rows($result) > 0) 
{ 
    return true; 
} 
else 
{ 
    return false; 
} 
} 

// function to check if email already exists in database 

function emailExists($db) 
{ 

// var_dump(emailExists($db)); 

$sql = "SELECT email FROM users WHERE email = '" . $_POST['email'] . "'"; 
$result = $db->query($sql); 
if (mysqli_num_rows($result) > 0) 
{ 
    return true; 
} 
else 
{ 
    return false; 
} 
} 

// sending data to database 

if (isset($_POST['submit'])) 
{ 

// var_dump(usernameExists($db)); 
// var_dump(emailExists($db)); 

if (emailValidate() === false) 
{ 
} 
else 
{ 
    echo 'Please enter a valid email adress'; 
} 

if (usernameExists($db) === false && emailExists($db) === false) 
{ 
    regUser($db); 
} 
else 
{ 
    die("Username/Email already exists!"); 
} 
} 

Имя пользователя и E-mail существует функция работает нормально. Проверяется только подтверждение по электронной почте после отправки формы.

+0

Я вижу много вещей, которые нужно улучшить в этом коде, буй скажи мне. Появляются ли какие-либо ошибки? – Phiter

+0

ошибок не отображается, он проверяет достоверность, но только после его отправки в базу данных – RedFire

ответ

0

Вы, возможно, придется изменить порядок некоторых из вашего состояния проверки кода, так что вы проверить наличие электронная почта/имя пользователя в базе данных ТОЛЬКО после самой электронной почты является действительным:

if (isset($_POST['submit'])) 
{ 
    // email address is not valid, show error message 
    if (emailValidate() !== false) 
    { 
     echo 'Please enter a valid email adress'; 
    } 
    // email address is valid. Now check if it exists in the DB 
    else 
    { 
     if ((usernameExists($db) === false) && (emailExists($db) === false)) 
     { 
      regUser($db); 
     } 
     else 
     { 
      // you can also use echo error in place of die() here 
      die("Username/Email already exists!"); 
     } 
    } 
} 
+0

спасибо, что это работает сейчас :) – RedFire

0

Делай так:

if(emailValidate() === false){ 

}else { 
    die('Please enter a valid email adress');//use die while not echo, otherwise the php will keep on running even the email is wrong 

} 

Кроме того, вы можете сделать это:

if(emailValidate() !== false){ 
    die('Please enter a valid email adress'); 
} 
+0

работает с die(); но как я могу отобразить ошибку в html непосредственно под входом электронной почты? потому что с die(); он открывает новую страницу:/ – RedFire

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