I'm probably just doing something stupid here, but I can't see the cause of the error. I'm getting a Parse error on a for loop in a pagination function I'm writing in PHP; heres the full error.
PHP Parse error: parse error, expecting `')'' in /Users/danielsgroves/Sites/Gouland/search.php on line 95
And the full function that the error is occurring in is as follows:
private function pagination($scope, $keyword)
{
$pages = 15;
$pagination = '<ul>';
for ($i = 0; $i < $pages; i++) {
$pagination .= "<li><a id=\"a$i\" class=\"na\" href=\"?q=$keyword&scope=$scope&page=$i\">$i</a></li>";
}
$pagination .= '</ul>';
return $pagination;
}
As you may have already established from what I said the line 95 mentioned on the error is for ($i = 0; $
etc. The full class file is below. I've included the commenting just incase it helps.
Class BingSearch
{
private $APPID = "SOME API KEY";
private $keyword;
private $scope;
private $page;
private $count;
private $offset;
private $response;
private $results;
/**
* Set the object up with required information to perform the search. Once
* the object is setup the getResults() method should be called to display
* the results where required.
* @param (String) $keyword = The search string
* @param (String) $scope = The scope of the search; web, ticket, image,
* video, news
* @param (Int) $page = The required results page.
* @public
*/
public function __construct($keyword, $scope, $page)
{
$this->keyword = urlencode($keyword);
$this->scope = $scope;
$this->page = $page;
}
/**
* Runs the necessary internal methods to fetch and display the required
* results. Required information should be provided into the constructor
* on object creation. This function will not return any information,
* but 'echo' is straight out onto the page. Each returned result will
* be placed inside it's own HTML5 <article> tag. Simply call this
* method from the location in your templates of where you would like
* the search results to be placed.
* @public
*/
public function getResults()
{
$this->fetchFeed();
$this->generateWebResults();
}
/**
* Fetches the JSON feed from the Google bing API. Uses private class
* variables for the required information.
* @private
*/
private function fetchFeed()
{
$request = "http://api.search.live.net/json.aspx?Appid=$this->APPID&query=$this->keyword&sources=$this->scope&$this->count&$this->offset";
$this->response = file_get_contents($request);
$this->results = json_decode($this->response);
}
/**
* Formats the returned JSON feed by adapting it for HTML. Each result is
* placed within an <article> tag. The title is an <h3> which also links
* to the actual result. <span class="cached"> is the cache link and
* the description is placed within a <p>. Finally, <span class="fullLink">
* contains the URL for the content, which is also linked.
* @private
*/
private function generateWebResults()
{
if($this->results->SearchResponse->Web->Total != 0) {
foreach($this->results->SearchResponse->Web->Results as $value) {
if (!isset($value->Description))
$value->Description = '';
echo "<article>";
echo "<h3><a href=\"$value->Url\" title=\"Go to $value->Title\">$value->Title</a></h3>";
echo "<span class=\"cached\"><a href=\"$value->CacheUrl\" title=\"View Cached Version\">Cached</a></span>";
echo "<p>" . strip_tags($value->Description) . "</p>";
echo "<span class=\"fullLink\"><a href=\"$value->Url\" title=\"Go to $value->Title\">$value->Url</a></span>";
echo "</article>";
}
}
}
private function pagination($scope, $keyword)
{
$pages = 15;
$pagination = '<ul>';
for ($i = 0; $i < $pages; i++) {
$pagination .= "<li><a id=\"a$i\" class=\"na\" href=\"?q=$keyword&scope=$scope&page=$i\">$i</a></li>";
}
$pagination .= '</ul>';
return $pagination;
}
}
To use the function this is the PHP that is run.
require 'search.php';
$search = new BingSearch($query, $source, $query);
$search->getResults();
Does anyone fancy pointing me in the right direction, it's probably something really small that I've just missed after looking at it for too long.
Thanks,
Dan.
for ($i = 0; $i < $pages; i++)
You forgot a $, replace i++ with $i++.
Your loop
for ($i = 0; $i < $pages; i++) {
$pagination .= "<li><a id=\"a$i\" class=\"na\" href=\"?q=$keyword&scope=$scope&page=$i\">$i</a></li>";
}
You have missed a $ in your loop
for ($i = 0; $i < $pages; $i++) {
$pagination .= "<li><a id=\"a$i\" class=\"na\" href=\"?q=$keyword&scope=$scope&page=$i\">$i</a></li>";
}
You forgot the dollar sign for incrementing $i
.
private function pagination($scope, $keyword)
{
$pages = 15;
$pagination = '<ul>';
for ($i = 0; $i < $pages; $i++) {
$pagination .= "<li><a id=\"a$i\" class=\"na\" href=\"?q=$keyword&scope=$scope&page=$i\">$i</a></li>";
}
$pagination .= '</ul>';
return $pagination;
}
In that line, replace i++
with $i++
. It is missing the $ character.