Обучение/Помощь новичкам | Регистрация
Тема закрыта by
Везувий
Причина: mb_strlen
Причина: mb_strlen
Вообщем такая проблема.
Решил я задать нудное количество символов для ника и пароля при регистрации, так как можно было регатся с пустым ником и без пароля.
Сделал так
Опишу пример (при минимальных "3" символах для логина я могу зарегистрироваться только указав 2, также при максимальных "20 символах я могу задать (кириллицей) только "10" а на "11" могу уже выдает что длина логина 3-20 символов.
Как я понял один русский символ считается за 2. В то время как на английском все работает как надо.
В может быть проблема?
Решил я задать нудное количество символов для ника и пароля при регистрации, так как можно было регатся с пустым ником и без пароля.
Сделал так
<?php
include('inc/head.php');
if(isset($_GET['ref'])){
$_SESSION['ref']=abs(intval($_GET['ref']));
reload('new.php');
}
echo '<img src=/img/logo.png width=100% style="margin-bottom: -3px;">';
echo '<div class="c center">Последнее поколение - <font color=white>у тебя остался последний шанс на жизнь!</font></div>';
echo '<div class="c center">';
if(isset($_GET['enter'])){
$ref=abs(intval($_SESSION['ref']));
$login=text($_POST['login']);
$pass=md5(text($_POST['password']));
$pass2=md5(text($_POST['password2']));
$sex=abs(intval($_POST['sex']));
if(!preg_match("#^([А-яA-z\-\_\ ])+$#ui", $_POST['login'])) msg('В нике присутствуют запрещенные символы');
elseif(preg_match("#[a-z]+#ui", $_POST['login']) && preg_match("#[а-я]+#ui", $_POST['login'])) msg('Разрешается использовать символы только русского или только английского алфавита');
elseif(preg_match("#(^\ )|(\ $)#ui", $_POST['login'])) msg('Запрещено использовать пробел в начале и конце ника');
elseif(strlen($_POST['login']) < 3 or strlen($_POST['login']) > 20) msg('Длина ника должна быть в пределах 3 - 20 символов');
elseif(strlen($_POST['password']) < 6 or strlen($_POST['password']) > 20) msg('Длина пароля должна быть в пределах 6 - 20 символов');
// elseif(strlen($_POST['login'])<4) msg('Длина ника 4-10 символов');
// elseif(strlen($_POST['login'])>10) msg('Длина ника превышает 10 символов');
// elseif(strlen($_POST['password'])<4) msg('Длина пароля 4-32 символа');
// elseif(strlen($_POST['password'])>32) msg('Длина пароля превышает 32 символа');
else{
if($pass!=$pass2) msg("Пароли не совпадают!");
else{
$loga=f("SELECT `id` FROM `user` WHERE `login`='$login'");
if($loga==true) msg('Такой логин уже занят другим игроком!');
else{
q("insert into `user` set `login`='$login',`pass`='$pass',`sex`='$sex',`ref`='$ref',`date_reg`='".time()."'");
if($ref==true) q("update `user` set `money`=`money`+'200' where `id`='$ref'");
$_SESSION['ref']=null;
$_SESSION['login']=$login;
$_SESSION['pass']=$pass;
setcookie('login', $login, time()+86400*365, '/');
setcookie('pass', $pass, time()+86400*365, '/');
reload('/game.php');
}
}
}
}
echo '<form action=?enter method=post>
<center><input type=text name=login class="test" placeholder="Придумай логин"/></center>
<center><input type=password name=password class="test" placeholder="Введите пароль"/></center>
<center><input type=password name=password2 class="test" placeholder="Повторите пароль"/></center>
Пол: <select name=sex>
<option value=1>Мужчина</option>
<option value=2>Женщина</option></select><br>
<center><input type=submit style=width:12em; class="test" value="Начать игру"/></center>
</div>';
echo '<a class=c href=/index.php>Вернуться назад</a>';
include('inc/foot.php');
?> но вот в чем проблема. На английских буквах все прекрасно работает а вот на кирилицуе нет! Опишу пример (при минимальных "3" символах для логина я могу зарегистрироваться только указав 2, также при максимальных "20 символах я могу задать (кириллицей) только "10" а на "11" могу уже выдает что длина логина 3-20 символов.
Как я понял один русский символ считается за 2. В то время как на английском все работает как надо.
В может быть проблема?
В чём может быть проблема?*
Ппц там ошибок. Извините))
Ппц там ошибок. Извините))
Ninegram , mb_strlen
Ninegram , заменить strlen на mb_strlen, очевидно же.
monobogdan , блин... Точно! Спасибо)