Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: проверка данных на наличие массива

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Без описания
foozzi
Отправлено: 07 Февраля, 2013 - 14:30:06
Post Id



Посетитель


Покинул форум
Сообщений всего: 283
Дата рег-ции: Май 2011  
Откуда: rm -rf /


Помог: 0 раз(а)




В общем при вводе в форму логина массив, например: author[]
то php принимает его как массив и обрабатывает так же
функция is_array проверяет на наличие массива, так вот, если в введенных данных отправлен псевдо-массив, то как его при обработке сделать НЕ массивом, было author[] а при обработке author
Причем регулярка почему то не удаляет [] символы...


-----
90% ошибок находятся в полуметре от монитора...
 
 Top
imya
Отправлено: 07 Февраля, 2013 - 14:32:48
Post Id



Участник


Покинул форум
Сообщений всего: 1472
Дата рег-ции: Сент. 2012  
Откуда: Запорожье, Украина


Помог: 19 раз(а)




А зачем логин делать массивом?
Если бы у вас был массив чекбоксов или радиобаттонов - тогда ладно ещё...

Преобразовывать перед занесением куда либо ?


-----
PHP:
скопировать код в буфер обмена
  1. do {box != cat;} while (cat != box);


Когда нормальный человек, уезжая из дома одевает на жену пояс верности, веб-дизайнер ставит на нее счетчик...
 
My status
 Top
foozzi
Отправлено: 07 Февраля, 2013 - 14:53:51
Post Id



Посетитель


Покинул форум
Сообщений всего: 283
Дата рег-ции: Май 2011  
Откуда: rm -rf /


Помог: 0 раз(а)




imya пишет:
А зачем логин делать массивом?
Если бы у вас был массив чекбоксов или радиобаттонов - тогда ладно ещё...

Преобразовывать перед занесением куда либо ?

нет, любой желающий введен в форму логин типа author[] и в базу запишется вместо логина , надпись Array


-----
90% ошибок находятся в полуметре от монитора...
 
 Top
esterio
Отправлено: 07 Февраля, 2013 - 14:58:18
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




CODE (htmlphp):
скопировать код в буфер обмена
  1. <input type="text" name="author[]" value="author">
  2. <?php
  3. $_POST['autor'] = array('author');
  4. ?>
  5. <input type="text" name="author" value="author">
  6. <?php
  7. $_POST['autor'] = 'author';
  8. ?>


Думаю намек ясен

(Отредактировано автором: 07 Февраля, 2013 - 14:58:39)

 
 Top
foozzi
Отправлено: 07 Февраля, 2013 - 15:18:04
Post Id



Посетитель


Покинул форум
Сообщений всего: 283
Дата рег-ции: Май 2011  
Откуда: rm -rf /


Помог: 0 раз(а)




esterio пишет:
CODE (htmlphp):
скопировать код в буфер обмена
  1. <input type="text" name="author[]" value="author">
  2. <?php
  3. $_POST['autor'] = array('author');
  4. ?>
  5. <input type="text" name="author" value="author">
  6. <?php
  7. $_POST['autor'] = 'author';
  8. ?>


Думаю намек ясен


не очень
вот мое поле:
CODE (html):
скопировать код в буфер обмена
  1. <!-- Text input-->
  2.           <label class="control-label" for="input01">Автор:</label>
  3.           <div class="controls">
  4.             <input type="text" placeholder="foozzi" class="input-xlarge" name="author">
  5.             <p class="help-block"></p>
  6.           </div>
  7.         </div>


-----
90% ошибок находятся в полуметре от монитора...
 
 Top
DelphinPRO
Отправлено: 07 Февраля, 2013 - 15:24:21
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




если вы ожидаете получить гарантированный скаляр, то например так:
PHP:
скопировать код в буфер обмена
  1. $author = (array) $_POST['author'];
  2. $author = $author[0];

(Отредактировано автором: 07 Февраля, 2013 - 15:25:16)



-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
foozzi
Отправлено: 07 Февраля, 2013 - 15:50:53
Post Id



Посетитель


Покинул форум
Сообщений всего: 283
Дата рег-ции: Май 2011  
Откуда: rm -rf /


Помог: 0 раз(а)




DelphinPRO пишет:
если вы ожидаете получить гарантированный скаляр, то например так:
PHP:
скопировать код в буфер обмена
  1. $author = (array) $_POST['author'];
  2. $author = $author[0];

мне нужно что бы при вводе логин[] при обработке оставался чистый логин без знаков массива


-----
90% ошибок находятся в полуметре от монитора...
 
 Top
imya
Отправлено: 07 Февраля, 2013 - 16:29:11
Post Id



Участник


Покинул форум
Сообщений всего: 1472
Дата рег-ции: Сент. 2012  
Откуда: Запорожье, Украина


Помог: 19 раз(а)




уберите из name=author[] [] и будет всё ок.


-----
PHP:
скопировать код в буфер обмена
  1. do {box != cat;} while (cat != box);


Когда нормальный человек, уезжая из дома одевает на жену пояс верности, веб-дизайнер ставит на нее счетчик...
 
My status
 Top
DelphinPRO
Отправлено: 07 Февраля, 2013 - 17:06:53
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




foozzi пишет:
мне нужно что бы при вводе логин[] при обработке оставался чистый логин без знаков массива

По-моему, вы морочите голову.
Я вам привел пример защиты от возможной ошибки если "хакер" в файрбаге поменяет параметр name.
По поводу параметра value - какая разница, что там введет пользователь в окно ввода? Экранируйте при записи в БД и обрабатывайте htmlspecialchars при выводе на страницу.

И приведите код с тестовыми входными данными, который запишет в БД (выведет на экран) "Array" вместо реальных данных.


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
foozzi
Отправлено: 07 Февраля, 2013 - 17:11:46
Post Id



Посетитель


Покинул форум
Сообщений всего: 283
Дата рег-ции: Май 2011  
Откуда: rm -rf /


Помог: 0 раз(а)




imya пишет:
уберите из name=author[] [] и будет всё ок.

да у меня и нет там этих символов
(Добавление)
DelphinPRO пишет:
foozzi пишет:
мне нужно что бы при вводе логин[] при обработке оставался чистый логин без знаков массива

По-моему, вы морочите голову.
Я вам привел пример защиты от возможной ошибки если "хакер" в файрбаге поменяет параметр name.
По поводу параметра value - какая разница, что там введет пользователь в окно ввода? Экранируйте при записи в БД и обрабатывайте htmlspecialchars при выводе на страницу.

И приведите код с тестовыми входными данными, который запишет в БД (выведет на экран) "Array" вместо реальных данных.

PHP:
скопировать код в буфер обмена
  1.          $name = $_POST['author'];
  2.      $name = trim(htmlspecialchars(stripslashes($name)));
  3.      $name = preg_replace("/[^\\w\\x7F-\\xFF\\s]+/s", "", $name); // регулярка, уберает все символы кроме букв и цифр

(Отредактировано автором: 07 Февраля, 2013 - 17:12:26)



-----
90% ошибок находятся в полуметре от монитора...
 
 Top
DeepVarvar Супермодератор
Отправлено: 07 Февраля, 2013 - 17:34:32
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




foozzi пишет:
уберает все символы кроме букв и цифр
строка Änderungswünsche großartige Filme проедет?

А вообще я давал тебе фильтр нормальный...
 
 Top
DelphinPRO
Отправлено: 07 Февраля, 2013 - 17:34:37
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




При входной строке "author[]":
Во-первых, ваш код у меня выводит "author".
Во-вторых, если убрать регулярку, выведет "author[]".
Никакой интерпретации, как массива. Что я делаю не так?

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


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
DeepVarvar Супермодератор
Отправлено: 07 Февраля, 2013 - 17:38:02
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




DelphinPRO пишет:
Если не можете сохранять так, как введено, то следует просто проверить на корректность регуляркой, и выдать ошибку
Верно, нужно реализовывать как "фильтр" так и "валидатор".
 
 Top
DelphinPRO
Отправлено: 07 Февраля, 2013 - 17:45:42
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




Вот нашел-таки у себя в закладках. Посмотрите эту тему
http://phpforum[dot]ru/index.php?showtopic=19168
Очень и очень познавательно.


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
DeepVarvar Супермодератор
Отправлено: 07 Февраля, 2013 - 17:53:33
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Да шож вы тут пораздули то:
PHP:
скопировать код в буфер обмена
  1. $author = (string) $_POST['author'];

Все!
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB