I'm not sure exactly what is going on but when a user clicks a submit button on an html page and the php script runs I get the print out from the print_r statement, but if I print a variable out with the echo statement, the value isn't returned. I've just ported the webpage and code over to a new computer, would that have something to do with it? Here is my sample php code:
<?php
print_r($_POST);
$x = $_POST[minAcres];
echo $x;
?>
Everything was working fine until I moved the code. Any thoughts why this would be happening? Here is a screenshot of the output from the print_r command.
Here is an example I regress back to the original answer of needing just quotes around minAcres. As a proof of concept i filled in post array with the beginning few values from your screen shot. minAcres = 0. Output = '0'. Maybe your output has been formatted to not show the 0 but show blank/empty
<?php
$_POST = array(
'selectCountries' => array('Columbia'),
'startDate' => '2001-01-01',
'minAcres' => 0
);
print_r($_POST);
$x = $_POST['minAcres'];
echo $x;
?>
Output:
Array
(
[selectCountries] => Array
(
[0] => Columbia
)
[startDate] => 2001-01-01
[minAcres] => 0
)
0
Simple syntax error
$x = $_POST['minAcres'];
quotes needed around array's key.
Related
Previously I use the PHP file from my own hosting, but the problem occurred when I moved to my client's (GoDaddy).
I have two inputs - Automotive and Education (I have more but for this question, I just use two as example)
In my own, both input will print the output without problem. But in GoDaddy, only Education can produce output, while Automotive produce blank page. So I add this code:
echo '<pre>';
print_r($res);
echo '</pre>';
For input Automotive, I got:
<pre>mysqli_result Object
(
[current_field] => 0
[field_count] => 1
[lengths] =>
[num_rows] => 9
[type] => 0
)
</pre>
For input Edication, I got:
<pre>mysqli_result Object
(
[current_field] => 0
[field_count] => 1
[lengths] =>
[num_rows] => 4
[type] => 0
)
</pre>
[{"subcategory":"Adult & Continuing Education"},{"subcategory":"Early Childhood Education"},{"subcategory":"Educational Resources"},{"subcategory":"Other Educational"}]
What I have done so far:
Check the query - No problem. The query return the desired result in phpmyadmin
Increase memory limit - Done but in PHP setting, still stated as Default even after refresh the Dedicated IIS Application Pool
I have other input with its output/num rows more than 9 but it return the result without problem
PHP code:
<?php
if($_SERVER['REQUEST_METHOD']=='GET') {
require_once('dbConnect.php');
$category = $_GET['category'];
$sql = "SELECT subcategory FROM wg_categories WHERE category = '$category'";
$res = mysqli_query($con,$sql);
$result = array();
while($row = mysqli_fetch_array($res)){
array_push($result,
array('subcategory'=>$row[0]
));
}
echo json_encode($result);
mysqli_close($con);
}
?>
Is there something I have missed?
error_reporting - E_ALL
display_errors - on
log_errors - on
After reviewing php.net, the problem maybe at $row[0]. because the first element returned maybe $row[1]; to match the row id's in MySQL. So that maybe where the break is happening because it's accessing an element that may not exist.
http://php.net/manual/en/function.array.php
It may also be an issue with how MySQL is returning the array. Look at the below link for help, MySQLi driver maybe returning the array, as an Array of arrays or as an associative array, which is where the issue is coming from.
http://php.net/manual/en/mysqli-result.fetch-assoc.php
You may need to do the rows as associative. So using the actual column names. Like id, firstname, lastname etc. IE, $row['id']; $row['table_name'];
You may also want to try adding a try catch block, and then var dumping to see what is actually being returned or what everything looks like at that particular time. Then removing it once you have figured out what is going wrong.
http://php.net/manual/en/language.exceptions.php
I have a variable and when I output it with print_r like this:
print_r($sort_order[$field->name]);
I get this:
Array ( [0] => Array ( [sort_order] => 92 ) )
but I only need the value which is 92. How can I do so it outputs only that when echoing it? example:
echo $sort_order[$field->name];
should output simple
92
Your $sortOrder array is actually an array of arrays, like:
[
[ 'sort_order' => 92 ]
]
That's why you can't print it like you expect.
Try:
echo $sort_order[0]['sort_order'];
Output:
92
The print_r() function is used to print human-readable information about a variable.
You can do both print and echo to output the required value:
echo $sort_order[$field->name];
print $sort_order[$field->name];
Hope this helps.
The command print_r displays the variable in a human readable way. So if you need to know all the info in a variable (in particular for large arrays), then you use that. For other use, e.g. when you only need to know the content (in I guess 99.999% of all the cases) you should either use echo as you already mentioned it or print (althoug, they are more or less the same).
Please consider this links for futher information
http://php.net/manual/en/function.print-r.php
What's the difference between echo, print, and print_r in PHP?
I have an array that is filled with different sayings and am trying to output a random one of the sayings. My program prints out the random saying, but sometimes it prints out the variable name that is assigned to the saying instead of the actual saying and I am not sure why.
$foo=Array('saying1', 'saying2', 'saying3');
$foo['saying1'] = "Hello.";
$foo['saying2'] = "World.";
$foo['saying3'] = "Goodbye.";
echo $foo[array_rand($foo)];
So for example it will print World as it should, but other times it will print saying2. Not sure what I am doing wrong.
Drop the values at the start. Change the first line to just:
$foo = array();
What you did was put values 'saying1' and such in the array. You don't want those values in there. You can also drop the index values with:
$foo[] = 'Hello.';
$foo[] = 'World.';
That simplifies your work.
You declared your array in the wrong way on the first line.
If you want to use your array as an associative Array:
$foo=Array('saying1' => array (), 'saying2' => array(), 'saying3' => array());
Or you can go for the not associative style given by Kainaw.
Edit: Calling this on the not associative array:
echo("<pre>"); print_r($foo); echo("</pre>");
Has as output:
Array
(
[0] => saying1
[1] => saying2
[2] => saying3
[saying1] => Hello.
[saying2] => World.
[saying3] => Goodbye.
)
Building on what #Answers_Seeker has said, to get your code to work the way you expect it, you'd have to re-declare and initialise your array using one of the methods below:
$foo=array('saying1'=>'Hello.', 'saying2'=>'World.', 'saying3'=>'Goodbye.');
OR this:
$foo=array();
$foo['saying1'] = "Hello.";
$foo['saying2'] = "World.";
$foo['saying3'] = "Goodbye.";
Then, to print the contents randomly:
echo $foo[array_rand($foo)];
When I attempt to determine if a user is in an array of users, for some reason it is only returning true when the user is in the 0th position.
For the life of me I cannot figure out what I am doing wrong.
This does not echo "True"
echo $usersign; // RDW
print_r($these_analysts[0]); // Array ( [0] => JKB [1] => RDW )
if(in_array($usersign,$these_analysts[0])){
echo "True";
}
This echoes "True"
echo $usersign; // RDW
print_r($these_analysts[0]); // Array ( [0] => RDW [1] => CLM )
if(in_array($usersign,$these_analysts[1])){
echo "True";
}
EDIT:
vardump gives a much more comprehensive view of the array, whereas print_r did show the trailing spaces, it didn't catch my eye.
For some reason the first element of each array was giving string3, and all others were giving string4.
You have a lot of syntax errors.
When you use strings, it is always better prace to put strings in single or double quotes. It doesn't matter which one (as far as speed is concerned).
Also, you need commas between the elements.
I entered the following code and it works.
$usersign = 'RDW';
$these_analysts[0] = array( 'JKB', 'RDW' );
print_r( $these_analysts );
if(in_array($usersign,$these_analysts[0])) echo "True";
Try:
$usersign = 'RDW';
$these_analysts[1] = Array ( 0 => 'RDW', 1 => 'CLM' );
if(in_array($usersign,$these_analysts[1])){
echo "True";
}
That should work.
This is happening (at least in my testing) if you specify RDW as a constant without defining these constants before using them. If you put your initials in double-quotes (i.e. use explicit strings) then everything works fine. If you want to use them as constants, then define these constants first:
define("RDW","RDW");
define("JKB","JKB");
And then your code works as expected again.
You're missing ; on half of your lines, you're using base strings instead of " around them, and your Array syntax is invalid (should be Array("JKB","RDW");). Maybe if these are fixed it might have a chance of working.
You have punctuation errors:
$these_analysts[0] = Array ( [0] => JKB [1] => RDW )
should be
$these_analysts = Array ( 0 => "JKB", 1 => "RDW" );
*This is the actual way you need to do *
$usersign = 'RDW';
$these_analysts = array ( 0 => 'RDW', 1 => 'CLM' );
if(in_array($usersign,$these_analysts)){
echo "True";
}
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
)
)
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®ion=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.
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.