Results 1 to 8 of 8
  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!!

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

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

    thanks superprg, have sent you a pm.

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

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

    Hello,

    This store locator now works. I had to change all the get and _get to post and _post.

    Thanks to superprg

 

 

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