Привет, у меня есть система регистрации, и она хорошо работает и сохраняется в базе данных. У меня есть проблема с проверкой базы данных для имени пользователя, если она уже существует. Мой скрипт проверки базы данных неверен. Может ли кто-нибудь помочь мне в этом? Ниже мой код
<?php if(empty($_POST['username'])){ $username_error = "Please Input Username"; }else{ if( 6 > mb_strlen($_POST['username']) || 20 < mb_strlen($_POST['username'])){ $username_error = "username must be at least 6 characters."; }else{ $sql = "SELECT members.username FROM members WHERE username = $username"; $res = mysql_query($sql); if(mysql_num_rows($res)){ $username_exists = "Username is already taken."; }else{ $username = $_POST['username']; } } } ?>
проблема заключается только в выражении else
Изменить :
$sql = "SELECT members.username FROM members WHERE username = $username";
Для того, чтобы:
$sql = "SELECT members.username FROM members WHERE username = '".mysql_real_escape_string($username)."'"; $users =mysql_query($sql); if(mysql_num_rows($users )){ $username_exists = "Username is already taken."; }{ $username = $_POST['username']; }
Имейте в виду, вам нужно избежать вашего имени пользователя, чтобы избежать SQL-инъекций! И избегайте использования функций mysql_ !
Прежде чем читать ; это подвержено SQL-инъекции, и я хотел бы указать вам на PDO .
Измените свой SQL-оператор, чтобы обрабатывать $username
как строку;
SELECT members.username FROM members WHERE username = '$username'
Затем удалите следующую строку,
mysql_query($sql);
И, наконец, измените условие if() { }
;
if(mysql_num_rows(mysql_query($sql))>0){
Я попытался помочь вам с этим кодом. Обратите внимание на комментарии. Я сделал больше, чем просто, ответьте на свой вопрос: есть немного измененная логика, добавлена дезинфекция $ username …
<?php // at first let's define this variables (just for any case) $username_error = null; $username_exists = null; // get username $username = $_POST['username']; // let's check it if (empty($username)) { $username_error = "Please Input Username"; // don't know in what context you use this code // so here you need to return from function or exit return; } // ... and sanitize $username = filter_var($username, FILTER_SANITIZE_SPECIAL_CHARS); // just for example // actually, I use active record, so can't suggest 100%-security way // check lenght if (mb_strlen($username) < 6 || mb_strlen($username) > 20) { $username_error = "username must be at least 6 characters."; // also let's exit or return return; } // and now let's check it in DB $sql = "SELECT members.username FROM members WHERE username = '$username'"; // !!! pay attention!!! $result = mysql_query($sql); // we need append this mysql result to some variable if (mysql_num_rows($result) > 0) { // and here we check num_rows of that result, not just tring with query! $username_exists = "Username is already taken."; // also let's exit or return return; } // if we are in here we have sanitized $username, that's not in use. // Enjoy!
var qc=document.forms["regform"]["email"].value; if(qc!='') { alert('in'); $.ajax({ url: 'search.php', data: "check_qc=" + qc, async:false, success: function(response) { if(response==1) { alert('Already Exists'); return false; } } }); }
Теперь, в файле search.php
$qc = $_GET['check_qc']; $sel="select * from register where email='".$qc."'"; $res= mysql_query($sel); $co= mysql_num_rows($res); // echo $co; if(count($co)>0) echo "1"; else echo "0";
if(mysql_num_rows($sql)>0){ $username_exists = "Username is already taken."; }else{ $username = $_POST['username']; }
Хотя вы должны использовать PDO или что-то еще для дезинфекции.
Исправление:
$res = mysql_query($sql) or die(mysql_error()); if(mysql_num_rows($res)){ $username_exists = "Username is already taken."; }else{ $username = $_POST['username']; }