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
Форумы портала PHP.SU :: Версия для печати :: проверка данных на наличие массива
Форумы портала PHP.SU » » Вопросы новичков » проверка данных на наличие массива

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

1. foozzi - 07 Февраля, 2013 - 14:30:06 - перейти к сообщению
В общем при вводе в форму логина массив, например: author[]
то php принимает его как массив и обрабатывает так же
функция is_array проверяет на наличие массива, так вот, если в введенных данных отправлен псевдо-массив, то как его при обработке сделать НЕ массивом, было author[] а при обработке author
Причем регулярка почему то не удаляет [] символы...
2. imya - 07 Февраля, 2013 - 14:32:48 - перейти к сообщению
А зачем логин делать массивом?
Если бы у вас был массив чекбоксов или радиобаттонов - тогда ладно ещё...

Преобразовывать перед занесением куда либо ?
3. foozzi - 07 Февраля, 2013 - 14:53:51 - перейти к сообщению
imya пишет:
А зачем логин делать массивом?
Если бы у вас был массив чекбоксов или радиобаттонов - тогда ладно ещё...

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

нет, любой желающий введен в форму логин типа author[] и в базу запишется вместо логина , надпись Array
4. esterio - 07 Февраля, 2013 - 14:58:18 - перейти к сообщению
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. ?>


Думаю намек ясен
5. foozzi - 07 Февраля, 2013 - 15:18:04 - перейти к сообщению
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>
6. DelphinPRO - 07 Февраля, 2013 - 15:24:21 - перейти к сообщению
если вы ожидаете получить гарантированный скаляр, то например так:
PHP:
скопировать код в буфер обмена
  1. $author = (array) $_POST['author'];
  2. $author = $author[0];
7. foozzi - 07 Февраля, 2013 - 15:50:53 - перейти к сообщению
DelphinPRO пишет:
если вы ожидаете получить гарантированный скаляр, то например так:
PHP:
скопировать код в буфер обмена
  1. $author = (array) $_POST['author'];
  2. $author = $author[0];

мне нужно что бы при вводе логин[] при обработке оставался чистый логин без знаков массива
8. imya - 07 Февраля, 2013 - 16:29:11 - перейти к сообщению
уберите из name=author[] [] и будет всё ок.
9. DelphinPRO - 07 Февраля, 2013 - 17:06:53 - перейти к сообщению
foozzi пишет:
мне нужно что бы при вводе логин[] при обработке оставался чистый логин без знаков массива

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

И приведите код с тестовыми входными данными, который запишет в БД (выведет на экран) "Array" вместо реальных данных.
10. foozzi - 07 Февраля, 2013 - 17:11:46 - перейти к сообщению
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); // регулярка, уберает все символы кроме букв и цифр
11. DeepVarvar - 07 Февраля, 2013 - 17:34:32 - перейти к сообщению
foozzi пишет:
уберает все символы кроме букв и цифр
строка Änderungswünsche großartige Filme проедет?

А вообще я давал тебе фильтр нормальный...
12. DelphinPRO - 07 Февраля, 2013 - 17:34:37 - перейти к сообщению
При входной строке "author[]":
Во-первых, ваш код у меня выводит "author".
Во-вторых, если убрать регулярку, выведет "author[]".
Никакой интерпретации, как массива. Что я делаю не так?

И, в третьих, считаю такой подход неверным. Нельзя искажать имя пользователя, если он его вводит. Если не можете сохранять так, как введено, то следует просто проверить на корректность регуляркой, и выдать ошибку.
13. DeepVarvar - 07 Февраля, 2013 - 17:38:02 - перейти к сообщению
DelphinPRO пишет:
Если не можете сохранять так, как введено, то следует просто проверить на корректность регуляркой, и выдать ошибку
Верно, нужно реализовывать как "фильтр" так и "валидатор".
14. DelphinPRO - 07 Февраля, 2013 - 17:45:42 - перейти к сообщению
Вот нашел-таки у себя в закладках. Посмотрите эту тему
http://phpforum[dot]ru/index.php?showtopic=19168
Очень и очень познавательно.
15. DeepVarvar - 07 Февраля, 2013 - 17:53:33 - перейти к сообщению
Да шож вы тут пораздули то:
PHP:
скопировать код в буфер обмена
  1. $author = (string) $_POST['author'];

Все!

 

Powered by ExBB FM 1.0 RC1