За последние 24 часа нас посетили 54782 программиста и 1720 роботов. Сейчас ищут 937 программистов ...

Баг ?

Тема в разделе "Прочие вопросы по PHP", создана пользователем Vladson, 8 янв 2007.

  1. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Есть у меня значит код...
    PHP:
    1. <?php
    2.     array_walk_recursive($_POST, create_function('$key, $val', '$_POST[$key] = stripslashes($val);'));
    3. }
    4. ?>
    Работает отлично, но...

    В случае передачи одинаковых данных
    Например
    $_POST['name'] = "vlad'son"
    $_POST['text'] = "vlad'son"
    код обрабатывает только 'name' и игнорирует 'text'
    Так это меня глючит или РНР ? (РНР-5.2.0)
     
  2. avm

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

    С нами с:
    21 сен 2006
    Сообщения:
    597
    Симпатии:
    0
    Адрес:
    Москва
    т.е. нужно create_function('$val, $key', ...
     
  3. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Снкс, действительно меня переглючило (наверное с похмела писал), но теперь ты меня вообще запутал, почему тогда наоборот тоже обычно работает ? :)
     
  4. avm

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

    С нами с:
    21 сен 2006
    Сообщения:
    597
    Симпатии:
    0
    Адрес:
    Москва
    Сделай print_r($_POST) после того array_walk --- там будет $_POST["vlad'son"] = "text";
    т.е. работает, но не так как ожидается ;)
     
  5. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Похоже разобрался, видимо во время array_walk он идёт не только по оригинальному массиву но и по тем "веткам" которые были созданы в процессе самого себя :)

    Код (Text):
    1. Array <-- до
    2. (
    3.     [text] => te\'st
    4.     [name] => vlad\'son
    5. )
    6. Array <-- после
    7. (
    8.  - шаг 1 -
    9.     [te\'st] => text
    10.     [vlad\'son] => name
    11.  - шаг 2 -
    12.     [te'st] => text
    13.     [vlad'son] => name
    14.  - шаг 3 -
    15.     [text] => te'st
    16.     [name] => vlad'son
    17. )
    По началу удивился, думал что если код не верный то он вообще никак работать не будет, оказалось работает только "обходными путями" :)
     
  6. avm

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

    С нами с:
    21 сен 2006
    Сообщения:
    597
    Симпатии:
    0
    Адрес:
    Москва
    Vladson, сори... теперь запутался я. Так что нужно-то было? чтобы стало:
    Код (Text):
    1. [text] => vlad\'son <-- слеш есть
    2. [name] => vlad'son <-- и его нету
    3. [vlad'son] => text
    ???

    т.е. речь о том что не сработал stripslashes?

    вот что (и как) делал я:
    PHP:
    1. <?php
    2. $_POST['name'] = "vlad\\'son";
    3. $_POST['text'] = "vlad'son";
    4.    array_walk_recursive($_POST, create_function('$val,$key', '$_POST[$key]=stripslashes($val);'));
    5. }
    6. print_r($_POST);
    7. ?>
    Код (Text):
    1. Array
    2. (
    3.     [name] => vlad'son
    4.     [text] => vlad'son
    5. )
    (т.е. stripslashes честно отработал) но может я не то делал?
     
  7. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Я имею в виду что мой вариант не правильный тоже работает, только не теми путями