Всем доброго времени суток! Прошу помощи в коде. Дело в том, что после проверки всех данных, хоть, например, и длинна пароля/логина не соответствует условию, регистрация все-равно проходит. А пользователь видит сообщение об ошибке. Подскажите пожалуйста, как правильно сделать, чтоб при невыполнении условия - регистрация не проходила. Заранее спасибо! Код (Text): <?php session_start(); ?> <?php require_once("includes/connection.php"); ?> <?php include("includes/header.php"); ?> <?php if(isset($_SESSION["session_username"])){ // вывод "Session is set"; // в целях проверки echo '<script type="text/javascript"> window.location = "intropage.php" </script>'; } if(isset($_POST["register"])){ if(!empty($_POST['full_name']) && !empty($_POST['email']) && !empty($_POST['username']) && !empty($_POST['password'])) { $full_name=$_POST['full_name']; $email=$_POST['email']; $username=$_POST['username']; $password=$_POST['password']; $query=mysql_query("SELECT * FROM usertbl WHERE username='".$username."'"); $numrows=mysql_num_rows($query); if($numrows==0) { $sql="INSERT INTO usertbl (full_name, email, username,password) VALUES('$full_name','$email', '$username', '$password')"; $result=mysql_query($sql); if($result){ $message = "Вы были успешно зарегистрированы! Теперь необходимо войти."; } else { $message = "Ошибка при отправке регистрационных данных"; } }else { $message = "Этот логин уже используется. Пожалуйста, выберите другой."; } } else { $message = "Все поля являются обязательными к заполнению!"; } if (strlen($password) < 6){ $message = "Введенный Вами <b>пароль слишком короткий!</b> <br> Необходимо ввести не менее 6-ти символов."; end; } if (strlen($username) < 4){ $message = "Введенное Вами <b>имя пользователя (логин) слишком короткое!</b> <br> Необходимо ввести не менее 4-х символов."; end; } } ?> <?php if (!empty($message)) {echo "<p class=\"error\">" . $message . "</p>";} ?> <div class="container mregister"> <div id="login"> <h1>Регистрация</h1> <form action="register.php" id="registerform" method="post"name="registerform"> <p><label for="user_login">Полное имя<br> <input class="input" id="full_name" name="full_name"size="32" type="text" value=""></label></p> <p><label for="user_pass">E-mail<br> <input class="input" id="email" name="email" size="32"type="email" value=""></label></p> <p><label for="user_pass">Имя пользователя<br> <input class="input" id="username" name="username"size="20" type="text" value=""></label></p> <p><label for="user_pass">Пароль<br> <input class="input" id="password" name="password"size="32" type="password" value=""></label></p> <p class="submit"><input class="button" id="register" name= "register" type="submit" value="Зарегистрироваться"></p> <p class="regtext">Уже зарегистрированы? <a href= "login.php">Введите имя пользователя</a>!</p> </form> </div> </div> <?php include("includes/footer.php"); ?>
Зачем заставлять пользователя использовать 6 символов минимум, одного хватит, и можно с помощью empty проверить. Условие strlen($password) < 6 добавь в if(isset($_POST["register"]))
мой пароль, допустим, á•┴, три символа. Какова вероятность, что он будет хоть в одном словаре или набрутится перебором? Не надо ставить минимальную и максимальные длины паролей. Пусть пользователь сам решает. Для намеков ему, можно рядышком поставить боксик, в который будет выводиться инфа с рекомендациями, типа "слабый пароль", "короткий пароль", а пользователь пусть сам решает, что и как. Его пароли - его дело. Твое дело - эти пароли просолить и запечь, чтобы никто не смог восстановить из дампа.
Прослезился. Не просто безопаснее. Если вы будете хешировать 6-ти символьные пароли и я получу доступ к вашей базе ну и соответственно ... , то я получу все ваши пароли за день, чтобы вам был понятен смысл длинных паролей. Соль, причем не просто соль, а индивидуальная для каждого юзера даст небольшой плюсик но опять же легко вскрываема (в особенности для конкретного пользователя). Длинна пароля прямо пропорциональна скорости их взлома. Поэтому рекомендуется хранить хеши солёных паролей из 32 символов. Как вы эти 32 символа получаете уже ваше дело. Об этом вообще лучше не спрашивать а придумать свой вариант. Чем он уникальнее тем дольше хеши будут искаться по радужным таблицам. Истина в том, что если система должна быть максимально безопасной, то авторизация не должна быть единственным звеном защиты. Можно использовать подтверждение авторизации через SMS и т.п. Ахинею в виде 10 раз md5 5 раз sha1 только не используйте, никакого выигрыша это вам не даст. Бородатый баян, но до сих пор наблюдаю это в коде нубов... .
по топику: в конкретном данном случаи попробуй вместо end; поставить die(); или exit(); end не останавливает выполнение кода и ifы с проверкой на количество символов выше поставить
end это вообще из другой оперы А что ты можешь вообще сказать? ты или объясни суть своего мистического решения, или пиздабол viewtopic.php?p=414945#p414945
Большинство людей используют один-два пароля на все. И это его личное дело. И длина пароля его личное дело. А когда какой-то очередной вшивый недосервис заставляет пользователя выдумывать новый пароль, это, с вероятностью 95% значит, что пользователь либо передумает регаться, либо просто никогда не вернется больше. Либо, если вернется, просто не вспомнит пароль, будет восстанавливать, сгенерит опять что-то "по требованию". И потом цикл повторится. ИМХО, единственные порталы, которые имеют право качать права в этом плане - это платежные сервисы или системы, так или иначе, завязанные на реальных деньгах и банковских операциях. Задача разработчика - не аккаунт пользователя уберечь от вскрытия, это вторично, а защитить почту и остальные аккаунты, где пользователь сидит, если будет слита база. Потому что если ты хранишь пароль открыто, то, по закону 95%, ты кому-то отдал в открытую пароль от остальных сервисов, где юзер бывает. Это пробивается по гуглу и вуаля. Так что главное пользователя не подставить со своей стороны. Если же пользователь дурак - пусть остается наедине с этим фактом, его право. Никаких принуждений. Максимум - рекомендации.