Я создаю форму регистрации регистра 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;
}
?>
у вас есть 2x различные переменные подключения '$ con' и' $ conn'. Первый - неправильный. Затем вы смешиваете PDO с 'mysqli_', который эти разные API не смешивают. Таким образом, ваш первый запрос недействителен. –
Я знаю, что, однако, это не влияет на скрипт –
О, вы так думаете? что мне здесь не хватает? Редактировать: неважно; спросите ответчика ниже. Я не понимаю, почему вы тут смешиваетесь. Это просто плохой дизайн, в том числе использование неэкранированного запроса и MD5. –