Вроде бы всё правильно сделано, в базе данных всё норм, а всё равно выдаёт "проверьте правильность введённых данных" Код скрипта Код (Text): <?php if(isset($_POST['nick'])) if(isset($_POST['pass'])) { $nick = $_POST['nick']; $nick = stripslashes($nick); $nick = htmlspecialchars($nick); $nick = trim($nick); $nick = substr($nick, 0, 16); $password = $_POST['pass']; $password = stripslashes($password); $password = htmlspecialchars($password); $password = trim($password); $password = substr($password, 0, 16); require('./bd.php'); $nick = mysqli_real_escape_string($db, $nick); $query = mysqli_query($db, "SELECT `password`, `nick`, `id` FROM `players` WHERE `nick` = '$nick' LIMIT 1"); $result = mysqli_fetch_assoc($query); $crypt = SHA1($password.$nick); if ($result['password'] == $crypt) { echo 'ok'; $_SESSION['nick'] = $result['nick']; $_SESSION['pass'] = $result['pass']; setcookie('Nick', $nick,time() + 60 * 60 * 24 * 31 * 12); setcookie('Password', $crypt, time() + 60 * 60 * 24 * 31 * 12); exit(); } } ?> сайт viceserver.ru Логин Maxximizer пароль 123123 В чём может быть проблема?
http://phpfaq.ru/debug "Отладка и поиск ошибок в своем алгоритме." Всё остальное тоже можно почитать.
откуда знаешь? расскажи как ты это проверял. этого сообщения в приведенном коде нет. может быть ошибка там, где оно выдается? процитируй еще и тот кусок. stripslashes и htmlspecialchars здесь не нужны. записывать две куки вроде бы тоже незачем. а главное не видно как ты делаешь собственно авторизацию. то, что ты здесь показал это аутентификация.
После такой санации вообще не войдешь. Начитаются галиматьи и пишут хз что. Правила же простые: 1) если вы не выводите полученный текст - он может быть любым, даже таким <script>alert('I'm dunderhead')</script>. Как получили - так и записали. 2) если вы выводите полученный текст - он должен быть безопасным, и тогда надо санировать, например через htmlentities(); Запись в бд НЕ санируется, а просто готовится с учетом особенностей движка БД и свойств определенного поля. То есть все специальные символы которые engine понимает особо - надо закрыть от его внимания, и чтобы не было лишней возни с преобразованием типов и, чтобы не было воплей от движка, и чтобы всякие там кулцхаеры не лезли - строка заключается в кавычки, а числа не заключаются в кавычки. Если в поле где число попадет злобный текстовый запрос - движок разорется, вы его по Exception услышите и что надо юзеру скажете. Добавлено спустя 20 минут 5 секунд: Вот нашел Код (Text): $q = 'select * from `_users` inner join `_user_role` using(`user_role_id`) where (`_user_role`.`flag` & '.$flag.') and `_users`.`login` = "' . $_POST['login'] . '" and `_users`.`pass` = password("' . $_POST['pass'] . '");'; // поскипано if(!$r = $this->link->query($query, true)) return 0; Второй аргумент в этом методе - query($query, true) - обозначает что пойманную ошибку не надо выводить, а надо вернуть false если она произошла (а если не произошла, а просто нет такого юзера - то 0). Юзер должен ввести правильно свой логин-пароль, верно? - Значит если он ввел неправильно, или умышленно неправильно - должна произойти ошибка. Она должна произойти, иначе не поймешь правильно он ввел или неправильно. Так вот, а если я применю real_escape_string() то как узнаю что ввод был неправильный? Функция подготовит строку для БД, и получится что просто такого юзера нет в БД. То есть вместо идентификации ошибки синтаксиса я получу отсутствие ответа, то есть потеряю данные. Отсюда начинается та самая галиматься - перед подготовкой строки для БД начинают проверять правильная ли она, содержит ли, не содержит ли и все такое - чтобы не потерять эту самую информацию. Ну а особенные люди так вообще наворачивают на ввод хз что.