За последние 24 часа нас посетили 32803 программиста и 1821 робот. Сейчас ищут 1633 программиста ...

Проверка логина ajax

Тема в разделе "PHP и базы данных", создана пользователем R2ndom, 21 янв 2015.

  1. R2ndom

    R2ndom Новичок

    С нами с:
    21 янв 2015
    Сообщения:
    41
    Симпатии:
    0
    Добрый день.
    Есть форма авторизации
    Код (Text):
    1.  
    2. <input name="login" type="text" size="20" maxlength="35" id="username" value="" >   <span id="msgbox" style="display:none"></span>
    На которой происходит проверка доступности логина для регистрации через файл user_availability.php с помощью ajax
    Код (Text):
    1.  
    2. <?php
    3.  
    4. $existing_users=array('roshan','mike','jason');
    5.  
    6. $user_name=$_POST['user_name'];
    7.  
    8. if (in_array($user_name, $existing_users))
    9. {
    10.  
    11.     echo "no";
    12. }
    13. else
    14. {
    15.  
    16.     echo "yes";
    17. }
    18. ?>
    Проверка логинов из массива existing_users проходит без проблем. Подскажите пожалуйста как сделать проверку из бд mysql? Таблица accounts, столбик login.
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    select 1 from `users` where `login` = '{$_POST['user_name']}'

    если есть строки в результате такого запроса - логин занят
    экранирование специально оставлено за кадром
     
  3. R2ndom

    R2ndom Новичок

    С нами с:
    21 янв 2015
    Сообщения:
    41
    Симпатии:
    0
    Не получается
     
  4. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    бывает.

    этим комментарием автор как бы намекает на то что "не получается" это слишком абстрактная формулировка которая может включать в себя и рукожопость топикстартера и его низкий уровень профессиональных знаний и возможные логические ошибки кода и возможные ошибки при выполнении кода. при этом он автор явно дает топикстартеру понять что телепатов на форуме нет и если он хочет получить какую-то помощь то должен избежать пустых комментариев типа "не получается" а подробно расписывать исходный код, предположительную логику, актуальный результат и предположения о неудачах.

    Добавлено спустя 4 минуты 39 секунд:
    я всё же включу режим телепата. в заявке написано:
    а я написал:
    и топикстартер схавал как есть. только я почему-то писал комментарий не видя перед собой исходный, а жать "назад" было лениво. а топикстартер мог скопировать как есть и теперь у него не получается потому что таблицы юзерс у него нет. равно как и смекалки заменить моё юзерс на своё экаунтс.

    Добавлено спустя 2 минуты 45 секунд:
    а еще возможно топикстартер не знает какими функциями и как выполнить и обработать запрос к субд.

    к огромному сожалению комментарий Не получается не дает реальной картины. может топикстартер на листке бумаги пишет и пхп не выполняет этот код?
     
  5. R2ndom

    R2ndom Новичок

    С нами с:
    21 янв 2015
    Сообщения:
    41
    Симпатии:
    0
    Очень рад что Вы ради меня сочинили целую проблему из своих предположений.

    Код (Text):
    1.  
    2. $mysqli = new mysqli("localhost", "my_user", "my_password", "world");
    3.  
    4. if (mysqli_connect_errno()) {
    5.     printf("Connect failed: %s\n", mysqli_connect_error());
    6.     exit();
    7. }
    8.  
    9.  
    10. $sql = "select uname from accounts where uname=$mysqli->real_escape_string($_POST['user_name'])";
    11. $result = $mysqli->query($sql);
    12.  
    13. if($result->num_rows>0){
    14.     echo "Yes";
    15. }
    16. else{
    17.     echo "no";
    18. }
    Ругается на любой ввод
     
  6. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    ну всё правильно ругается. никогда не видел такого кода. где можно пример увидеть? я сам напишу автору кода в чем он не прав.

    попробуйте для начала без экранирования. у вас пока очень туго с алгоритмом и тему нужно было создавать в новичках.
    ваш навык еще проявляется вот в каком моменте: в первом листинге если есть логин - вернется ноу, а если нет - ес. во втором листинге почему-то всё диаметрально наоборот. впрочем, глядя на элегантно забитую в никуда функцию экранирования понятно что я общаюсь с новичком и свой косяк с возвратом значений он еще только должен был обнаружить при дальнейшей отладке с привычными ему криками "не работает никак!"
     
  7. R2ndom

    R2ndom Новичок

    С нами с:
    21 янв 2015
    Сообщения:
    41
    Симпатии:
    0
    Если есть возможность дайте ссылку на форму и скрипт проверки "на лету". Третий день мучаюсь.
     
  8. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    если у вас аякс уже работает с перечислением массива то в чем проблема получать логин из субд?
    всё что нужно было написать это:

    Код (PHP):
    1. // трампампам каждый по-своему подключается к субд
    2. // пример буду писать через устаревшую либу ибо так быстрее
    3.  
    4. // экранируем ключ юрез_нейм и результат помещаем в переменную логин
    5. // сломал бы руки за то что ключ имеет одно имя а связанная переменная - другое
    6. $login = mysql_real_escape_string($_POST['user_name']);
    7.  
    8. // текст запроса на проверку существования логина
    9. $query = "SELECT 1 FROM `accounts`WHERE `login` = '{$login}'"; 
    10.  
    11. // выполняем запрос на проверку существования логина
    12. // вернет одну бессмысленную единицу если логин существует или лютое ничего если такого логина нет
    13. $result = mysql_query($query);
    14.  
    15. // тут можно обработать ошибочку но мне лениво за вас думать
    16.  
    17. // получили "результат"
    18. $known_login = mysql_fetch_assoc($result);
    19.  
    20. // если там строка с бессмысленной единицей то у нас тут будет массив. а массив логически истинная штука.
    21. // иначе у нас будет FALSE. а фолс логически ложная штука.
    22. // фолс же будет и при ошибках но если вам надо вы ошибки сами обработаете
    23. // пишем ноу если логин в базе есть или ес если нет.
    24. // я заранее поменял местами чтоб у вас лишних хлопот не возникло.
    25. echo (false !== $known_login 'no' : 'yes');
    26.  
    27. // конец сценария. 5 строк. тут комментариев больше чем кода.
    28. // новички такие новички. по три дня мучаются с тем чего не понимают...    
     
  9. R2ndom

    R2ndom Новичок

    С нами с:
    21 янв 2015
    Сообщения:
    41
    Симпатии:
    0
    Спасибо тебе, добрый человек.