За последние 24 часа нас посетили 54347 программистов и 1776 роботов. Сейчас ищут 1009 программистов ...

ни ка не пойму! посмотрите!

Тема в разделе "PHP и базы данных", создана пользователем kolya7774, 1 окт 2011.

  1. kolya7774

    kolya7774 Активный пользователь

    С нами с:
    3 мар 2011
    Сообщения:
    98
    Симпатии:
    0
    PHP:
    1. //Если нажата кнопка registration (зарегистрироваться)
    2. if (isset($registration))
    3. {   //Если поле "Ваше имя" правильно заполненное
    4.     if (isset($user) && !empty($user) && preg_match("/^[а-яА-Яa-zA-Z0-9]{3,50}$/",$user))
    5.     {
    6.         trim($user);
    7.         $user = stripslashes($user);
    8.         $user = htmlspecialchars($user);
    9.         $user = addslashes($user);
    10.         $user = mysql_real_escape_string($user);
    11.         }
    12.         else {
    13.             if (strlen($user)== "0" || empty($user)) {$error1 = "Заполните поле: \"Ваше имя\".";}
    14.             if (!preg_match("/^[а-яА-Яa-zA-Z0-9]{3,50}$/",$user)) {$error1 = "Ваше имя должно быть не меньше 3 символов (букв или цифр).";}
    15.             }
    Весь прикол заключаэться втом, что когда ввожу 2 буквы на анг. выводит ошибку "Ваше имя должно быть не меньше 3 символов (букв или цифр)", но когда начина вводить русские буквы, например "ва" и т.д. ошибки почему то нет, то есть это :
    PHP:
    1. !preg_match("/^[а-яА-Яa-zA-Z0-9]{3,50}$/",$user)
    не срабатывает как следует. Прикол еще в том что вводя некоторые другие 2 буквы на рус. ошибка выскакивает. Короче раз через раз ошибка, и не знаю почему так!!!
    Кто знает?
     
  2. alive342

    alive342 Активный пользователь

    С нами с:
    21 апр 2011
    Сообщения:
    137
    Симпатии:
    0
    Адрес:
    Российская Федерация
  3. krow7

    krow7 Активный пользователь

    С нами с:
    12 авг 2009
    Сообщения:
    398
    Симпатии:
    0
    Адрес:
    из Азии
    trim($user);
    $user = stripslashes($user);
    $user = htmlspecialchars($user);
    $user = addslashes($user);
    $user = mysql_real_escape_string($user);

    уж очень дико)
     
  4. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Неверно, надо
    Код (Text):
    1. $user = trim($user);
    Спецсимволы будут экранироваться дважды, что тоже неверно (вместо \' получится \\\')
    А по вопросу - скорее всего кодировка данных, которые приходят к тебе, двухбайтная (utf-8). Там на один русскоязычный символ приходится 2 байта, и php может считать, что там не одна буква, а две. Попробуй написать:
    Код (Text):
    1. preg_match("/^[а-яА-Яa-zA-Z0-9]{3,50}$/u", $user)
    Сам код тоже сохрани в utf-8 (без BOM).
     
  5. kolya7774

    kolya7774 Активный пользователь

    С нами с:
    3 мар 2011
    Сообщения:
    98
    Симпатии:
    0
    да UTF8
     
  6. kolya7774

    kolya7774 Активный пользователь

    С нами с:
    3 мар 2011
    Сообщения:
    98
    Симпатии:
    0
    большое спасибо, попробую!
     
  7. kolya7774

    kolya7774 Активный пользователь

    С нами с:
    3 мар 2011
    Сообщения:
    98
    Симпатии:
    0
    может и дико ), но я самоучка и только учусь, так что извиняйте если что. Все познается в учении!
     
  8. kolya7774

    kolya7774 Активный пользователь

    С нами с:
    3 мар 2011
    Сообщения:
    98
    Симпатии:
    0
    Да такое тоже было, если 5 раз нажму отправить, то вместо знака "!" знает \\\\\ ).
     
  9. kolya7774

    kolya7774 Активный пользователь

    С нами с:
    3 мар 2011
    Сообщения:
    98
    Симпатии:
    0
    Код (Text):
    1. preg_match("/^[а-яА-Яa-zA-Z0-9]{3,50}$/u", $user)
    + Убрал "BOM" - кажется помогло! Спасибо большое, учителя!!!!
     
  10. kolya7774

    kolya7774 Активный пользователь

    С нами с:
    3 мар 2011
    Сообщения:
    98
    Симпатии:
    0
    Подскажи, пожалуйста, если не лень, как правильно сделать проверку на введенные символы.
    так и выводятся.
    $user = trim(htmlspecialchars($user));?

    stripslashes($user)
    addslashes($user);
    mysql_real_escape_string($user); - с этими что делать? или их не надо?
     
  11. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    PHP:
    1. <?php
    2. // ...
    3.     $user = stripslashes($user);
    4. $user = mysql_real_escape_string($user);
    5. // ...
    6. ?>
    addslashes() лишнее. Или наоборот, оставить только addslashes(), а mysql_real_escape_string() убрать. Но лучше убрать addslashes().
    Ну да. Только я бы сохранял в б.д. строку без htmlspecialchars(), а применял бы эту функцию уже потом, при отображении строки (при выводе из б.д.)
    Ты имеешь в виду регулярку? Ну нормально сейчас вроде. Зависит от цели. А вообще я не вижу особого смысла в подобном - ну если хочет пользователь, чтобы на сайте его звали ^%$#&&`12-* - ну и пусть, его дело. Если он захочет ввести лабуду - он введёт её и из букв (какое-нибудь reF4HjjK12ewA)
     
  12. kolya7774

    kolya7774 Активный пользователь

    С нами с:
    3 мар 2011
    Сообщения:
    98
    Симпатии:
    0
    спасибо, за ответ :!: