Results 1 to 8 of 8

Hybrid View

  1. #1
    Join Date
    Jan 2008
    Posts
    8
    Plugin Contributions
    0

    Default url error with php http get (Store locator)

    Hello,

    I am using a script from aciddrop.com for php/mysql + googlemaps store locator which works wonderfully - on a page on its own. (No map just 5 closest stockists to your postcode/suburb/street)
    I have put it into a define_stockists page by copying the about_us setup.

    The stockist query page shows up fine.
    When i enter a search query and click submit the page goes to the index.
    More specifically index.php?postcode=sydney rather than index.php?main_page=stockists&postcode=sydney
    If I type the correct url in the browser, the stockist page loads up correctly with all the search data.

    I looked into the html_output file and noticed how it is supposed to append the & separator.

    I am probably only 15% php knowledgeable and am fairly certain that it is a lack of php understanding. I haven't changed the script from aciddrop much as it works perfectly on a standalone page and I would like it to work perfectly in the define pages before I change it.

    Is the problem something so basic that I've overlooked it?

    Thanks for any help.

  2. #2
    Join Date
    Nov 2007
    Posts
    195
    Plugin Contributions
    2

    Default Re: url error with php http get (Store locator)

    Without the script it's impossible to say what the problem is. Do you have a link to it?

  3. #3
    Join Date
    Jan 2008
    Posts
    8
    Plugin Contributions
    0

    Default Re: url error with php http get (Store locator)

    The tutorial for the locator is here http://aciddrop.com/2007/12/17/quick...odezip-finder/
    At the bottom of the tutorial is a link to the source code zip. Actually, I'll also paste it below, please let me know if I should remove it if its too long.
    Changes I made:
    I changed the references to db to dbs as it interfered with one of zens scripts.
    I created the mysql db so commented out the create table info.
    I split this code into two pages, all code before the html doctype in a php page and all code within the body tags in the define_stockists page with a php include referencing the php page.
    Removed all the fluff eg rounded corners etc.

    Code:
    <?
    /*==============================================================================
    Application: Easy Postcode Finder
    Author: Leon Chevalier
    Version: V1.0
    Date: 16th December 2007
    URL: http://aciddrop.com/2007/12/17/quick...odezip-finder/
    ------------------------------------------------------------------------------*/
    /** 
    * The curl class
    */	
    class curl {
    
    	/** 
    	* COnstructor
    	*/	
    	function curl() {
    	
    
    		
    	}
    
    	function init_curl($ch,$url,$postfields=null,$follow=null,$cookie=null,$referer=null) {
    		
    		// Set url
    		curl_setopt($ch, CURLOPT_URL, $url);
    		
    		// Enable Post
    		if($postfields) {
    			curl_setopt ($ch, CURLOPT_POST, 1);
    			curl_setopt ($ch, CURLOPT_POSTFIELDS, $postfields);
    		}
    		
    		if($follow) {
    		curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1 ); 		
    		}
    				
    		if($referer) {
    		curl_setopt($ch, CURLOPT_REFERER, $referer);
    		}
    						
    		//Enable SSL
    		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    		
    	
    		curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)');
    		
    		//Return results as string
    		curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    				
    		return $ch;
    	
    	} // end function
    	
    
    	/*
    	Grabs a page
    	*/
    
    	function get_page($options) {
    
    	//Set options
    	foreach($options AS $key=>$value) {
    	$$key = $value;	
    	}	
    			
    		$ch = curl_init();		
    		$ch = $this->init_curl($ch,$url,$postfields,$follow,$cookie);
    		$page = curl_exec($ch);
    		curl_close($ch);
    		return $page;
    	
    	
    	}
    	
    	
    } // end class
    
    /**
     * A simple wrapper for db functions
     *
     */
    class db_custom {
    
    	/**
    	 * Constructor
    	 *
    	 * A simple wrapper for database functions
    	 *
    	 */	
    	function db_custom()	{
    	
    	// database configuration
    	$host = "localhost";
    	$user = "";
    	$pass = "";
    	$db = "postcode_finder";	
    
    	// open database connection
    	$connection = mysql_connect($host, $user, $pass) or die ("Unable to connect!");
    	// select database
    	mysql_select_db($db) or die ("Unable to select database!");
    
    
    	}
    
    	###############################################
    	## Updates an array of fields and values
    	## and reurn the resulting ID
    	###############################################
    	function quick_update($database,$fields,$values,$wherearray) {
    	//Variables
    	$num_array = count($values);
    	//Format NULL
    	$values = str_replace("'NULL'","NULL",$values);
    	//Write query
    	$query = "UPDATE `$database` SET ";
    	foreach ($fields AS $key=>$value) {
    	$count++;
    	$query .= " $fields[$key] = '$values[$key]'";
    	if ($count <> $num_array) { $query .= ","; }
    	}
    	//Create where
    	foreach ($wherearray AS $key=>$value) {
    	$counterv++;
    		$query_chk .= "$key = '" . trim($value) . "'";
    		
    			if ($counterv != count($wherearray)) {
    			$query_chk .= " AND ";
    			}
    	}
    	
    	$query .= " WHERE $query_chk";
    	$query = str_replace("'`","",$query);
    	$query = str_replace("`'","",$query);
    
    
    	$result = mysql_query($query) or die ("Error in query: $query. " . mysql_error());
    	$rows = mysql_affected_rows();
    	return $rows;
    	}
    	
    
    	######################################################
    	# Execute row
    	# runs query and gets row back
    	######################################################
    	function executeRow($query__ER,$type=null) {
    	$result__ER = mysql_query($query__ER) or die ("Error in query: $query__ER. " . mysql_error());
    		if($result__ER != 1) {
    			if($type!="array") {
    			$row__ER = mysql_fetch_object($result__ER);
    			} else {
    			$row__ER = mysql_fetch_assoc($result__ER);
    			}
    		return $row__ER;		
    		}
    	}
    	
    	######################################################
    	# Connects to the database and returns the 
    	# results in an array
    	######################################################
    	
    	function executeQuery($query,$func=null,$type="") {
    	
    		//Get the table name from the query
    		preg_match("/SELECT(.*)FROM( )([A-z_]+)/i",$query,$matches);
    		$table_name = $matches[3];
    		
    	$result = mysql_query($query) or die ("Error in query: $query. " . mysql_error());
    	$rows = mysql_num_rows($result);
    	$columns = mysql_fetch_assoc($result);
    	
    		if ($rows > 0) { // Only proceed if we have a result
    		
    		mysql_data_seek($result,0);
    			while ($row=mysql_fetch_array($result)) {
    			
    				foreach ($columns As $key=>$value) {
    				
    							
    							//Run any extra functions that have been sent over
    							if(is_array($func)) {			
    								foreach ($func AS $Fkey=>$Fvalue) {						
    								$row[$key] = $this->$Fvalue($row[$key],$key,$table_name);				
    								} // end FE			
    							} // end IF
    							
    								if($type == "object") {
    								//echo $key . "  "  . $row[$key] . "\n";
    								$tmp->$key = $row[$key];				
    								} else {
    								$tmp[$key] = $row[$key];
    								}
    									
    				}// end for each
    			
    					$results[] = $tmp;
    					unset($tmp);
    			} //end while 
    				
    		$final_result['result'] = $results;
    		$final_result['rows'] = mysql_num_rows($result);		
    		} else {
    		$final_result['rows'] = 0;		
    		}// end if
    	
    	return $final_result;
    	
    	} // end function
    	
    
    }
    
    /**
     * A postcode finder class
     *
     */
    class postcode_finder {
    
    	/**
    	* Constructor
    	*
    	*/
    	function postcode_finder($array) {
    	
    		if(is_array($array)) {
    			foreach($array AS $key=>$value) {
    			$this->$key = $value;
    			}
    		}	
    	
    		//DO stuff
    	
    	}
    
    	/**
    	* Setup database tables and insert lat longs
    	*
    	*/	
    	function setup() {
    	
    	$this->create_store_table();
    	$this->insert_example_stores();
    	$this->update_lat_lngs();	
    	
    	
    	}
    
    	/**
    	* Makes an example store table
    	*
    	*/	
    	function create_store_table() {
    	
    		//Create table
    		$query = "CREATE TABLE IF NOT EXISTS `store` (
    		  `id` int(10) NOT NULL auto_increment,
    		  `name` varchar(75) NOT NULL default '',
    		  `address` text NOT NULL,
    		  `postcode` varchar(10) NOT NULL default '',
    		  `lat` double NOT NULL default '0',
    		  `lng` double NOT NULL default '0',
    		  `domain` varchar(10) NOT NULL default '',
    		  PRIMARY KEY  (`id`)
    		) ENGINE=MyISAM";
    		$this->db->executeRow($query);	
    	
    	
    	
    	
    	}
    
    	/**
    	* Insert some example stores
    	*
    	*/	
    	function insert_example_stores() {
    	
    		//for($i=0;$i<1000;$i++) {
    	
    			$query = "
    			INSERT INTO `store` (`name` , `address` , `postcode`, `domain`) 
    			VALUES (
    			'Waterloo Station', 'Lambeth, London', 'SE1', 'co.uk'
    			), (
    			'Gatwick Airport ', 'South Terminal, Gatwick', 'RH6', 'co.uk'
    			), (
    			'Edinburgh Waverley Railway Station ', 'Network Rail, Room 255, North Block, Edinburgh', 'EH1 1BB', 'co.uk'
    			), (
    			'Beverly Hills', 'California', '90210', 'com'
    			), (
    			'Penn Station ', '17 W 32nd St New York', '10001', 'com'
    			), (
    			'La Sagrada Familia', 'Barcelona', '08013', 'es'
    			), (
    			'FC Bayern Munchen', 'Sabener Str. 51, Munchen, Germany ', '81547', 'de'
    			)		
    			";
    			
    			$this->db->executeRow($query);	
    		
    		//}
    	
    	
    	
    	}
    
    	/**
    	* Update lat lngs
    	*
    	*/	
    	function update_lat_lngs() {
    		
    	//Get the list of stores
    	$query = "SELECT * FROM store 
    				WHERE `lat` = ''
    				LIMIT 0,10";
    	$stores = $this->db->executeQuery($query);
    	$stores = $stores['result'];
    	
    	//Run through stores and get lat / lng
    	foreach($stores AS $store) {
    	
    		$latlng = $this->get_lat_long($store['postcode'],$store['domain']);
    		
    		//Update store with its lat lng
    		$this->db->quick_update("store",
    								array('lat','lng'),
    								array($latlng['lat'],$latlng['lng']),
    								array('id'=>$store['id'])
    								);			
    				
    	}
    	
    	
    	}
    
    	/**
    	* Returns a lat / long of a given postcode
    	*
    	*/	
    	function get_lat_long($postcode,$domain=null) {
    		
    		if(!$domain) {
    		$domain = "co.uk";
    		}
    
    		$url = "http://maps.google." . $domain . "/maps/geo?q=" . urlencode($postcode) . "&output=json&key=ABQIAAAAWjc0ZH2RENLxziofASg9ABQH987j_SlqISv1l93HS7ksPkvN9xRAXjKLSj-Yj2Xw7I6gP3RHQb4UQg";
    						
    		$json = $this->curl->get_page(array("url"=>$url));
    						
    		$store_data = json_decode(str_replace("&quot;","\"",htmlentities($json))); //Take care of accents
    								
    		$lng = $store_data->Placemark[0]->Point->coordinates[0];			
    		$lat = $store_data->Placemark[0]->Point->coordinates[1];
    		
    			//Return
    			if($lng && $lat) {
    	
    				return array('lat'=>$lat,
    							 'lng'=>$lng
    							 );
    						 
    			} else {
    			
    				return false;
    			
    			}
    
    	}
    
    
    	/**
    	* Get a list of our stores, sorted by distance to this postcode
    	*
    	*/	
    	function get_stores_list($postcode) {
    	
    		//If it's a UK postcode then format correctly
    		$postcode = $this->checkPostcode($postcode);
    	
    		$latlng = $this->get_lat_long($postcode);
    		
    		if(!$latlng) { //Unrecognised postcode
    		return false;
    		}
    		
    		$latitude = $latlng['lat'];
    		$longitude = $latlng['lng'];		
    //		print_r($latlng);
    		
    			$query = "SELECT *,
    						(((acos(sin((".$latitude."*pi()/180)) * sin((`lat`*pi()/180))
    						+cos((".$latitude."*pi()/180)) * cos((`lat`*pi()/180)) 
    						* cos(((".$longitude."- `lng`)*pi()/180))))*180/pi())*60*1.1515) 
    						as distance 
    							FROM `store`
    							ORDER BY distance ASC
    							LIMIT 0,10
    					";
    			$stores = $this->db->executeQuery($query);
    			$stores = $stores['result'];			
    			
    			return $stores;
    	
    	
    	}
    
    
    	/**
    	* Checks whether supplied postcode is a valid UK postcode
    	*/
    	function checkPostcode($toCheck) {
    	
    	  $orig = $toCheck;
    	
    	  // Permitted letters depend upon their position in the postcode.
    	  $alpha1 = "[abcdefghijklmnoprstuwyz]";                          // Character 1
    	  $alpha2 = "[abcdefghklmnopqrstuvwxy]";                          // Character 2
    	  $alpha3 = "[abcdefghjkstuw]";                                   // Character 3
    	  $alpha4 = "[abehmnprvwxy]";                                     // Character 4
    	  $alpha5 = "[abdefghjlnpqrstuwxyz]";                             // Character 5
    	  
    	  // Expression for postcodes: AN NAA, ANN NAA, AAN NAA, and AANN NAA
    	  $pcexp[0] = '^('.$alpha1.'{1}'.$alpha2.'{0,1}[0-9]{1,2})([0-9]{1}'.$alpha5.'{2})$';
    	
    	  // Expression for postcodes: ANA NAA
    	  $pcexp[1] =  '^('.$alpha1.'{1}[0-9]{1}'.$alpha3.'{1})([0-9]{1}'.$alpha5.'{2})$';
    	
    	  // Expression for postcodes: AANA NAA
    	  $pcexp[2] =  '^('.$alpha1.'{1}'.$alpha2.'[0-9]{1}'.$alpha4.')([0-9]{1}'.$alpha5.'{2})$';
    	  
    	  // Exception for the special postcode GIR 0AA
    	  $pcexp[3] =  '^(gir)(0aa)$';
    	  
    	  // Standard BFPO numbers
    	  $pcexp[4] = '^(bfpo)([0-9]{1,4})$';
    	  
    	  // c/o BFPO numbers
    	  $pcexp[5] = '^(bfpo)(c\/o[0-9]{1,3})$';
    	
    	  // Load up the string to check, converting into lowercase and removing spaces
    	  $postcode = strtolower($toCheck);
    	  $postcode = str_replace (' ', '', $postcode);
    	
    	  // Assume we are not going to find a valid postcode
    	  $valid = false;
    	  
    	  // Check the string against the six types of postcodes
    	  foreach ($pcexp as $regexp) {
    	  
    		if (ereg($regexp,$postcode, $matches)) {
    		  
    		  // Load new postcode back into the form element  
    		  $toCheck = strtoupper ($matches[1] . ' ' . $matches [2]);
    		  
    		  // Take account of the special BFPO c/o format
    		  $toCheck = ereg_replace ('C\/O', 'c/o ', $toCheck);
    		  
    		  // Remember that we have found that the code is valid and break from loop
    		  $valid = true;
    		  break;
    		}
    	  }
    			
    	  // Return with the reformatted valid postcode in uppercase if the postcode was 
    	  // valid
    	  if ($valid){
    	  return $toCheck;
    	  } else {
    	  $this->non_standard_postcode = true;
    	  return $orig;
    	  };
    	  
    	}	
    
    
    }
    
    //If we have a post
    if($_GET['postcode']) {
    	//Start database class
    	$db = new db_custom();
    	$curl = new curl();
    	$finder = new postcode_finder(array('db'=>$db,
    							  'curl'=>$curl));						  
    	$stores = $finder->get_stores_list($_GET['postcode']);						  
    }
    
    if($_GET['fill']) {
    
    	$db = new db_custom();
    	$curl = new curl();
    	$finder = new postcode_finder(array('db'=>$db,
    							  'curl'=>$curl));						  
    	$finder->setup();
    }
    
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    
    <head>
    
    	<title>Aciddrop.com</title>
    	<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    
    	<!-- rounded corner css -->
    	<link rel="stylesheet" type="text/css" href="/wp-content/themes/leon/libs/nifty_corners/niftyCorners.css" />
    	
    	<!-- favicon -->	
    	<link rel="shortcut icon" href="/wp-content/themes/leon/images/favicon.ico" >
    
    
    	<link href="http://mu.com/wp-content/themes/leon/style.css" type="text/css" rel="stylesheet" />
    	
    	<!--
    	Aciddrop Theme Created by Leon Chevalier @ Aciddrop (http://www.aciddrop.com/)
    	-->
    	
    	
    </head>
    
    <body>
    
    <div id="" style="width:645px;margin:0 auto">
    
    	<div style="padding-top: 0pt; padding-bottom: 0pt;" class="roundedByNifty" id="content"><b style="background-color: rgb(223, 223, 223);" class="artop"><b style="border-color: rgb(204, 204, 204); background-color: rgb(138, 199, 239);" class="re1"></b><b style="border-color: rgb(204, 204, 204); background-color: rgb(138, 199, 239);" class="re2"></b><b style="border-color: rgb(204, 204, 204); background-color: rgb(138, 199, 239);" class="re3"></b><b style="border-color: rgb(204, 204, 204); background-color: rgb(138, 199, 239);" class="re4"></b></b>
    	
    	
    		<div id="content_inner">
    	
    			<div id="header">
    				
    				<a href="/">
    				<img src="/wp-content/themes/leon/images/logo.gif" alt="Aciddrop.com" border="0" />
    				</a>
    				<p class="site_description"></p>
    		
    			</div>
    
    	
    			<div class="posts_content">
    
    		
    			<div id="post_wrapper">
    		
    			
    				<div class="post_title page">
    					<h2><a href="http://mu.com/2007/12/09/about/" title="Store finder"><img src="/wp-content/themes/leon/libs/dtr/heading.php?text=Store finder&size=16&colour=ffffff&bgr=2C90D2" border="0" style="margin-top:-3px" alt="Postcode store finder" /></a></h2>
    				</div>
    				<div class="spacer_small"></div>
    							<div class="comment_line">
    				<img src="/wp-content/themes/leon/images/comment_line.gif" alt="" />
    				</div>
    				
    				<br>
    				<br>
    																							  
    				<form action="" method="get">
    					<fieldset>
    					<legend>Enter your postcode or ZIP</legend>					
    					
    						<input type="text" name="postcode" value="<?= $_GET['postcode'] ?>"> 						
    						<input type="submit" value="GO!">
    					
    					</fieldset>
    				</form>
    				
    				<? if ($_GET['fill']) { ?>
    							
    				<h2 style="background-color:padding:2px">Database filled</h2>								
    				
    				<? } ?>
    				
    				<? if ($_GET['postcode']) { ?>
    				
    					<? if ($stores) { ?>
    										
    					<h2 style="background-color:padding:2px">The following stores were found near to you</h2>
    					
    						<? foreach($stores AS $store) { ?>
    							
    							<p>
    								<h3><?= $store['name'] ?></h3>
    								<?= $store['address'] ?><br>
    								<?= $store['postcode'] ?><br>
    								<span style="background-color:#FFFFCC"><?= number_format($store['distance'],2) ?></span> miles from you														
    							</p>
    					
    						<? } ?>
    					
    					<? } else { ?>
    					
    					<h2 style="background-color:padding:2px">That postcode was not recognised</h2>					
    					
    					
    					<? } ?>	
    					
    				
    				<? } ?>	
    	
    				</div>	
    	
    
    			</div>		
    			
    			<div class="posts_content">
    				<ul class="footer">
    					<li>&copy; 2007 Aciddrop.com</li>
    					<li><a href="#nav" title="Jump to top of page">Top</a></li>
    				</ul>
    
    			</div>
    			
    		</div>	
    		
    	<b style="background-color: rgb(223, 223, 223);" class="artop"><b style="border-color: rgb(204, 204, 204); background-color: rgb(138, 199, 239);" class="re4"></b><b style="border-color: rgb(204, 204, 204); background-color: rgb(138, 199, 239);" class="re3"></b><b style="border-color: rgb(204, 204, 204); background-color: rgb(138, 199, 239);" class="re2"></b><b style="border-color: rgb(204, 204, 204); background-color: rgb(138, 199, 239);" class="re1"></b></b></div>
    		
    	</div>
    	
    	
    	<div class="spacer_small"></div>
    	
    </div>
    </body>
    </html>

  4. #4
    Join Date
    Feb 2006
    Location
    Chicago
    Posts
    1,162
    Plugin Contributions
    0

    Default Re: url error with php http get (Store locator)

    Always enclose your script in [c0de] and [/c0de]
    in this way
    Code:
    Code here...
    else the thread becomes so long and dead....replace c0de by code
    Tutorials on Zen Cart
    http://tutorials.zen-cart.com/index.php
    ---------------
    advanced.programmer at gmail dot com
    In love with Zen Cart!!

  5. #5
    Join Date
    Jan 2008
    Posts
    8
    Plugin Contributions
    0

    Default Re: url error with php http get (Store locator)

    oops sorry, I should have known better.
    I can't edit the post, please can an admin either allow edit or put code tags around the code?
    Thanks.

  6. #6
    Join Date
    Feb 2006
    Location
    Chicago
    Posts
    1,162
    Plugin Contributions
    0

    Default Re: url error with php http get (Store locator)

    Can I see it working on your site?
    Tutorials on Zen Cart
    http://tutorials.zen-cart.com/index.php
    ---------------
    advanced.programmer at gmail dot com
    In love with Zen Cart!!

 

 

Similar Threads

  1. v139h Issue with Store Locator adding db location to store website urls
    By Painted Hills NB in forum General Questions
    Replies: 8
    Last Post: 22 Aug 2012, 03:29 AM
  2. Store Locator
    By Mustang302 in forum General Questions
    Replies: 0
    Last Post: 7 Nov 2011, 10:23 PM
  3. Replies: 1
    Last Post: 9 Oct 2011, 06:24 AM
  4. Issue in URL - http get? PHP?
    By SunflowerProducts in forum Installing on a Linux/Unix Server
    Replies: 0
    Last Post: 22 Jul 2009, 01:35 AM
  5. store locator
    By etoile03 in forum General Questions
    Replies: 1
    Last Post: 15 Dec 2007, 01:37 PM

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
disjunctive-egg