Question

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

This is the output I am getting. I see the data is there in datarray but when I echo $_GET[$field]

I only get "Array"

But print_r($datarray) prints all the data. Any idea how I pull those values?

OUTPUT

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

Solution

EDIT: When I completed your test, here was the final 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

This is probably a malformed URL. When you pass duplicate keys in a query, PHP makes them an array. The above URL should probably be something like:

http://hofstrateach.org/Roberto/process.php?grade=Grade1&schoolname=Nathan&region=North%20America&answer[]=5&answer[]=3&answer[]=no&answer[]=foo&answer[]=blat&time=0%3A0%3A24

This will create individual entries for most of the fields, and make $_GET['answer'] be an array of the answers provided by the user.

Bottom line: fix your Flash file.

OTHER TIPS

Use var_export($_GET) to more easily see what kind of array you are getting.

From the output of your script I can see that you have multiple nested arrays. It seems to be something like:

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

so to get those variables out you need something like:

echo $_GET[0][0][0]; // => "Grade1"

calling echo on an array will always output "Array". print_r (from the PHP manual) prints human-readable information about a variable.

Use <pre> tags before print_r, then you will have a tree printed (or just look at the source. From this point you will have a clear understanding of how your array is and will be able to pull the value you want.

I suggest further reading on $_GET variable and arrays, for a better understanding of its values

Try this:

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);

It's printing just "Array" because when you say

 echo "$_GET[$field]";

PHP can't know that you mean $_GET element $field, it sees it as you wanting to print variable $_GET. So, it tries to print it, and of course it's an Array, so that's what you get. Generally, when you want to echo an array element, you'd do it like this:

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

The curly brackets tell PHP that the whole thing is a variable that needs to be interpreted; otherwise it will assume the variable name is $_GET by itself.

In your case though you don't need that, what you need is:

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

and if you want to print it, just do

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

The problem was not with your flash file, change it back to how it was; you know it was correct because your $dataarray variable contained all the data. Why do you want to extract data from $_GET into another array anyway?

Perhaps the GET variables are arrays themselves? i.e. http://site.com?var[]=1&var[]=2

It looks like your GET argument is itself an array. It would be helpful to have the input as well as the output.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top