За последние 24 часа нас посетил 26691 программист и 1814 роботов. Сейчас ищут 1211 программистов ...

Прокомментировать пару строк кода

Тема в разделе "PHP для новичков", создана пользователем kilogram, 27 мар 2012.

  1. kilogram

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

    С нами с:
    19 мар 2012
    Сообщения:
    116
    Симпатии:
    0
    Расшифруйте логику работы что куда берется и получается в этом цикле.
    Смущают вот эти названия в параметрах как ими манипуляция происходит ['doGo'] и ['known'] ?
    Что откуда куда достается и вставляется куда?

    Код (Text):
    1.  
    2.  
    3. <html><body>
    4. <?php
    5. if(@$_REQUEST['doGo']) {
    6.     foreach(@$_REQUEST['known'] as $k=>$v) {
    7.     if($v) echo "Вы знаете язык $k!<br>";
    8.     else echo "Вы не знаете языка $k. <br>";
    9.     }
    10. }
    11. ?>
    12. <form action="<?=$_SERVER['SCRIPT_NAME'] ?>" method="post">
    13. Какие языки программирования вы знаете? <br>
    14. <input type="hidden" name="known[PHP]" value="0">
    15.     <input type="checkbox" name="known[PHP]" value="0">PHP<br>
    16. <input type="hidden" name="known[PHP]" value="0">
    17. <input type="checkbox" name="known[Perl]" value="0">Perl<br>
    18. <input type="submit" name="doGo" value="Go">
    19. </form>
    20.  
    21. </body></html>
     
  2. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Древний код, где взял???

    Что такое $_REQUEST http://www.php.ru/manual/reserved.variables.request.html

    Вообще там должен был быть $_POST

    $_REQUEST['known'] это кнопка submit, проверяется что была нажата кнопка сабмит.
    набор name="known[Perl] формирует массив known с элементами Perl, PHP и т.д.

    здесь выводить в цикле выбранные языки
     
  3. kilogram

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

    С нами с:
    19 мар 2012
    Сообщения:
    116
    Симпатии:
    0
    В документации написано:
    Код (Text):
    1. REQUEST - это ассоциативный массив (array), который по умолчанию содержит данные переменных $_GET, $_POST и $_COOKIE.
    REQUEST - я так понимаю это массив глобальный в котором внутри 3 массива вложенные?
    В строке
    Код (Text):
    1. <input type="submit" name="doGo" value="Go">
    поле name=doGO. Это значение отправляется в глобальный массив REQUEST, а как же если согласно документации в глобальном ассоциативном массиве REQUEST 3 параметра?
     
  4. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    REQUEST это просто объединенный массив всего, что передано, там не 3 параметра, а просто всё вряд, ключ1=значение1,ключ2=значение2 и т.д.
    <input type="submit" name="doGo" value="Go">
    передаст лишь вот такую связку: doGo=Go
    Соответственно в массиве REQUEST значение Go будет доступно по ключу doGo:
    $_REQUEST['doGo']=='Go'
     
  5. kilogram

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

    С нами с:
    19 мар 2012
    Сообщения:
    116
    Симпатии:
    0
    То есть там может быть хоть миллион параметров, каждый из которых состоит из ключа и его значения?
    Скажите <input type="hidden" name="known
    PHP:
    1. " value="0">
    2. Куда попадает вот это known[PHP]?
     
  6. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Чтобы прояснить, что это за массивы, сделайте такой тест:
    Код (PHP):
    1. <form action="?req=1" method="post">
    2. <input type="text" name="req" value="2"/>
    3. <input type="submit" value="отправить get и post"/>
    4. </form>
    5. <?php
    6. if(isset($_GET['req'])){
    7.     echo '$_GET[req]=',$_GET['req'],'<br/>';
    8. }
    9. if(isset($_POST['req'])){
    10.     echo '$_POST[req]=',$_POST['req'],'<br/>';
    11. }
    12. if(isset($_REQUEST['req'])){
    13.     echo '$_REQUEST[req]=',$_REQUEST['req'],'<br/>';
    14.     print_r($_REQUEST);
    15. }
    16. ?>
    Через адрес в action передается GET, а форма отправляет POST, т.к. указано в method.

     
  7. kilogram

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

    С нами с:
    19 мар 2012
    Сообщения:
    116
    Симпатии:
    0
    Скажите, а known - это вложенный одномерный массив?

    Добавлено спустя 2 минуты 9 секунд:
    Так происходит? $_REQUEST['known']['PHP'] = 0; или $_POST['known']['PHP'] = 0;
     
  8. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    $_REQUEST['known'] будет содержать массив с одной только парой ключ=значение (PHP=0), т.к. передали только одну пару.
    А в каком из массивов $_POST или $_GET будет окажется этот переданный массив, зависит от метода передачи, как в форме указать. В $_REQUEST будет по-любому.
     
  9. kilogram

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

    С нами с:
    19 мар 2012
    Сообщения:
    116
    Симпатии:
    0
    А массив known создается каким образом? За каждой итерацией вытягивается с формы и передается в качестве элемента массиву Request?
     
  10. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Вот такое имя name="known
    PHP:
    1. " у поля ввода означает, что будет передаваться массив "known", и тут же назначается по ключу "PHP" значение, которое там в параметре поля ввода value=0.
    2. Как он создается при получении, не знаю, нужно смотреть исходники на C. Но так как из браузера это всё передаётся в виде
    3. known[PHP]=0&known[noPHP]=1&known[PHPno]=25&known[z_HP]=0&known[anykey]=0& и т.д.
    4. То можно предположить, что сначала строка разбивается по разделителю &. Что потом делают с бедной строкой и как превращают в php-массив.. об этом можно поговорить, да. Ваша версия?
     
  11. kilogram

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

    С нами с:
    19 мар 2012
    Сообщения:
    116
    Симпатии:
    0
    А попадает в РИКВЭСТ с массива known от инпутов за каждой итерацией вытягиваются значения с отправленной формы в массив РИКВЭСТ?

    Добавлено спустя 19 минут 4 секунды:
    Я хотел спросить как попадают элементы массива known в МАССИВ РИКВЭСТ в этом коде?
     
  12. kilogram

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

    С нами с:
    19 мар 2012
    Сообщения:
    116
    Симпатии:
    0
    То есть написав просто какое-то значение в поле name, например name="vasya" в глобальный массив REQUEST доступен во всех файлах, значение vasya полетит в РИКВЭСТ и запишется в него такое: $REQUEST['vasya'], а написав так name="vasya['Pupkin']" я вроде создаю этим двумерный массив в масиве РИКВЭСТ? Получается в РИКВЕСТЕ такое после name="vasya['Pupkin']" ----> $REQUEST['vasya']['Pypkin']?
     
  13. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    да.
    проще сделать тестовый документ и проверить.