Добрый день. Есть форма авторизации Код (Text): <input name="login" type="text" size="20" maxlength="35" id="username" value="" > <span id="msgbox" style="display:none"></span> На которой происходит проверка доступности логина для регистрации через файл user_availability.php с помощью ajax Код (Text): <?php $existing_users=array('roshan','mike','jason'); $user_name=$_POST['user_name']; if (in_array($user_name, $existing_users)) { echo "no"; } else { echo "yes"; } ?> Проверка логинов из массива existing_users проходит без проблем. Подскажите пожалуйста как сделать проверку из бд mysql? Таблица accounts, столбик login.
select 1 from `users` where `login` = '{$_POST['user_name']}' если есть строки в результате такого запроса - логин занят экранирование специально оставлено за кадром
бывает. этим комментарием автор как бы намекает на то что "не получается" это слишком абстрактная формулировка которая может включать в себя и рукожопость топикстартера и его низкий уровень профессиональных знаний и возможные логические ошибки кода и возможные ошибки при выполнении кода. при этом он автор явно дает топикстартеру понять что телепатов на форуме нет и если он хочет получить какую-то помощь то должен избежать пустых комментариев типа "не получается" а подробно расписывать исходный код, предположительную логику, актуальный результат и предположения о неудачах. Добавлено спустя 4 минуты 39 секунд: я всё же включу режим телепата. в заявке написано: а я написал: и топикстартер схавал как есть. только я почему-то писал комментарий не видя перед собой исходный, а жать "назад" было лениво. а топикстартер мог скопировать как есть и теперь у него не получается потому что таблицы юзерс у него нет. равно как и смекалки заменить моё юзерс на своё экаунтс. Добавлено спустя 2 минуты 45 секунд: а еще возможно топикстартер не знает какими функциями и как выполнить и обработать запрос к субд. к огромному сожалению комментарий Не получается не дает реальной картины. может топикстартер на листке бумаги пишет и пхп не выполняет этот код?
Очень рад что Вы ради меня сочинили целую проблему из своих предположений. Код (Text): $mysqli = new mysqli("localhost", "my_user", "my_password", "world"); if (mysqli_connect_errno()) { printf("Connect failed: %s\n", mysqli_connect_error()); exit(); } $sql = "select uname from accounts where uname=$mysqli->real_escape_string($_POST['user_name'])"; $result = $mysqli->query($sql); if($result->num_rows>0){ echo "Yes"; } else{ echo "no"; } Ругается на любой ввод
ну всё правильно ругается. никогда не видел такого кода. где можно пример увидеть? я сам напишу автору кода в чем он не прав. попробуйте для начала без экранирования. у вас пока очень туго с алгоритмом и тему нужно было создавать в новичках. ваш навык еще проявляется вот в каком моменте: в первом листинге если есть логин - вернется ноу, а если нет - ес. во втором листинге почему-то всё диаметрально наоборот. впрочем, глядя на элегантно забитую в никуда функцию экранирования понятно что я общаюсь с новичком и свой косяк с возвратом значений он еще только должен был обнаружить при дальнейшей отладке с привычными ему криками "не работает никак!"
если у вас аякс уже работает с перечислением массива то в чем проблема получать логин из субд? всё что нужно было написать это: Код (PHP): // трампампам каждый по-своему подключается к субд // пример буду писать через устаревшую либу ибо так быстрее // экранируем ключ юрез_нейм и результат помещаем в переменную логин // сломал бы руки за то что ключ имеет одно имя а связанная переменная - другое $login = mysql_real_escape_string($_POST['user_name']); // текст запроса на проверку существования логина $query = "SELECT 1 FROM `accounts`WHERE `login` = '{$login}'"; // выполняем запрос на проверку существования логина // вернет одну бессмысленную единицу если логин существует или лютое ничего если такого логина нет $result = mysql_query($query); // тут можно обработать ошибочку но мне лениво за вас думать // получили "результат" $known_login = mysql_fetch_assoc($result); // если там строка с бессмысленной единицей то у нас тут будет массив. а массив логически истинная штука. // иначе у нас будет FALSE. а фолс логически ложная штука. // фолс же будет и при ошибках но если вам надо вы ошибки сами обработаете // пишем ноу если логин в базе есть или ес если нет. // я заранее поменял местами чтоб у вас лишних хлопот не возникло. echo (false !== $known_login ? 'no' : 'yes'); // конец сценария. 5 строк. тут комментариев больше чем кода. // новички такие новички. по три дня мучаются с тем чего не понимают...