так тогда мой вопрос принадлежит этому "SELECT * FROM `users` WHERE `login` = '$login'" ? `login` = '$login ?
Что я и говорил в самом начале, бинго А вот тут уже тебе надо почитать про экранирование данных и SQL-инъекции. Иначе, если использовать такие запросы, можно будет очень легко тебя взломать.
Код (PHP): <?php define("CMD_SQLITE", 666); require ("{$_SERVER['DOCUMENT_ROOT']}/include/core.php"); if ($_POST['login'] && mb_strlen(iconv("UTF-8", "UTF-8", $_POST['login'])) <= 10 && mb_strlen(iconv("UTF-8", "UTF-8", $_POST['login'])) >= 3 && $_POST['password'] && mb_strlen(iconv("UTF-8", "UTF-8", $_POST['password'])) <= 10 && mb_strlen(iconv("UTF-8", "UTF-8", $_POST['password'])) >= 3 && strtoupper($_POST['password']) != strtoupper($_POST['login']) && isset($_POST['submit']) && preg_match(functions::preg_sim(2), $_POST['login'].$_POST['password']) == 0) { $res = SQL::Q("SELECT * FROM twwk_users WHERE upper(login) = upper('".$_POST['login']."') AND password = '".md5(strtoupper($_POST['password']))."'")->fetch(SQLITE_ASSOC); if ($res[id]) { SQL::Q("DELETE FROM twwk_ban_ip WHERE date_unban < '".time()."'"); SQL::Q("UPDATE twwk_users SET visit = '".time()."' WHERE id = '".$res[id]."'"); $user_ban = SQL::Q("SELECT * FROM twwk_ban_ip WHERE ip = '".cmdCore::$ip."' OR name = '".$res[name]."' AND date_unban > '".time()."'")->fetch(SQLITE_ASSOC); if ($user_ban[name]) { CONTENT::getError('<span style="color:red;">Уважаемый '.(($user_ban[name] == $name)?$user_ban[name].', вы были забанены':$res[name].', ваш аккаунт '.$user_ban[name].' был заблокирован').' за: '.$user_ban[messages].', до: '.date('d F Y \в H:i:s', $user_ban[date_unban]).', с уважением администрация сайта!</span>'); } else { SQL::Q("DELETE FROM twwk_remember WHERE num_user = '".$res[id]."'"); cmdCore::session($res[id]); if (array_key_exists ('mem', $_POST)) { $hash = md5($login.$passw.cmdCore::$ip); SQL::Q("INSERT INTO twwk_remember('num_user', 'hash', 'time') VALUES ('".$res[id]."', '$hash', '".(time() + 3600*24*30)."')"); setcookie('REM', $hash, time() + 3600*24*30); } header ("Location: http://". SITE_URL); } } else { header ("Location: http://". SITE_URL ."/login.php?e=1&login=".$_POST['login']); } } else { CONTENT::CONTAINER('<b>Авторизация</b>',FALSE, '<form action="login.php" method="POST">'."\n". ((preg_match(functions::preg_sim(2), $_POST['login'].$_POST['password']) == 1)? '<span style="color:red;">Не вводите спец символы в поле ввода.</span><br>':'')."\n". (((mb_strlen(iconv("UTF-8", "UTF-8", $_POST['login'])) > 10 || mb_strlen(iconv("UTF-8", "UTF-8", $_POST['login'])) < 3 || mb_strlen(iconv("UTF-8", "UTF-8", $_POST['password'])) > 10 || mb_strlen(iconv("UTF-8", "UTF-8", $_POST['login'])) < 3) && $_POST['submit'])? '<span style="color:red;">Вводите данные не менее 3 и не более 10 латинских символов!</span><br>':'')."\n". ((isset($_GET['e']))? '<span style="color:red;">Вы ввели неправильный логин или пароль!</span><br>':'')."\n". '<table border="0" cellpadding="0" cellspacing="0">'."\n". '<tr><td width="130">Логин:</td><td><input type="text" class="text" name="login" size="42" maxlength="10" value="'.substr($_REQUEST['login'], 0, 10).'">'."\n". (((strtoupper($_POST['login']) == strtoupper($_POST['password'])) && $_POST['login'] && $_POST['submit'])? '<br><span style="color:red;">Логин не должен совпадать с паролем!</span>':'')."\n". ((empty($_POST['login']) && $_POST['submit'])? '<br><span style="color:red;">Вы забыли ввести логин</span>':'')."\n". '</td></tr>'."\n". '<tr><td width="130">Пароль:</td><td><input type="password" class="text" name="password" size="42" maxlength="10">'."\n". ((empty($_POST['password']) && $_POST['submit'])? '<br><span style="color:red;">Вы забыли ввести пароль</span>':'')."\n". '</td></tr>'."\n". '<tr><td width="130"><input type="checkbox" name="mem" value="1" checked="checked"> Запомнить меня</td></tr>'."\n". '<tr><td width="130"><input type="submit" class="button" name="submit" value="Вход"></td></tr>'."\n". '<tr>'."\n". '<td width="130"><input type="button" class="button" value="Забыли пароль?" onclick="location.href=\'./users/forgot.php?login='.substr($_REQUEST['login'], 0, 10).'\'"></td>'."\n". '<td><span style="color: #00FF00;">'.substr($_REQUEST['login'], 0, 20).'</span></td>'."\n". '</tr>'."\n". '</table>'."\n". '</form>'."\n" ); } require (DIR_SYSTEM .'views/template.php');
Верхнее ограничение на длину пароля в 10 символов - сакс. У меня 20-символьные пароли, что мне теперь делать?
а если ограничение написать в создание таблици ? Добавлено спустя 2 минуты 28 секунд: и еше как делать чтоб после входа исчезалось форма входа а то оно останится а верху работает if
Фигасе очевидно. а мне вот не очевидно. сайту не надо соваться в мою голову со своим уставом. у меня пароль 20 символов и я его запомнил легко. зачем ограничивать? =)
Обернуть в проверку наличия самого $_POST, мол, если $_POST пустой, то, стало быть, код, который на нем завязан, не должен будет работать.
Manvel, введён ли пароль и логин надо проверять до того, как делать запрос в базу данных. После запроса надо проверить вернул ли он что-нибудь, и сравнить пароли. Может вам поискать сайты и книги про php на вашем родном языке? Если вы так пишите, то с чтением тоже проблемы. Вообще, странно. Много работаю с заказчиками из Азербайджана, и у них нет никаких проблем с русским языком...
ой, зря ты это сказал! Добавлено спустя 6 минут 32 секунды: надо хранить не пароль, а хеш от пароля, а он не зависит от длины пароля! хеш гарантированно не больше небольшого N (зависит от конкретной функции) Добавлено спустя 2 минуты 28 секунд: изменить алгоритм. тебе тут сто раз сказали: у тебя странный алгоритм. попробуй начать не с программы, а с описания простыми словами: "если пользователь еще не вошел, показать форму. если данные отправлены, то выполнить проверку…" и т.д. надо сначала понять, потом делать.