Intereting Posts
Нужно ли мне соединение php mysql в каждой функции, использующей базу данных? Regex: шаблон соответствия, если он не в начале Как улучшить чтение функции файла и захватить данные для лучшей производительности, чем файл ()? Проверить рекурсивный метод Как вы можете избежать вставки нулевой записи в базу данных с помощью ассоциации «один ко многим» с использованием доктрины? Как глобально изменить значение пользовательских измерений для идентификатора клиента? что такое APPPATH в кодеригенере ZF2: как визуализировать вид из другого модуля PHP – cURL и удаленный вход Как (правильно) расширить метод ScnSocialAuth \ Authentication \ Adapter \ HybridAuth :: authenticate ()? Как использовать внешний JSON …? Лучший способ создания вложенного массива из таблиц: несколько запросов / циклов VS single query / loop style PHP Array Объединить два массива с одним ключом Symfony 2: получить контекст безопасности вне контроллера я хочу получить сумму файлов в папке по php

Проверка имени пользователя php на базе данных, когда пользователь уже занят

Привет, у меня есть система регистрации, и она хорошо работает и сохраняется в базе данных. У меня есть проблема с проверкой базы данных для имени пользователя, если она уже существует. Мой скрипт проверки базы данных неверен. Может ли кто-нибудь помочь мне в этом? Ниже мой код

<?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

Solutions Collecting From Web of "Проверка имени пользователя php на базе данных, когда пользователь уже занят"

Изменить :

  $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']; }