За последние 24 часа нас посетили 73568 программистов и 3054 робота. Сейчас ищут 1455 программистов ...

Автоавторизация

Тема в разделе "PHP для новичков", создана пользователем newkker.tt.pureacleo, 8 авг 2018.

  1. newkker.tt.pureacleo

    newkker.tt.pureacleo Новичок

    С нами с:
    23 июн 2018
    Сообщения:
    65
    Симпатии:
    0
    Всем привет, это снова мультики вас беспокоят.
    Вопрос частично по php, частично по javascript.
    Суть такая:
    Человек вводит имя.
    А программа проверяет, есть ли такое имя в базе данных, и выводит на экран либо что вы сейчас входите, либо регистрируетесь. Дальше находятся строки с паролем и другое, ну и реультат всей этой формы зависит от нашей первой проверки.

    Мой первый тупик в этом деле - чтобы скрипт php срабатывал автоматически при изменении имени.

    Подскажите, как сделать.
     
  2. EndoCrinolog

    EndoCrinolog Активный пользователь

    С нами с:
    4 фев 2012
    Сообщения:
    205
    Симпатии:
    1
    Адрес:
    Тольятти
    А если два человека используют одинаковое имя?
     
  3. newkker.tt.pureacleo

    newkker.tt.pureacleo Новичок

    С нами с:
    23 июн 2018
    Сообщения:
    65
    Симпатии:
    0
    Низя
     
  4. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    jQuery юзаешь? См. $.post, $.get, $.ajax. Можно и без онного. См. window.fetch или XMLHttpRequest (если нужно чтоб в устаревших браузерах работало).
     
  5. villiwalla

    villiwalla Активный пользователь

    С нами с:
    14 дек 2016
    Сообщения:
    471
    Симпатии:
    70
    Событие change или input
     
  6. newkker.tt.pureacleo

    newkker.tt.pureacleo Новичок

    С нами с:
    23 июн 2018
    Сообщения:
    65
    Симпатии:
    0
    То-есть лучше попробывать сделать через форму в форме без кнокпи, чем пересылать переменную из js в php или ещё что-то безформенное?
     
    #6 newkker.tt.pureacleo, 8 авг 2018
    Последнее редактирование: 8 авг 2018
  7. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Не понял, ты о чём? JS выполняется в браузере, php на сервере, иначе как ajax-ом нельзя никак передать что-то из js в php без перезагрузки страницы
     
  8. newkker.tt.pureacleo

    newkker.tt.pureacleo Новичок

    С нами с:
    23 июн 2018
    Сообщения:
    65
    Симпатии:
    0
    Быстренько нагуглил такое: this.form.submit();. Думаю, поможет.
     
  9. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Ну оно перезагрузит страницу, как если нажать кнопку "Отправить".
     
  10. newkker.tt.pureacleo

    newkker.tt.pureacleo Новичок

    С нами с:
    23 июн 2018
    Сообщения:
    65
    Симпатии:
    0
  11. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Это похоже на правду. Только в реальном проекте таким кодом убивается сервер. У меня, к примеру, скорость набора высокая относительно, а тут после каждого нажатия клавиши отправляется сообщение на сервер.
    --- Добавлено ---
    Но как пример ajax-запроса сойдёт, как пример реального живого поиска - нет.
     
  12. villiwalla

    villiwalla Активный пользователь

    С нами с:
    14 дек 2016
    Сообщения:
    471
    Симпатии:
    70
    Можно выстовить тайм-аут и ограничить длинную получаемой строки
    --- Добавлено ---
    Ну ещё можно ws
     
  13. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.211
    Симпатии:
    186
    @mkramer если не ajax, то что?
     
  14. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    @Dimon2x, живой поиск делается ajax-ом, но по таймауту, если, к примеру, чел на секунду задумался. А если он быстро набирает, то лишние таймауты надо очищать. Иначе сервер будет убиваться. Т.е. по отпусканию клавиши ставишь таймаут, который выполнит запрос, но если следующая клавиша нажата до того, как таймаут истечёт, старый таймаут очищаешь, ставишь новый
    --- Добавлено ---
    Ну да, таймаут, но там его нету.
     
  15. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.211
    Симпатии:
    186
  16. newkker.tt.pureacleo

    newkker.tt.pureacleo Новичок

    С нами с:
    23 июн 2018
    Сообщения:
    65
    Симпатии:
    0
    Код (Text):
    1. <?php
    2. $servername = "localhost";
    3. $username = "*******";
    4. $password = "********";
    5. $database = "*********";
    6.  
    7. $name = htmlspecialchars($_GET["name"]);
    8.  
    9. $conn = mysqli_connect($servername, $username, $password, $database) or die("Коротше, помилка! " .mysqli_error($conn));
    10. $query = "SELECT UName FROM users WHERE UName = '$name'";
    11. $result = mysqli_query ($conn, $query);
    12.  
    13. if( $name == ''){
    14.       exit;
    15.    }
    16.  
    17. if(mysqli_num_rows($query) > 0){
    18.    $sql = mysql_fetch_array($query);
    19.    do{
    20.    echo "User with this name has written posts yet. Follow further to prove us that it was you.";
    21.    }while($sql = mysql_fetch_array($query));
    22. }else{
    23. echo "User with this name has not written posts yet. Follow further to create this user.";
    24. }
    25. ?>

    Notice: Undefined index: name in /storage/ssd1/213/5571213/public_html/forlogin.php on line 7
     
  17. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.211
    Симпатии:
    186
    Сначала надо проверять, есть ли GET параметр name и только потом его записывать в переменную
     
  18. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    Код (Javascript):
    1. var toId;
    2. function goAjax(){
    3. clearTimeOut(toId);
    4. //  Тут делаешь свой запрос с выводом и все эти дела
    5. }
    6.  
    7. toId = setTimeOut(goAjax, 1000);
     
  19. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Ну там же другой поиск :) По кнопочке, а не по живому вводу. Поиск, как поиск. Как любят в Laravel, зависимость на какой-то внешний сайт...

    @newkker.tt.pureacleo, ты реши, какое ты расширение используешь, устаревшее mysql или новое mysqli, чтож ты одновременно оба лепишь...
    Эх, никогда новички не читают, когда нужна htmlspecialchars, а когда mysqli_escape_string

    Покажи, что у тебя в JS в итоге.
     
  20. villiwalla

    villiwalla Активный пользователь

    С нами с:
    14 дек 2016
    Сообщения:
    471
    Симпатии:
    70
    Так он из поиска копипастит и пытается запустить это дело, потом сюда топает
     
  21. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    я не правильно написал. Вот это должно работать:
    Код (Javascript):
    1. var toId;
    2. function goAjax(){
    3.   alert('AJAX');
    4. }
    5. document.querySelector('#input').onkeyup = function(){
    6.   clearTimeout(toId);
    7.   toId = setTimeout(goAjax, 1000);
    8. }
     
  22. villiwalla

    villiwalla Активный пользователь

    С нами с:
    14 дек 2016
    Сообщения:
    471
    Симпатии:
    70
    Можно ещё сделать ограничение на минимальное кол-во символов для поиска
    Код (Javascript):
    1. if(this.value.length >= 3) {
    2.     clearTimeout(toId);
    3.     toId = setTimeout(goAjax, 1000);
    4.   }
     
    TeslaFeo нравится это.
  23. newkker.tt.pureacleo

    newkker.tt.pureacleo Новичок

    С нами с:
    23 июн 2018
    Сообщения:
    65
    Симпатии:
    0
    Всё отлично, но функция goAjax() иногда не вызывается.
     
  24. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    В том и смысл таймаута и его очистки. Чтоб не убить сервер этим ajax-ом :) Я же описал, какую проблему это дело пытается решить. Если человек набирает медленно, то с каждой клавишей дёргать ajax не страшно. А я вот набираю быстро относительно, а есть профессиональные машинистки, которые набирают реально очень быстро. И получается, что, к примеру, набирает она со скоростью 200 символов в минуту - и вот уже 200 запросов. Причём, если это ajax-поиск, то по мере уточнения, старые результаты становятся неактуальными, т.е. мы не только дрючим сервер, а ещё и пользы не получаем.
     
  25. newkker.tt.pureacleo

    newkker.tt.pureacleo Новичок

    С нами с:
    23 июн 2018
    Сообщения:
    65
    Симпатии:
    0
    Так как это обойти? У меня не совсем поиск, у меня выводит типо "вход" или "регистрация" и соответствующие поля формы.