Ещё раз написал скрипт регистрации...
Оцените,скажите что можно улучшить\заменить\оптимизировать.
Также хочу услышать замечания по поводу безопасности
PHP |
<? if($_POST['action']=="register") { # Приём данных из формы $login = $_POST['login']; $passw = $_POST['password']; $passw2 = $_POST['password2']; $nick = $_POST['nickname']; $ip = $_POST['ip']; # Проверка на заполнение полей if(empty($login)) { echo $reg_empty_login.'<br>'; } elseif(empty($passw)) { echo $reg_empty_passw.'<br>'; } elseif(empty($passw2)) { echo $reg_empty_passw2.'<br>'; } elseif(empty($nick)) { echo $reg_empty_nick.'<br>'; } # Проверка на количество символов elseif(strlen($login) < 4) { echo $reg_strlen_login.'<br>'; } elseif(strlen($passw) < 4) { echo $reg_strlen_passw.'<br>'; } # Проверка на совпадание введенных паролей elseif($passw != $passw2) { echo $reg_passw_mismatch.'<br>'; } # Проверка на вводимые символы elseif(!preg_match("/^[A-Za-z0-9]+$/",$login)) { echo $reg_symb_login.'<br>'; } elseif(!preg_match("/^[A-Za-z0-9]+$/",$passw)) { echo $reg_symb_passw.'<br>'; } # Проверка существует ли пользователь $check_query = mysql_query("SELECT `login` FROM `users` WHERE `login` = '$login'"); $check_result = mysql_num_rows($check_query); if ($check_result > 0) { echo $reg_login_exists.'<br>'; } # Проверка существует ли IP $check_query2 = mysql_query("SELECT `userip` FROM `users` WHERE `userip` = '$ip'"); $check_result2 = mysql_num_rows($check_query2); if ($check_result2 > 0) { echo $reg_ip_exists.'<br>'; } # Запись информации в базу else { # Шифрование пароля $password = md5($passw); # Запрос к базе mysql_query("INSERT INTO `users` (login,password,nickname,userip) VALUES ('$login','$password','$nick','$ip')") or die(mysql_error()); echo '<center>'.$reg_success.'</center>'; echo '<meta http-equiv="refresh" content="5; URL=/crl/">'; } } else { ?> <div align="center"> <form ACTION="" METHOD="POST"> <table border="0" width="50%" class="blockhead2"> <tr> <td align="center"><? echo $register; ?></td> </tr> </table> <table border="0" width="50%" class="blocktable"> <tr> <td width="40%" bgcolor="white"><? echo $login; ?></td> <td width="60%" bgcolor="white"><input type="login" name="login" size="36"></td> </tr> <tr> <td width="40%" bgcolor="white"><? echo $password; ?></td> <td width="60%" bgcolor="white"><input type="password" name="password" size="36"></td> </tr> <tr> <td width="40%" bgcolor="white"><? echo $password2; ?></td> <td width="60%" bgcolor="white"><input type="password" name="password2" size="36"></td> </tr> <tr> <td width="40%" bgcolor="white"><? echo $nickname; ?></td> <td width="60%" bgcolor="white"><input type="text" name="nickname" size="36"></td> </tr> <tr> <td colspan="2" bgcolor="white" align="center"><input type="submit" value="<? echo $reg; ?>"></td> </tr> </table> <input type="hidden" name="ip" value="<? echo $_SERVER['REMOTE_ADDR']; ?>"> <input type="hidden" name="action" value="register"> </form> </div> <? }
|
Интересует:
1. как можно вывести все ошибки(например ошибку длинны пароля и запрещенных символов в логине) ввиде списка <li></li>
2. можно ли сделать так чтоб при использовании die(),exit() неломался дизайн сайта, а именно :
имеются 3 блока "L" "C" "R" , При использовании die() в блоке "C" неотображается блок R
Спустя 1 час, 7 минут, 42 секунды (18.09.2009 - 04:57) Gabriel написал(а):
PHP |
$array_error[] = "Error"; |
выводиш
PHP |
<ul> <?php echo implode('<li>', $array_error) .'</li>'; </ul> |
ты ето имел в виду?
Спустя 42 минуты, 26 секунд (18.09.2009 - 05:39) DeeKeiD написал(а):
Цитата (Gabriel @ 18.09.2009 - 01:57) |
PHP | $array_error[] = "Error"; |
выводиш
PHP | <ul> <?php echo implode('<li>', $array_error) .'</li>'; </ul> |
ты ето имел в виду?
|
Чтото типо этого, только у меня несколько языков (ru.php,en.php и т.д.) и в них прописанно
PHP |
$reg_error_1 = "Error 1"; $reg_error_2 = "Error 2"; |
Поэтому array тут неподходит =(
Спустя 1 час, 46 минут, 32 секунды (18.09.2009 - 07:26) twin написал(а):
Тут посмотри, чтоб не повторять в сотый раз прописные истины.
Спустя 2 часа, 37 минут, 35 секунд (18.09.2009 - 10:04) Gram написал(а):
нигде перед запросом не вижу mysql_real_escape_string, возможна sql инъекция,
пароль качественный не введешь, придется довольствоваться простым,
при неудачной попытке регистрации, данные в полях сбрасываются.
>можно ли сделать так чтоб, не ломался дизайн сайта?
Воспользуйтесь для этого сессионными переменными, вместо $array_error[] = "Error";
Спустя 2 часа, 7 минут, 15 секунд (18.09.2009 - 12:11) Gabriel написал(а):
twin знаешже откудо скопипастил
_____________
Бесполезно просить пощады у цезаря
Фатальная ошибка : Звонок в неопределенную функцию ©