2015-09-28 2 views
-2

Я создаю форму регистрации регистра PHP с помощью recaptcha и оператора query/if, который проверяет базу данных для отправленного сообщения, а если существует, не выполняет запрос. Однако он работает, но когда в базе данных нет электронной почты, запрос не преформируется из-за того, что цикл while больше не циклируется из-за отсутствия результатов базы данных. Если бы кто-нибудь мог мне помочь со следующим кодом, это было бы здорово!PHP Регистрационная форма без дублирования электронной почты

<?php 
 

 
     $email;$comment;$captcha; 
 
     if(isset($_POST['email'])) 
 
      $email=$_POST['email']; 
 
     if(isset($_POST['comment'])) 
 
      $comment=$_POST['comment']; 
 
     if(isset($_POST['g-recaptcha-response'])) 
 
      $captcha=$_POST['g-recaptcha-response']; 
 

 
     if(!$captcha){ 
 
      echo '<h2>Please check the the captcha form.</h2>'; 
 
      exit; 
 
     } 
 
     $response=json_decode(file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=Secret_Key&response=".$captcha."&remoteip=".$_SERVER['REMOTE_ADDR']), true); 
 
     if($response['success'] == false) 
 
     { 
 
      echo '<h2>You are spammer ! Get the @$%K out</h2>'; 
 
     } 
 
     else 
 
     { 
 
\t \t \t $dbhost = "localhost"; 
 
\t \t \t $dbname = "****"; 
 
\t \t \t $dbuser = "root"; 
 
\t \t \t $dbpass = "****"; 
 
\t \t \t 
 
\t \t \t // database connection 
 
\t \t \t $conn = new PDO("mysql:host=$dbhost;dbname=$dbname",$dbuser,$dbpass); 
 
\t \t \t 
 
\t \t \t \t $email1 = $_POST['email']; 
 
\t \t \t \t $password = $_POST['password']; 
 
\t \t \t \t $firstname = $_POST['firstname']; 
 
\t \t \t \t $lastname = $_POST['lastname']; 
 
\t \t \t \t $country = $_POST['country']; 
 
\t \t \t \t $age = $_POST['age']; 
 
\t \t \t \t $gender = $_POST['gender']; 
 
\t \t \t \t $date = $_POST['date']; 
 
\t \t \t \t $time = $_POST['time']; 
 
\t \t \t \t $ip = $_POST['ip']; 
 
\t \t \t \t $datebirth = $_POST['dob-day'].'/'.$_POST['dob-month'].'/'.$_POST['dob-year']; 
 
\t \t \t \t $password = md5($password); 
 

 
\t \t \t \t $con = mysqli_connect('localhost','root','***','***'); 
 
\t \t \t \t if (!$con) { 
 
\t \t \t \t  die('Could not connect: ' . mysqli_error($con)); 
 
\t \t \t \t } 
 
\t \t \t \t $email_select = $con->query("SELECT * FROM users WHERE email='".$email1."'"); 
 
\t \t \t \t while($email = $email_select->fetch_object()): 
 
\t \t \t \t $emailDB = $email->email; 
 

 
\t \t \t 
 
\t \t \t if ($email1 == $emailDB) { 
 
\t \t \t \t echo "An user with this email already exists"; 
 
\t \t \t \t 
 
\t \t \t } else { 
 
\t \t \t \t $sql = "INSERT INTO users (email,password,firstname,lastname,country,age,gender,datebirth,ip,date,time) VALUES (:sas,:asas,:asafs,:asafsa,:asafsas,:asafsasa,:asafsasaf,:asafsasafa,:tdrezdgaec,:fyjhtgrtgfd,:egtrvcsefrv)"; 
 
\t \t \t \t $q = $conn->prepare($sql); 
 
\t \t \t \t $q->execute(array(':sas'=>$email1,':asas'=>$password,':asafs'=>$firstname,':asafsa'=>$lastname,':asafsas'=>$country,':asafsasa'=>$age,':asafsasaf'=>$gender,':asafsasafa'=>$datebirth,':tdrezdgaec'=>$date,':fyjhtgrtgfd'=>$time,':egtrvcsefrv'=>$ip)); 
 
\t \t \t \t // header('Location: http://www.socialnetwk.com/thankyou'); 
 
\t \t \t \t 
 
\t \t \t } 
 
\t \t \t endwhile; 
 
     } 
 
?>

+5

у вас есть 2x различные переменные подключения '$ con' и' $ conn'. Первый - неправильный. Затем вы смешиваете PDO с 'mysqli_', который эти разные API не смешивают. Таким образом, ваш первый запрос недействителен. –

+0

Я знаю, что, однако, это не влияет на скрипт –

+2

О, вы так думаете? что мне здесь не хватает? Редактировать: неважно; спросите ответчика ниже. Я не понимаю, почему вы тут смешиваетесь. Это просто плохой дизайн, в том числе использование неэкранированного запроса и MD5. –

ответ

0

Используйте функцию COUNT в MySQL вместо зацикливания целых пользователей в PHP:

$email_select = $con->query("SELECT COUNT(*) AS `email_count` FROM `users` WHERE `email`='".$email1."'"); 
$email = $email_select->fetch_object(); 

if($email->email_count == 0){ 
    // Continue 
}else{ 
    // Error 
} 
+0

Большое спасибо, работала безупречно :) –

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