Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Проверка данных из формы
 
 автор: sim5   (21.03.2007 в 10:16)   письмо автору
 
 

Нужно проверить ввод названия города. Можно только так, например: г. Омск или Омск.
Проверяю:

if (preg_match("/^[г|с|п.\s]*[а-я]{2,}$/",strtolower(trim($sity)))) return true;

На локальной машине все работает, на сервере в любом случае показывает неверный ввод. Пробовал сохранить в фал $sity для того чтобы посмотреть что же получаю на сервере - записует г. Омск. Так что я в итоге получаю на сервере при передаче формы? В чем проблема?

Форма сама загружена в iframe, то есть диалог с сервером наподобие AJAX.

   
 
 автор: zerocool   (21.03.2007 в 11:02)   письмо автору
 
   для: sim5   (21.03.2007 в 10:16)
 

Если данные из формы передаются методом POST
то тогда запись будет такая:

if (preg_match("/^[г|с|п.\s]*[а-я]{2,}$/",strtolower(trim($_POST[sity])))) return true;

   
 
 автор: sim5   (21.03.2007 в 11:11)   письмо автору
 
   для: zerocool   (21.03.2007 в 11:02)
 

$sity = $_POST['sity']; а затем передается в функцию для проверки.

   
 
 автор: sim5   (21.03.2007 в 13:54)   письмо автору
 
   для: sim5   (21.03.2007 в 11:11)
 

Ну так никто и не занет возможную причину?
У хостера PHP 5.1.6 - на локальной машине 4.4.0
У хостера Apache 1.3.37 - на локальной машине 1.3.33
Могут ли породить эту проблему какие либо насторойки PHP или Apache, и на которые мне надо обратить внимание?

   
 
 автор: zerocool   (21.03.2007 в 15:50)   письмо автору
 
   для: sim5   (21.03.2007 в 10:16)
 

Попробуйте так

if(eregi("^[г|с|п.]*[[:space:]]?[а-я]{2,}$",strtolower(trim($sity))))return true;

   
 
 автор: sim5   (21.03.2007 в 16:16)   письмо автору
 
   для: zerocool   (21.03.2007 в 15:50)
 

И так не работает.

   
 
 автор: Nemesis   (21.03.2007 в 16:59)   письмо автору
 
   для: sim5   (21.03.2007 в 10:16)
 

Может что-то с кодировками не то, попробуйте написать для теста это всё на английском, например.

   
 
 автор: sim5   (21.03.2007 в 17:03)   письмо автору
 
   для: Nemesis   (21.03.2007 в 16:59)
 

А что может быть с кодировкой. Если я ремирую проверку, то все что получаю из формы нормально пишется в базу, да и в файл, который я для провеки создавал, тоже пишется нормально. Если какие-то происходят преобразования с текстом, то тогда на каком этапе это происходит?

   
 
 автор: sim5   (23.03.2007 в 14:19)   письмо автору
 
   для: sim5   (21.03.2007 в 17:03)
 

Извиняюсь, что достал это вновь "из дремучих подвалов", но уже и не знаю что думать. Может ли быть причиной этого, различия в установках:

Apache Environment

QUERY_STRING

Хост - no value
Локал - lang=ru-win1251&server=1&collation_connection=cp1251_general_ci

REQUEST_URI

Хост - /main.php
Локал - /Tools/phpmyadmin/phpinfo.php?lang=ru-win1251&server=1&collation_connection=cp1251_general_ci

HTTP Headers Information

HTTP Request

Хост - GET /main.php HTTP/1.1
Локал - GET /Tools/phpmyadmin/phpinfo.php?lang=ru-win1251&server=1&collation_connection=cp1251_general_ci HTTP/1.1

Других отличий, как либо связанных с кодировкой, не нашел.

   
 
 автор: JIEXA   (23.03.2007 в 14:38)   письмо автору
 
   для: sim5   (23.03.2007 в 14:19)
 

Попробуйте установить локаль

   
 
 автор: sim5   (23.03.2007 в 15:07)   письмо автору
 
   для: JIEXA   (23.03.2007 в 14:38)
 

Где, у хостера?

   
 
 автор: mihdan   (23.03.2007 в 15:51)   письмо автору
 
   для: sim5   (23.03.2007 в 15:07)
 

во - первых, может просто не работать strtolower();
во - вторых пропиши setlocale()

   
 
 автор: sim5   (23.03.2007 в 15:57)   письмо автору
 
   для: mihdan   (23.03.2007 в 15:51)
 

strtolower() - работает, гаратия. setlocale() - тогда интересно, при проверке принятых сообщений в гостевой находятся "неприличные" слова и происходит их замена, а я не прописывал setlocale(). Но я всетаки попробую этот совет.

   
 
 автор: ZuArt   (23.03.2007 в 15:58)   письмо автору
 
   для: mihdan   (23.03.2007 в 15:51)
 

еще попробуйте в метатегах страницы четко прописать кодировку

   
 
 автор: sim5   (23.03.2007 в 16:06)   письмо автору
 
   для: ZuArt   (23.03.2007 в 15:58)
 

Кодировка прописана.

Сегодня у нас сеть паршивит, не все работает, не могу и до сайта достучаться - завтра попробую.

   
 
 автор: mihdan   (23.03.2007 в 16:09)   письмо автору
 
   для: sim5   (23.03.2007 в 16:06)
 


<?php
if (preg_match("/^[\s]*[г\.|с\.|п\.]*[\s]*[а-я]{2,20}[\s]*$/si",strtolower(trim($_POST[$sity])))) return true
?>

   
 
 автор: sim5   (23.03.2007 в 16:15)   письмо автору
 
   для: mihdan   (23.03.2007 в 16:09)
 

Балгодарю, завтра попробую.

   
 
 автор: sim5   (24.03.2007 в 12:12)   письмо автору
 
   для: sim5   (23.03.2007 в 16:15)
 

во - первых, может просто не работать strtolower();

Вот именно это и является причиной проблемы. Если бы я свой "тест файл" записывал после этой функции, то бы понял это раньше. Я указывал, что формы загружаются в iframe (в данном случае). С других страниц (где формы расположены на странице) приходящие из форм данные нормально обрабатываются и strtolower(), и ucwords(). Вопросы:

1. Значит прописнный в META-теге язык, для форм загруженных в iframe "не указ" или это роли не играет?
2. Если прописать setlocale(), например, в индексном файле, во всех скриптах это будет учитываться?
3. А можно ли изменить соответствующие значения переменных окружения "для себя", например через .htaccess, чтобы не морочиться с этими проблемами? Если да, то как это сделать, что надо прописать?

   
 
 автор: sim5   (24.03.2007 в 14:23)   письмо автору
 
   для: sim5   (24.03.2007 в 12:12)
 

Ребята, ну что за ерунда творится на сервере, а может "в башке моей"? Ну вот написал такое для пробы, кинул на сервер:


<?
setlocale
(LC_ALL'ru_RU');
$st "АЛЕВТИНА";
echo 
strtolower($st);
?>


Запускаю и получаю - АЛЕВТИНА.
Вызываю setlocale с нулевым параметром, получаю:
LC_COLLATE=C;LC_CTYPE=Russian_Russia.1251;LC_MONETARY=C;LC_NUMERIC=C;LC_TIME=C
Ну значит локаль установлена как нужно? Или что еще надо? Ну что мне нужно сделать в конце концов, чтобы это все заработало?

P.S. Вообще дурь какая-то творится - еще раз запускаю setlocale с нулевым параметром, получаю: C
Опять проверяю - C и больше ничего.

   
 
 автор: cheops   (25.03.2007 в 13:44)   письмо автору
 
   для: sim5   (24.03.2007 в 14:23)
 

'ru_RU' - не достаточно, нужно задать ещё кодировку - лучше уточнить в службе технической поддержки хостера, какой вид локали следует использовать.

   
 
 автор: sim5   (25.03.2007 в 15:55)   письмо автору
 
   для: cheops   (25.03.2007 в 13:44)
 

Я указывал и кодировку - ничего не помогло. Направили письмо хостеру. Спросили почему так, и что за странные текущие переменные мы в ответ получаем? Ответ был таков - Если хотите мы переведем ваш аккуант на РНР 4, и все. Ну что я могу ответить им? Написал, что если проще перевести на РНР 4, чем изменить настройки, пусть переводят, но всетаки попросил (для интереса) ответить - почему так получается. Может и ответят.

   
 
 автор: cheops   (26.03.2007 в 01:54)   письмо автору
 
   для: sim5   (25.03.2007 в 15:55)
 

Попробуйте установить локаль следующим образом
<?php
  setlocale 
(LC_ALL, array ('ru_RU.CP1251''rus_RUS.1251'));
?>

   
 
 автор: gLip   (26.03.2007 в 09:50)   письмо автору
 
   для: sim5   (24.03.2007 в 14:23)
 

setlocale(LC_ALL, "ru_RU.CP1251");

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования