Всем привет, это снова мультики вас беспокоят. Вопрос частично по php, частично по javascript. Суть такая: Человек вводит имя. А программа проверяет, есть ли такое имя в базе данных, и выводит на экран либо что вы сейчас входите, либо регистрируетесь. Дальше находятся строки с паролем и другое, ну и реультат всей этой формы зависит от нашей первой проверки. Мой первый тупик в этом деле - чтобы скрипт php срабатывал автоматически при изменении имени. Подскажите, как сделать.
jQuery юзаешь? См. $.post, $.get, $.ajax. Можно и без онного. См. window.fetch или XMLHttpRequest (если нужно чтоб в устаревших браузерах работало).
То-есть лучше попробывать сделать через форму в форме без кнокпи, чем пересылать переменную из js в php или ещё что-то безформенное?
Не понял, ты о чём? JS выполняется в браузере, php на сервере, иначе как ajax-ом нельзя никак передать что-то из js в php без перезагрузки страницы
Это похоже на правду. Только в реальном проекте таким кодом убивается сервер. У меня, к примеру, скорость набора высокая относительно, а тут после каждого нажатия клавиши отправляется сообщение на сервер. --- Добавлено --- Но как пример ajax-запроса сойдёт, как пример реального живого поиска - нет.
@Dimon2x, живой поиск делается ajax-ом, но по таймауту, если, к примеру, чел на секунду задумался. А если он быстро набирает, то лишние таймауты надо очищать. Иначе сервер будет убиваться. Т.е. по отпусканию клавиши ставишь таймаут, который выполнит запрос, но если следующая клавиша нажата до того, как таймаут истечёт, старый таймаут очищаешь, ставишь новый --- Добавлено --- Ну да, таймаут, но там его нету.
@mkramer а в этой статье всё продумано? http://laravel-news.ru/blog/tutorials/build-search-functionality-with-laravel-scout-and-vue-js
Код (Text): <?php $servername = "localhost"; $username = "*******"; $password = "********"; $database = "*********"; $name = htmlspecialchars($_GET["name"]); $conn = mysqli_connect($servername, $username, $password, $database) or die("Коротше, помилка! " .mysqli_error($conn)); $query = "SELECT UName FROM users WHERE UName = '$name'"; $result = mysqli_query ($conn, $query); if( $name == ''){ exit; } if(mysqli_num_rows($query) > 0){ $sql = mysql_fetch_array($query); do{ echo "User with this name has written posts yet. Follow further to prove us that it was you."; }while($sql = mysql_fetch_array($query)); }else{ echo "User with this name has not written posts yet. Follow further to create this user."; } ?> Notice: Undefined index: name in /storage/ssd1/213/5571213/public_html/forlogin.php on line 7
Код (Javascript): var toId; function goAjax(){ clearTimeOut(toId); // Тут делаешь свой запрос с выводом и все эти дела } toId = setTimeOut(goAjax, 1000);
Ну там же другой поиск По кнопочке, а не по живому вводу. Поиск, как поиск. Как любят в Laravel, зависимость на какой-то внешний сайт... @newkker.tt.pureacleo, ты реши, какое ты расширение используешь, устаревшее mysql или новое mysqli, чтож ты одновременно оба лепишь... Эх, никогда новички не читают, когда нужна htmlspecialchars, а когда mysqli_escape_string Покажи, что у тебя в JS в итоге.
я не правильно написал. Вот это должно работать: Код (Javascript): var toId; function goAjax(){ alert('AJAX'); } document.querySelector('#input').onkeyup = function(){ clearTimeout(toId); toId = setTimeout(goAjax, 1000); }
Можно ещё сделать ограничение на минимальное кол-во символов для поиска Код (Javascript): if(this.value.length >= 3) { clearTimeout(toId); toId = setTimeout(goAjax, 1000); }
В том и смысл таймаута и его очистки. Чтоб не убить сервер этим ajax-ом Я же описал, какую проблему это дело пытается решить. Если человек набирает медленно, то с каждой клавишей дёргать ajax не страшно. А я вот набираю быстро относительно, а есть профессиональные машинистки, которые набирают реально очень быстро. И получается, что, к примеру, набирает она со скоростью 200 символов в минуту - и вот уже 200 запросов. Причём, если это ajax-поиск, то по мере уточнения, старые результаты становятся неактуальными, т.е. мы не только дрючим сервер, а ещё и пользы не получаем.
Так как это обойти? У меня не совсем поиск, у меня выводит типо "вход" или "регистрация" и соответствующие поля формы.