Не переживайте, поэтому оцените любую помощь.
Я хочу создать 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 🙂
как ваше условие 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>