Проблема Php $_GET

foreach ($_GET as $field => $label)
{
   $datarray[]=$_GET[$field];
   echo "$_GET[$field]";
   echo "<br>";
}
print_r($datarray);

Это результат, который я получаю. Я вижу, что данные есть в массиве данных, но когда я echo $_GET[$field]

Я получаю только "Массив"

Но print_r($datarray) печатает все данные. Любая идея, как я могу получить эти значения?

ВЫВОД

Array ( 
        [0] => Array ( 
                 [0] => Grade1 
                 [1] => ln 
                 [2] => North America 
                 [3] => yuiyyu 
                 [4] => iuy 
                 [5] => uiyui 
                 [6] => yui 
                 [7] => uiy 
                 [8] => 0:0:5 
                 ) 
)

person Community    schedule 17.09.2008    source источник
comment
Пожалуйста, измените заголовок этого вопроса, чтобы он был более описательным.   -  person SpoonMeiser    schedule 17.09.2008
comment
Лучше отформатируйте свой вопрос, чтобы люди лучше его понимали и быстрее давали ответы. Используйте Markdown или даже кнопки над полем редактирования.   -  person Fernando Barrocal    schedule 17.09.2008
comment
Я думаю, мы сможем понять больше, если вы покажете нам ссылку, которая дает такие странные $_GET   -  person Giuda    schedule 17.09.2008
comment
Также было бы полезно включить фактический запрос URL, который вы пытаетесь прочитать через $_GET.   -  person Nathan Strong    schedule 17.09.2008
comment
вот ссылка, дайте мне знать, если это поможет hofstrateach.org/Roberto/story_1.html   -  person    schedule 17.09.2008


Ответы (8)


РЕДАКТИРОВАТЬ: Когда я завершил ваш тест, вот конечный URL:

http://hofstrateach.org/Roberto/process.php?keys=Grade1&keys=Nathan&keys=North%20America&keys=5&keys=3&keys=no&keys=foo&keys=blat&keys=0%3A0%3A24

Вероятно, это неправильный URL. Когда вы передаете повторяющиеся ключи в запросе, PHP превращает их в массив. Приведенный выше URL-адрес, вероятно, должен выглядеть примерно так:

http://hofstrateach.org/Roberto/process.php?grade=Grade1&schoolname=Nathan®ion=Северная%20Америка&answer[]=5&answer[]=3&answer[]=no&answer[]=foo&answer[]=blat&time=0%3A0%3A24

Это создаст отдельные записи для большинства полей и сделает $_GET['answer'] массивом ответов, предоставленных пользователем.

Итог: исправьте ваш файл Flash.

person Nathan Strong    schedule 17.09.2008
comment
PHP превращает ключи в массив только тогда, когда они имеют [] в конце; в противном случае он просто перезаписывает повторяющийся ключ последним указанным значением. - person Aeon; 17.09.2008

Используйте var_export($_GET), чтобы легче увидеть, какой массив вы получаете.

Из вывода вашего скрипта я вижу, что у вас есть несколько вложенных массивов. Кажется, что-то вроде:

$_GET = array( array( array("Grade1", "ln", "North America", "yuiyyu", "iuy", "uiyui", "yui","uiy","0:0:5")))

поэтому, чтобы получить эти переменные, вам нужно что-то вроде:

echo $_GET[0][0][0]; // => "Grade1"
person jackbravo    schedule 17.09.2008
comment
у него нет вложенных массивов; первый массив — это вывод echo $_GET[$field], второй — вывод print_r($dataarray); - person Aeon; 17.09.2008

вызов echo для массива всегда будет выводить "Array". print_r (из руководства по PHP) выводит удобочитаемую информацию о переменной.

person ksuralta    schedule 17.09.2008

Используйте теги <pre> перед print_r, тогда у вас будет напечатано дерево (или просто посмотрите на исходный код. С этого момента у вас будет четкое представление о том, как устроен ваш массив, и вы сможете получить желаемое значение.

Я предлагаю дополнительно прочитать о переменной $_GET и массивы для лучшего понимания его значений.

person Fernando Barrocal    schedule 17.09.2008
comment
это то, что я получаю Предупреждение: недопустимый аргумент, указанный для foreach() в /home/public_html/process.php в строке 27 - person ; 17.09.2008

Попробуй это:

foreach ($_GET as $field => $label)
{
    $datarray[]=$_GET[$field];

    echo $_GET[$field]; // you don't really need quotes

    echo "With quotes: {$_GET[$field]}"; // but if you want to use them

    echo $field; // this is really the same thing as echo $_GET[$field], so

    if($label == $_GET[$field]) {
         echo "Should always be true<br>";
    }
    echo "<br>";
}
print_r($datarray);
person SeanDowney    schedule 17.09.2008

Он печатает просто «Массив», потому что, когда вы говорите

 echo "$_GET[$field]";

PHP не может знать, что вы имеете в виду $_GET элемент $field, он видит это так, как будто вы хотите напечатать переменную $_GET. Итак, он пытается напечатать его, и, конечно же, это массив, так что вы получаете это. Как правило, когда вы хотите отобразить элемент массива, вы должны сделать это следующим образом:

echo "The foo element of get is: {$_GET['foo']}";

Фигурные скобки сообщают PHP, что все это переменная, которую необходимо интерпретировать; в противном случае он будет считать, что имя переменной само по себе $_GET.

В вашем случае, хотя вам это не нужно, вам нужно:

foreach ($_GET as $field => $label)
{
    $datarray[] = $label;
}

и если вы хотите распечатать его, просто сделайте

echo $label; // or $_GET[$field], but that's kind of pointless.

Проблема была не в вашем прошиваемом файле, верните его как было; вы знаете, что это было правильно, потому что ваша переменная $dataarray содержала все данные. Почему вы все равно хотите извлечь данные из $_GET в другой массив?

person Aeon    schedule 17.09.2008

Возможно, переменные GET сами по себе являются массивами? т.е. http://site.com?var[]=1&var[]=2

person Joshua    schedule 17.09.2008

Похоже, ваш аргумент GET сам по себе является массивом. Было бы полезно иметь как вход, так и выход.

person smo    schedule 17.09.2008