Расшифруйте логику работы что куда берется и получается в этом цикле. Смущают вот эти названия в параметрах как ими манипуляция происходит ['doGo'] и ['known'] ? Что откуда куда достается и вставляется куда? Код (Text): <html><body> <?php if(@$_REQUEST['doGo']) { foreach(@$_REQUEST['known'] as $k=>$v) { if($v) echo "Вы знаете язык $k!<br>"; else echo "Вы не знаете языка $k. <br>"; } } ?> <form action="<?=$_SERVER['SCRIPT_NAME'] ?>" method="post"> Какие языки программирования вы знаете? <br> <input type="hidden" name="known[PHP]" value="0"> <input type="checkbox" name="known[PHP]" value="0">PHP<br> <input type="hidden" name="known[PHP]" value="0"> <input type="checkbox" name="known[Perl]" value="0">Perl<br> <input type="submit" name="doGo" value="Go"> </form> </body></html>
Древний код, где взял??? Что такое $_REQUEST http://www.php.ru/manual/reserved.variables.request.html Вообще там должен был быть $_POST $_REQUEST['known'] это кнопка submit, проверяется что была нажата кнопка сабмит. набор name="known[Perl] формирует массив known с элементами Perl, PHP и т.д. здесь выводить в цикле выбранные языки
В документации написано: Код (Text): REQUEST - это ассоциативный массив (array), который по умолчанию содержит данные переменных $_GET, $_POST и $_COOKIE. REQUEST - я так понимаю это массив глобальный в котором внутри 3 массива вложенные? В строке Код (Text): <input type="submit" name="doGo" value="Go"> поле name=doGO. Это значение отправляется в глобальный массив REQUEST, а как же если согласно документации в глобальном ассоциативном массиве REQUEST 3 параметра?
REQUEST это просто объединенный массив всего, что передано, там не 3 параметра, а просто всё вряд, ключ1=значение1,ключ2=значение2 и т.д. <input type="submit" name="doGo" value="Go"> передаст лишь вот такую связку: doGo=Go Соответственно в массиве REQUEST значение Go будет доступно по ключу doGo: $_REQUEST['doGo']=='Go'
То есть там может быть хоть миллион параметров, каждый из которых состоит из ключа и его значения? Скажите <input type="hidden" name="known PHP: " value="0"> Куда попадает вот это known[PHP]?
Чтобы прояснить, что это за массивы, сделайте такой тест: Код (PHP): <form action="?req=1" method="post"> <input type="text" name="req" value="2"/> <input type="submit" value="отправить get и post"/> </form> <?php if(isset($_GET['req'])){ echo '$_GET[req]=',$_GET['req'],'<br/>'; } if(isset($_POST['req'])){ echo '$_POST[req]=',$_POST['req'],'<br/>'; } if(isset($_REQUEST['req'])){ echo '$_REQUEST[req]=',$_REQUEST['req'],'<br/>'; print_r($_REQUEST); } ?> Через адрес в action передается GET, а форма отправляет POST, т.к. указано в method.
Скажите, а known - это вложенный одномерный массив? Добавлено спустя 2 минуты 9 секунд: Так происходит? $_REQUEST['known']['PHP'] = 0; или $_POST['known']['PHP'] = 0;
$_REQUEST['known'] будет содержать массив с одной только парой ключ=значение (PHP=0), т.к. передали только одну пару. А в каком из массивов $_POST или $_GET будет окажется этот переданный массив, зависит от метода передачи, как в форме указать. В $_REQUEST будет по-любому.
А массив known создается каким образом? За каждой итерацией вытягивается с формы и передается в качестве элемента массиву Request?
Вот такое имя name="known PHP: " у поля ввода означает, что будет передаваться массив "known", и тут же назначается по ключу "PHP" значение, которое там в параметре поля ввода value=0. Как он создается при получении, не знаю, нужно смотреть исходники на C. Но так как из браузера это всё передаётся в виде known[PHP]=0&known[noPHP]=1&known[PHPno]=25&known[z_HP]=0&known[anykey]=0& и т.д. То можно предположить, что сначала строка разбивается по разделителю &. Что потом делают с бедной строкой и как превращают в php-массив.. об этом можно поговорить, да. Ваша версия?
А попадает в РИКВЭСТ с массива known от инпутов за каждой итерацией вытягиваются значения с отправленной формы в массив РИКВЭСТ? Добавлено спустя 19 минут 4 секунды: Я хотел спросить как попадают элементы массива known в МАССИВ РИКВЭСТ в этом коде?
То есть написав просто какое-то значение в поле name, например name="vasya" в глобальный массив REQUEST доступен во всех файлах, значение vasya полетит в РИКВЭСТ и запишется в него такое: $REQUEST['vasya'], а написав так name="vasya['Pupkin']" я вроде создаю этим двумерный массив в масиве РИКВЭСТ? Получается в РИКВЕСТЕ такое после name="vasya['Pupkin']" ----> $REQUEST['vasya']['Pypkin']?