php not working with json

Hello everybody,

I have a little code for you awesome expert PHP programmers out there. I have no idea what I’m doing…kind of.

Basically, what’s wrong is that the files I am using for the website are using a version of PHP different from that of the web host itself - I think. The problem is that Open Flash Chart does not display anything. I think what’s going wrong is somewhat related to

"open flash chart
json parse error [syntax error] error at character 0, line 1:
0:
"

But I’m not sure.

I have some code here. This is only a small part of the code in the PHP file. I think the problem lies somewhere in here…

[php]public function getpilotsjson()
{
$page = $this->get->page; // get the requested page
$limit = $this->get->rows; // get how many rows we want to have into the grid
$sidx = $this->get->sidx; // get index row - i.e. user click to sort
$sord = $this->get->sord; // get the direction
if(!$sidx) $sidx =1;

	/* Do the search using jqGrid */
	$where = array();
	if($this->get->_search == 'true') 
	{
		$searchstr = jqgrid::strip($this->get->filters);
		$where_string = jqgrid::constructWhere($searchstr);
		
		# Append to our search, add 1=1 since it comes with AND
		#	from above
		$where[] = "1=1 {$where_string}";
	}
	
	Config::Set('PILOT_ORDER_BY', "{$sidx} {$sord}");
	
	# Do a search without the limits so we can find how many records
	$count = count(PilotData::findPilots($where));
	
	if($count > 0) 
	{
		$total_pages = ceil($count/$limit);
	} 
	else 
	{
		$total_pages = 0;
	}
	
	if ($page > $total_pages) 
	{
		$page = $total_pages;
	}
	
	$start = $limit * $page - $limit; // do not put $limit*($page - 1)
	if ($start < 0) 
	{
		$start = 0;
	}
	
	# And finally do a search with the limits
	$allpilots = PilotData::findPilots($where, $limit, $start);
	if(!$allpilots)
	{
		$allpilots = array();
	}
	
	# Form the json header
	$json = array(
		'page' => $page,
		'total' => $total_pages,
		'records' => $count,
		'rows' => array()
	);
	
	# Add each row to the above array
	foreach($allpilots as $row)
	{
		$status = ($row->retired==0) ? 'Active' : 'Retired';
		$location = '<img src="'.Countries::getCountryImage($row->location).'" alt="'.$row->location.'" />';
		$edit = '<a href="'.adminurl('/pilotadmin/viewpilots?action=viewoptions&pilotid='.$row->pilotid).'">Edit</a>';
		
		$tmp = array(
			'id' => $row->id,
			'cell' => array(
				# Each column, in order
				$row->id,
				$row->firstname,
				$row->lastname,
				$row->email,
				$location,
				$status,
				$row->rank,
				$row->totalflights,
				$row->totalhours,
				$row->lastip,
				$edit,
			),
		);
		
		$json['rows'][] = $tmp;
	}
	
	header("Content-type: text/x-json");
	echo json_encode($json);
}
		[/php]

Thanks in advance for all help!

First thing I would do is change this

[php]$json[‘rows’][] = $tmp;[/php]

to

[php]$json[‘rows’] = $tmp;[/php]

that way when you read it in from AJAX (I’m assuming).

[php]success: function(info) { // Grab the data from php and then display it:

// Variables * Self-Explanatory *
var id = info.rows.id, // Grab id ?: [/php]

I really don’t know how your array is set up and you might have to modify the array some. From what I understand is you want to have key (index) => value relationship so when you go into JavaScript (I prefer using JQuery) it will be in Object format.

Sponsor our Newsletter | Privacy Policy | Terms of Service