PHP: поиск запроса, если электронная почта уникальна, тогда, если это так, запрос на добавление записи в базу данных

Не переживайте, поэтому оцените любую помощь.

Я хочу создать PHP, чтобы подтвердить, что регистрация пользователя имеет уникальный адрес электронной почты. Если это уникально, то добавить в базу данных sql и отобразить соответствующее значение.

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

<?php $email= $_GET["email"]; $firstname = $_GET["firstname"]; $lastname = $_GET["lastname"]; $con = mysql_connect("user","db","pass"); mysql_select_db("db"); $query1 = "SELECT * FROM `db` WHERE `Email` = '$email'"; $result = mysql_query($query1); if ( mysql_num_rows ($result) == 1 ) {$value="Already registered"; } else { mysql_query("INSERT INTO db (Email, FirstName, LastName) VALUES ('$email','$firstname','$lastname')"); mysql_close($con); $value="Confirmed"; } echo $value; 

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

 $query1 = "SELECT 1 FROM `db` WHERE `Email` = '$email' LIMIT 1"; 

Тогда следующая строка

 if ( mysql_num_rows ($result) == 1 ) 

будет логически корректным. В противном случае, если в базе данных имеется 2 или более записей, результат будет ложным. С моим исправлением это, if будет логичным.

Другим решением было бы выбрать количество строк, но поскольку электронные письма должны быть уникальными в базе данных, нет смысла делать что-то вроде

 $query1 = "SELECT COUNT(*) FROM `db` WHERE `Email` = '$email'"; 

Однако таким образом, вместо проверки количества строк в результате, вы можете проверить результат, не опасаясь, что он пуст. Но опять же, поскольку логика вашей базы данных состоит в том, чтобы иметь один адрес электронной почты только один раз, нет точки проверки, сколько из них существует, поскольку результат будет либо 0, либо 1 🙂

  1. убедитесь, что ваш код не дает никакой ошибки
  2. как ваше условие if

    if (mysql_num_rows ($ result) == 1)

это означает, что если у вас есть более, чем >1 он перекодировал false поэтому измените его на

 if ( mysql_num_rows ($result) >0 ) 
 $query1 = mysql_query("SELECT COUNT(*) AS num FROM `db` WHERE `Email` = '$email'"); $result = mysql_fetch_assoc($query1); if ($result['num'] == 1) { // already registered } else { } 

Также вы полностью забыли о SQL-инъекции. Вы должны убедиться, что все значения, предоставленные пользователем, безопасны для запуска через базу данных. Вы можете сделать это с помощью mysql_real_escape_string (). то есть:

 $email = mysql_real_escape_string($_GET['email']); 

Чтобы решить эту проблему, я бы использовал Ajax:

php check_email.php

 $email= $_POST["email"]; $firstname = $_GET["firstname"]; $lastname = $_GET["lastname"]; ... $query1 = "SELECT * FROM `db` WHERE `Email` = '$email'"; $result = mysql_query($query1); if (mysql_num_rows ($result)){ echo "yes"; } else { mysql_query("INSERT INTO db (Email, FirstName, LastName) VALUES ('$email','$firstname','$lastname')"); echo "no"; } 

HTML :

  <form method="post" action=""/> <input name="email" type="text" id="email" value=""/> <input name="firstname" type="text" id="firstname" value=""/> <input name="lastname" type="text" id="lastname" value=""/> <input name="Submit" type="button" id="submit" value="Go"/> <div id="msg"></div> </form> <!--load latest version of jquery--> <script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script> <script> //JS (use jquery): $("#submit").click(function () { $.ajax({ type: "POST", url: "check_email.php", dataType: "text", //send data to php data: {email:$("#email").val(),firstname:$("#firstname").val(),lastname:$("#lastname").val()}, //get answers success: function (response) { if(responce=="yes") $("#msg").html("email exists!") else if (responce=="no") $("#msg").html("Email was successfully added to the database!") }, error: function (xhr, ajaxOptions, thrownError) { alert(xhr.status); alert(thrownError); } }); }); </script>