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

Форум PHP

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

 

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

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

тема: PHP Warning: preg_match() expects parameter 2 to be string, array given
 
 автор: TetRiska   (07.10.2012 в 23:16)   письмо автору
 
 

Всем привет.

Получаемые параметры:
$da = isset($_POST['da']) ? rawurldecode($_POST['da']) : '';
$id = isset($_POST['id']) ? $_POST['id'] : 0;
$iv = isset($_POST['iv']) ? $_POST['iv'] : '';

Вот их проверки:
if(!preg_match("/^[a-z0-9=+\/]+$/i", $da) || !preg_match("/^[0-9]+$/", $id) || !preg_match("/^[a-z0-9]+$/", $iv)){
    $pmsg = -1;
    $tmsg = $emsg.'полученные параметры не соответствуют шаблону.';
}else{
...........
}

Ошибка получается в результате если передать массив. Как от этого обезопасится? Там где числа прогоняем через floor(), а там где текст - конвертируем в стринг? Посоветуйте, как быть.

  Ответить  
 
 автор: confirm   (08.10.2012 в 09:15)   письмо автору
 
   для: TetRiska   (07.10.2012 в 23:16)
 

Для того, чтобы убедиться в том, что данные это число, достаточно is_numeric(). Если "Как от этого обезопасится?" означает "как проверить входной массив данных?", то существуют фильтры. Используйте filter_input_array(). Версия РНР при этом должна быть не ниже 5.2.0.
Кроме этого, существуют итераторы, которыми вы можете обойти массив используя свои шаблоны, а на выходе получить булево значение - соответствует/не соответствует.

  Ответить  
 
 автор: TetRiska   (08.10.2012 в 11:05)   письмо автору
 
   для: confirm   (08.10.2012 в 09:15)
 

спасибо, для чисел достаточно будет is_numeric(), а для массивов - is_array()

  Ответить  
 
 автор: confirm   (08.10.2012 в 11:13)   письмо автору
 
   для: TetRiska   (08.10.2012 в 11:05)
 

Еще раз убеждаюсь, что не понять, чего же вам на самом деле надо - проверить значения, или убедиться к принадлежности типу.

  Ответить  
 
 автор: TetRiska   (08.10.2012 в 15:55)   письмо автору
 
   для: confirm   (08.10.2012 в 11:13)
 

$id = isset($_POST['id']) ? $_POST['id'] : 0;
$iv = isset($_POST['iv']) ? $_POST['iv'] : '';

if(!preg_match("/^[0-9]+$/", $id) || !preg_match("/^[a-z0-9]+$/", $iv)){
    $pmsg = -1;
    $tmsg = $emsg.'полученные параметры не соответствуют шаблону.';
}else{
...........
}


Мне в одну из переменных прислали массив. Вот я и получил ошибку в регулярке. Поэтому, чтобы не допустить этого, нужно сперва проверить приходит в переменные массив или нет, если нет - проверяем регулярками, иначе блочим.

  Ответить  
 
 автор: confirm   (08.10.2012 в 16:06)   письмо автору
 
   для: TetRiska   (08.10.2012 в 15:55)
 

А сразу так и задать вопрос нельзя было? )

  Ответить  
Rambler's Top100
вверх

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