<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Matthew Byrne: the blog &#187; php</title>
	<atom:link href="http://www.matthewbyrne.co.uk/tag/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.matthewbyrne.co.uk</link>
	<description>copywriter / producer / blogger</description>
	<lastBuildDate>Sun, 03 May 2009 20:06:26 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Form breaks WordPress</title>
		<link>http://www.matthewbyrne.co.uk/projects/form-breaks-wordpress/</link>
		<comments>http://www.matthewbyrne.co.uk/projects/form-breaks-wordpress/#comments</comments>
		<pubDate>Mon, 26 Jan 2009 19:26:18 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[projects]]></category>
		<category><![CDATA[form]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://www.matthewbyrne.co.uk/?p=166</guid>
		<description><![CDATA[Just spent the last hour trying to figure out why a simple php form was breaking WordPress. The answer was a variable name clash. I used a variable called &#8216;name&#8217; in my form which seems to be linked the WP tag tags (!). To get things working I renamed &#8216;name&#8217; to &#8216;signUpName&#8217;. Whilst scrabbling around [...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-full wp-image-165" title="name" src="http://www.matthewbyrne.co.uk/wp-content/uploads/2009/01/name.png" alt="WordPress Variable Clash" width="500" height="193" /></p>
<p>Just spent the last hour trying to figure out why a simple php form was breaking WordPress. The answer was a variable name clash. I used a variable called &#8216;name&#8217; in my form which seems to be linked the WP tag tags (!).</p>
<p>To get things working I renamed &#8216;name&#8217; to &#8216;signUpName&#8217;.</p>
<p>Whilst scrabbling around for answers I did come across a good article about a <a href="http://www.mc2design.com/blog/php_self-safe-alternatives">security vulnerability when using the PHP_Self command</a>, it&#8217;s well worth a read before you build your next form.</p>
<!-- Social Bookmarking Reloaded BEGIN --><div class="social_bookmark"><em> </em><br /><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://www.matthewbyrne.co.uk/projects/form-breaks-wordpress/&amp;title=Form+breaks+WordPress" title="Add 'Form breaks WordPress' to Del.icio.us"><img src="http://www.matthewbyrne.co.uk/wp-content/plugins/social-bookmarking-reloaded/delicious.png" title="Add 'Form breaks WordPress' to Del.icio.us" alt="Add 'Form breaks WordPress' to Del.icio.us" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http://www.matthewbyrne.co.uk/projects/form-breaks-wordpress/&amp;title=Form+breaks+WordPress" title="Add 'Form breaks WordPress' to digg"><img src="http://www.matthewbyrne.co.uk/wp-content/plugins/social-bookmarking-reloaded/digg.png" title="Add 'Form breaks WordPress' to digg" alt="Add 'Form breaks WordPress' to digg" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://furl.net/storeIt.jsp?t=Form+breaks+WordPress&amp;u=http://www.matthewbyrne.co.uk/projects/form-breaks-wordpress/" title="Add 'Form breaks WordPress' to FURL"><img src="http://www.matthewbyrne.co.uk/wp-content/plugins/social-bookmarking-reloaded/furl.png" title="Add 'Form breaks WordPress' to FURL" alt="Add 'Form breaks WordPress' to FURL" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http://www.matthewbyrne.co.uk/projects/form-breaks-wordpress/&amp;title=Form+breaks+WordPress" title="Add 'Form breaks WordPress' to reddit"><img src="http://www.matthewbyrne.co.uk/wp-content/plugins/social-bookmarking-reloaded/reddit.png" title="Add 'Form breaks WordPress' to reddit" alt="Add 'Form breaks WordPress' to reddit" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http://www.matthewbyrne.co.uk/projects/form-breaks-wordpress/" title="Add 'Form breaks WordPress' to Technorati"><img src="http://www.matthewbyrne.co.uk/wp-content/plugins/social-bookmarking-reloaded/technorati.png" title="Add 'Form breaks WordPress' to Technorati" alt="Add 'Form breaks WordPress' to Technorati" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.newsvine.com/_wine/save?u=http://www.matthewbyrne.co.uk/projects/form-breaks-wordpress/&amp;h=Form+breaks+WordPress" title="Add 'Form breaks WordPress' to Newsvine"><img src="http://www.matthewbyrne.co.uk/wp-content/plugins/social-bookmarking-reloaded/newsvine.png" title="Add 'Form breaks WordPress' to Newsvine" alt="Add 'Form breaks WordPress' to Newsvine" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://ma.gnolia.com/bookmarklet/add?url=http://www.matthewbyrne.co.uk/projects/form-breaks-wordpress/&amp;title=Form+breaks+WordPress&amp;description=Form+breaks+WordPress" title="Add 'Form breaks WordPress' to Ma.gnolia"><img src="http://www.matthewbyrne.co.uk/wp-content/plugins/social-bookmarking-reloaded/magnolia.png" title="Add 'Form breaks WordPress' to Ma.gnolia" alt="Add 'Form breaks WordPress' to Ma.gnolia" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit?url=http://www.matthewbyrne.co.uk/projects/form-breaks-wordpress/&amp;title=Form+breaks+WordPress" title="Add 'Form breaks WordPress' to Stumble Upon"><img src="http://www.matthewbyrne.co.uk/wp-content/plugins/social-bookmarking-reloaded/stumbleupon.png" title="Add 'Form breaks WordPress' to Stumble Upon" alt="Add 'Form breaks WordPress' to Stumble Upon" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/share.php?u=http://www.matthewbyrne.co.uk/projects/form-breaks-wordpress/&amp;t=Form+breaks+WordPress" title="Add 'Form breaks WordPress' to FaceBook"><img src="http://www.matthewbyrne.co.uk/wp-content/plugins/social-bookmarking-reloaded/facebook.png" title="Add 'Form breaks WordPress' to FaceBook" alt="Add 'Form breaks WordPress' to FaceBook" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home?status=http://www.matthewbyrne.co.uk/projects/form-breaks-wordpress/" title="Add 'Form breaks WordPress' to Twitter"><img src="http://www.matthewbyrne.co.uk/wp-content/plugins/social-bookmarking-reloaded/twitter.png" title="Add 'Form breaks WordPress' to Twitter" alt="Add 'Form breaks WordPress' to Twitter" /></a></div>
<!-- Social Bookmarking Reloaded END -->]]></content:encoded>
			<wfw:commentRss>http://www.matthewbyrne.co.uk/projects/form-breaks-wordpress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Postcode Widget &#8211; Part 3</title>
		<link>http://www.matthewbyrne.co.uk/projects/postcode-widget-part-3/</link>
		<comments>http://www.matthewbyrne.co.uk/projects/postcode-widget-part-3/#comments</comments>
		<pubDate>Mon, 25 Aug 2008 10:59:38 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[projects]]></category>
		<category><![CDATA[Google map]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[Postcode]]></category>
		<category><![CDATA[Regex]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://www.matthewbyrne.co.uk/?p=77</guid>
		<description><![CDATA[You can see a prototype version of the widget by clicking here. Template engine I attempted this built as single piece of php but it quickly became obvious that this was not the right approach. Instead I adapted a simple template engine from my faithful O&#8217;Reilly book. This allowed me to separate the logic from [...]]]></description>
			<content:encoded><![CDATA[<p>You can see a prototype version of the widget by <a title="a working prototype of the widget" href="http://www.matthewbyrne.co.uk/postCodeWidget.php">clicking here</a>.</p>
<h3>Template engine</h3>
<p>I attempted this built as single piece of php but it quickly became obvious that this was not the right approach. Instead I adapted a simple template engine from my faithful <a href="http://oreilly.com/catalog/9781565926103/">O&#8217;Reilly book</a>. This allowed me to separate the logic from the markup</p>
<pre>function FillTemplate($inName, $inValues = array()){

	$theTemplateFile = $_SERVER['DOCUMENT_ROOT'].'/templates/'.$inName;
	if($theFile = fopen($theTemplateFile, 'r')){
		$theTemplate = fread($theFile, filesize($theTemplateFile));
		fclose($theFile);
	}
	$theKeys = array_keys($inValues);
	foreach($theKeys as $theKey){
		$theTemplate = str_replace("\{$theKey}",$inValues[$theKey],$theTemplate);
	}

	return $theTemplate;
}</pre>
<h3>Map Logic</h3>
<p>Here&#8217;s the source for the Map Logic. As an attempt to make the script secure you can see I&#8217;ve used a <a title="Postcode Regex author" href="http://regexlib.com/UserPatterns.aspx?authorId=97d6e0fb-0c53-4cfd-94f8-bf3afd2407e5">UK Postcode Regex from Stuart Wade</a> to validate the form input. And also <strong>mysql_real_escape_string()</strong> on any database calls.</p>
<p>Any security tips would be greatly appreciated</p>
<p>The Map Logic uses four separate templates to handle the interaction, and the error state.</p>
<pre>&lt;?php
//Pin counter
connectDB();
$result = mysql_query("SELECT * FROM mapPins");
$num_rows = mysql_num_rows($result);
$bindings['PINCOUNT'] = $num_rows;

//Place Pins
$pinQuery = "SELECT Latitude,Longitude FROM mapPins";
$pinArray = mysql_query($pinQuery)or die('Query failed: '.mysql_error());
$pinCode="";
while ($row = mysql_fetch_array($pinArray, MYSQL_NUM)) {;
	$i++;
	$pinCode .="var latlng$i = new GLatLng($row[0] ,$row[1] );";
	$pinCode .="map.addOverlay(new GMarker(latlng$i));";
}
$bindings['MAPPINS'] = $pinCode;

$bindings['DESTINATION'] = $PHP_SELF;

function centerFromDB($postcode){
	//Connect to the database
	connectDB();
	//Convert the Postcode to all uppercase
	$postcode = strtoupper($postcode);

	//Break the Postcode into array
	$postcode = explode(' ', $postcode);

	//Pull out the relevant fields from our database
	$query = "SELECT Latitude,Longitude FROM postcodes WHERE Pcode= '$postcode[0]'";
	$result = mysql_query($query) or die('Query failed: '.mysql_error());
	return mysql_fetch_array($result, MYSQL_ASSOC);

}

if (isset($_POST['submitPostCode']) &amp; $_POST['code']!="") {
	if(eregi("^([A-PR-UWYZ0-9][A-HK-Y0-9][AEHMNPRTVXY0-9]?[ABEHMNPRVWXY0-9]? {1,2}[0-9][ABD-HJLN-UW-Z]{2}|GIR 0AA)$",mysql_real_escape_string($_POST['code']))){
		$line = centerFromDB(mysql_real_escape_string($_POST['code']));

		//Grab the Postcode from the form
		$postcode = mysql_real_escape_string($_POST['code']);

		//Uppercase
		$postcode = strtoupper($postcode);

		//Break the Postcode into array
		$postcode = explode(' ', $postcode);

		//Output Results
		$bindings['INITIALCENTER'] = "var center = new GLatLng(".$line['Latitude'].", ".$line['Longitude'].");";
		$bindings['OUTCODE'] = $postcode[0];
		$bindings['SECONDHALF'] = $postcode[1];

		$template = "map02.template";
	}else{

		$template = "mapError.template";
	}
}elseif(isset($_POST['plotPoints'])){

	$outCode = mysql_real_escape_string($_GET['outCode']);
	$secondHalf = mysql_real_escape_string($_GET['secondHalf']);
	$mapLat = mysql_real_escape_string($_GET['mapLat']);
	$mapLng = mysql_real_escape_string($_GET['mapLng']);
	$today = date("Y-m-d");

	$line = centerFromDB($outCode.' '.$secondHalf);
	//connect to db
	connectDB();

	//add point to db
	mysql_query("INSERT INTO mapPins (outCode, secondHalf, Latitude, Longitude, theDate) VALUES('$outCode', '$secondHalf', '$mapLat', '$mapLng', '$today') ") or die(mysql_error()); 

	$pinQuery = "SELECT Latitude,Longitude FROM mapPins WHERE outCode='$outCode' AND secondHalf='$secondHalf'";
	$pinArray = mysql_query($pinQuery)or die('Query failed: '.mysql_error());

	$pinCode="";
	while ($row = mysql_fetch_array($pinArray, MYSQL_NUM)) {;
		$i++;
		$pinCode .="var latlng$i = new GLatLng($row[0] ,$row[1] );";
		$pinCode .="map.addOverlay(new GMarker(latlng$i));";
	}
	//new
	$bindings['CURRENTPC'] = $outCode.' '.$secondHalf;
	$bindings['MAPPINS'] = $pinCode;
	$bindings['NEWCENTER'] = "var center = new GLatLng(".$line['Latitude'].", ".$line['Longitude'].");";

	$template = "map03.template";
}else{

	$template = "map01.template";

}

echo FillTemplate($template, $bindings);
?&gt;</pre>
<h3>Integrating script with WordPress</h3>
<p>After developing this script I discovered that WordPress can&#8217;t run PHP in the body of a post without a plugin. Strange. So I had to put the prototype on a loose page.</p>
<p>Take a look at the trick I used to capture the output of a WordPress tag so I could incorporate it into Map Logic, and then my templates. In this example I captured the footer code, then bound it to a template tag.</p>
<pre>&lt;?php
require('./wp-blog-header.php');
ob_start();
get_footer();
$footer = ob_get_contents();
ob_end_clean();
$bindings['FOOTER'] = $footer;
?&gt;</pre>
<!-- Social Bookmarking Reloaded BEGIN --><div class="social_bookmark"><em> </em><br /><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://www.matthewbyrne.co.uk/projects/postcode-widget-part-3/&amp;title=Postcode+Widget+%26%238211%3B+Part+3" title="Add 'Postcode Widget &#8211; Part 3' to Del.icio.us"><img src="http://www.matthewbyrne.co.uk/wp-content/plugins/social-bookmarking-reloaded/delicious.png" title="Add 'Postcode Widget &#8211; Part 3' to Del.icio.us" alt="Add 'Postcode Widget &#8211; Part 3' to Del.icio.us" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http://www.matthewbyrne.co.uk/projects/postcode-widget-part-3/&amp;title=Postcode+Widget+%26%238211%3B+Part+3" title="Add 'Postcode Widget &#8211; Part 3' to digg"><img src="http://www.matthewbyrne.co.uk/wp-content/plugins/social-bookmarking-reloaded/digg.png" title="Add 'Postcode Widget &#8211; Part 3' to digg" alt="Add 'Postcode Widget &#8211; Part 3' to digg" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://furl.net/storeIt.jsp?t=Postcode+Widget+%26%238211%3B+Part+3&amp;u=http://www.matthewbyrne.co.uk/projects/postcode-widget-part-3/" title="Add 'Postcode Widget &#8211; Part 3' to FURL"><img src="http://www.matthewbyrne.co.uk/wp-content/plugins/social-bookmarking-reloaded/furl.png" title="Add 'Postcode Widget &#8211; Part 3' to FURL" alt="Add 'Postcode Widget &#8211; Part 3' to FURL" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http://www.matthewbyrne.co.uk/projects/postcode-widget-part-3/&amp;title=Postcode+Widget+%26%238211%3B+Part+3" title="Add 'Postcode Widget &#8211; Part 3' to reddit"><img src="http://www.matthewbyrne.co.uk/wp-content/plugins/social-bookmarking-reloaded/reddit.png" title="Add 'Postcode Widget &#8211; Part 3' to reddit" alt="Add 'Postcode Widget &#8211; Part 3' to reddit" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http://www.matthewbyrne.co.uk/projects/postcode-widget-part-3/" title="Add 'Postcode Widget &#8211; Part 3' to Technorati"><img src="http://www.matthewbyrne.co.uk/wp-content/plugins/social-bookmarking-reloaded/technorati.png" title="Add 'Postcode Widget &#8211; Part 3' to Technorati" alt="Add 'Postcode Widget &#8211; Part 3' to Technorati" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.newsvine.com/_wine/save?u=http://www.matthewbyrne.co.uk/projects/postcode-widget-part-3/&amp;h=Postcode+Widget+%26%238211%3B+Part+3" title="Add 'Postcode Widget &#8211; Part 3' to Newsvine"><img src="http://www.matthewbyrne.co.uk/wp-content/plugins/social-bookmarking-reloaded/newsvine.png" title="Add 'Postcode Widget &#8211; Part 3' to Newsvine" alt="Add 'Postcode Widget &#8211; Part 3' to Newsvine" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://ma.gnolia.com/bookmarklet/add?url=http://www.matthewbyrne.co.uk/projects/postcode-widget-part-3/&amp;title=Postcode+Widget+%26%238211%3B+Part+3&amp;description=Postcode+Widget+%26%238211%3B+Part+3" title="Add 'Postcode Widget &#8211; Part 3' to Ma.gnolia"><img src="http://www.matthewbyrne.co.uk/wp-content/plugins/social-bookmarking-reloaded/magnolia.png" title="Add 'Postcode Widget &#8211; Part 3' to Ma.gnolia" alt="Add 'Postcode Widget &#8211; Part 3' to Ma.gnolia" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit?url=http://www.matthewbyrne.co.uk/projects/postcode-widget-part-3/&amp;title=Postcode+Widget+%26%238211%3B+Part+3" title="Add 'Postcode Widget &#8211; Part 3' to Stumble Upon"><img src="http://www.matthewbyrne.co.uk/wp-content/plugins/social-bookmarking-reloaded/stumbleupon.png" title="Add 'Postcode Widget &#8211; Part 3' to Stumble Upon" alt="Add 'Postcode Widget &#8211; Part 3' to Stumble Upon" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/share.php?u=http://www.matthewbyrne.co.uk/projects/postcode-widget-part-3/&amp;t=Postcode+Widget+%26%238211%3B+Part+3" title="Add 'Postcode Widget &#8211; Part 3' to FaceBook"><img src="http://www.matthewbyrne.co.uk/wp-content/plugins/social-bookmarking-reloaded/facebook.png" title="Add 'Postcode Widget &#8211; Part 3' to FaceBook" alt="Add 'Postcode Widget &#8211; Part 3' to FaceBook" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home?status=http://www.matthewbyrne.co.uk/projects/postcode-widget-part-3/" title="Add 'Postcode Widget &#8211; Part 3' to Twitter"><img src="http://www.matthewbyrne.co.uk/wp-content/plugins/social-bookmarking-reloaded/twitter.png" title="Add 'Postcode Widget &#8211; Part 3' to Twitter" alt="Add 'Postcode Widget &#8211; Part 3' to Twitter" /></a></div>
<!-- Social Bookmarking Reloaded END -->]]></content:encoded>
			<wfw:commentRss>http://www.matthewbyrne.co.uk/projects/postcode-widget-part-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The SEO experiment &#8211; Part 2 Google Rank graphic</title>
		<link>http://www.matthewbyrne.co.uk/seo/the-seo-experiment-part-2-google-rank-graphic/</link>
		<comments>http://www.matthewbyrne.co.uk/seo/the-seo-experiment-part-2-google-rank-graphic/#comments</comments>
		<pubDate>Sun, 17 Aug 2008 17:26:56 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[SEO]]></category>
		<category><![CDATA[cron job]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Google Rank]]></category>
		<category><![CDATA[Google Rank graphic]]></category>
		<category><![CDATA[Open source]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[php graphic]]></category>
		<category><![CDATA[projects]]></category>

		<guid isPermaLink="false">http://www.matthewbyrne.co.uk/?p=59</guid>
		<description><![CDATA[A sites position on Google work like this: Position = Relevance of content * Google Rank So, knowing my current Google rank is going to be handy. There are a bunch of different ways to discover a sites rank from the Google Toolbar, to a million and one websites. As I want to chart the [...]]]></description>
			<content:encoded><![CDATA[<p>A sites position on Google work like this:</p>
<p><strong>Position = Relevance of content * Google Rank</strong></p>
<p>So, knowing my current Google rank is going to be handy. There are a bunch of different ways to discover a sites rank from the Google Toolbar, to a million and one websites. As I want to chart the progress of this site I also need a way to periodically record my results.</p>
<p>I need the following components: a script to periodically measure Page Rank, a database to store the results, and a script to chart the results.</p>
<h3>Page Rank Script</h3>
<p>After a quick search I came across a great <a href="http://programmabilities.com/php/?id=36">Open Source Google Rank script</a>. This script returns code for a graphic so I rewrote the function pr_image($pagerank) to return a number instead.</p>
<h3>The Cron job</h3>
<p>I set up a Cron Job to periodically call the following script. (This script is placed outside the html directory for security).</p>
<pre>
&#60;?php
//Connect to the database
include 'connect.php';

//Include the Page Rank script
include("pagerank.php");

$today = date("Y-m-d");

//Discover the current Page Rank
$gpr= new pageRank();
$gpr-&#62;printrank("http://www.matthewbyrne.co.uk");
$pageRank = $gpr-&#62;get_pr();

// Insert a row of information into the table
mysql_query("INSERT INTO googlePR (theDate, rank) VALUES('$today','$pageRank' ) ") or die(mysql_error()); 

//We've finished with the database, so close the connection
mysql_close($conn);

?&#62;
</pre>
<h3>Charting the results</h3>
<p>The results are displayed live in chart (to the right). This script still needs a bit of work, as it will run off the edge of the graphic after a couple of months, but for now does the job just fine. Also, it looks a lot nicer when the bars are not all zero, so I&#8217;m keeping my finger crossed that Google moves me up a rank or too.</p>
<pre>
&#60;?php
//Connect to the database
include 'connect.php';

//set up image
$height = 120;
$img = ImageCreate(230,$height);
$white = ImageColorAllocate($img,0xFF,0xFF,0xFF);
$black = ImageColorAllocate($img,0x00,0x00,0x00);
$blue = ImageColorAllocate($img,0x14,0x8A,0xD6);
$grey = ImageColorAllocate($img,0xCC,0xCC,0xCC);

//Query databasebase
$query= "SELECT * FROM googlePR_MB";
$data = mysql_query("SELECT * FROM googlePR_MB")
or die(mysql_error()); 

//Build array
$results = array();
while($info = mysql_fetch_array( $data )){
	$reformatDate=date('d M',strtotime($info['theDate']));
	array_push($results, array($reformatDate,$info['rank']));
}
//We've finished with the database, so close the connection
//mysql_close($conn);

$resultCount = count($results);

//Generate bars
for ($i=0;$i&#60;=$resultCount;$i++){
	imageFilledRectangle($img,20+(5*$i),($height-1)-($results[$i][1]*10),20+(5*$i)+3,$height,$blue);
}

//Generate y-scale
for ($j=0;$j&#60;10;$j++){
	ImageString($img,1,8,$height-(10*$j), $j,$grey);
}
//Add titles
ImageString($img,1,20,0,"Google Rank for www.matthewbyrne.co.uk", $black);
ImageString($img,1,20,10, $results[0][0]." - ".$results[$resultCount-1][0],$black);

//Output graphic
header('Content-Type: image/png');
ImagePNG($img);
?&#62;
</pre>
<!-- Social Bookmarking Reloaded BEGIN --><div class="social_bookmark"><em> </em><br /><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://www.matthewbyrne.co.uk/seo/the-seo-experiment-part-2-google-rank-graphic/&amp;title=The+SEO+experiment+%26%238211%3B+Part+2+Google+Rank+graphic" title="Add 'The SEO experiment &#8211; Part 2 Google Rank graphic' to Del.icio.us"><img src="http://www.matthewbyrne.co.uk/wp-content/plugins/social-bookmarking-reloaded/delicious.png" title="Add 'The SEO experiment &#8211; Part 2 Google Rank graphic' to Del.icio.us" alt="Add 'The SEO experiment &#8211; Part 2 Google Rank graphic' to Del.icio.us" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http://www.matthewbyrne.co.uk/seo/the-seo-experiment-part-2-google-rank-graphic/&amp;title=The+SEO+experiment+%26%238211%3B+Part+2+Google+Rank+graphic" title="Add 'The SEO experiment &#8211; Part 2 Google Rank graphic' to digg"><img src="http://www.matthewbyrne.co.uk/wp-content/plugins/social-bookmarking-reloaded/digg.png" title="Add 'The SEO experiment &#8211; Part 2 Google Rank graphic' to digg" alt="Add 'The SEO experiment &#8211; Part 2 Google Rank graphic' to digg" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://furl.net/storeIt.jsp?t=The+SEO+experiment+%26%238211%3B+Part+2+Google+Rank+graphic&amp;u=http://www.matthewbyrne.co.uk/seo/the-seo-experiment-part-2-google-rank-graphic/" title="Add 'The SEO experiment &#8211; Part 2 Google Rank graphic' to FURL"><img src="http://www.matthewbyrne.co.uk/wp-content/plugins/social-bookmarking-reloaded/furl.png" title="Add 'The SEO experiment &#8211; Part 2 Google Rank graphic' to FURL" alt="Add 'The SEO experiment &#8211; Part 2 Google Rank graphic' to FURL" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http://www.matthewbyrne.co.uk/seo/the-seo-experiment-part-2-google-rank-graphic/&amp;title=The+SEO+experiment+%26%238211%3B+Part+2+Google+Rank+graphic" title="Add 'The SEO experiment &#8211; Part 2 Google Rank graphic' to reddit"><img src="http://www.matthewbyrne.co.uk/wp-content/plugins/social-bookmarking-reloaded/reddit.png" title="Add 'The SEO experiment &#8211; Part 2 Google Rank graphic' to reddit" alt="Add 'The SEO experiment &#8211; Part 2 Google Rank graphic' to reddit" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http://www.matthewbyrne.co.uk/seo/the-seo-experiment-part-2-google-rank-graphic/" title="Add 'The SEO experiment &#8211; Part 2 Google Rank graphic' to Technorati"><img src="http://www.matthewbyrne.co.uk/wp-content/plugins/social-bookmarking-reloaded/technorati.png" title="Add 'The SEO experiment &#8211; Part 2 Google Rank graphic' to Technorati" alt="Add 'The SEO experiment &#8211; Part 2 Google Rank graphic' to Technorati" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.newsvine.com/_wine/save?u=http://www.matthewbyrne.co.uk/seo/the-seo-experiment-part-2-google-rank-graphic/&amp;h=The+SEO+experiment+%26%238211%3B+Part+2+Google+Rank+graphic" title="Add 'The SEO experiment &#8211; Part 2 Google Rank graphic' to Newsvine"><img src="http://www.matthewbyrne.co.uk/wp-content/plugins/social-bookmarking-reloaded/newsvine.png" title="Add 'The SEO experiment &#8211; Part 2 Google Rank graphic' to Newsvine" alt="Add 'The SEO experiment &#8211; Part 2 Google Rank graphic' to Newsvine" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://ma.gnolia.com/bookmarklet/add?url=http://www.matthewbyrne.co.uk/seo/the-seo-experiment-part-2-google-rank-graphic/&amp;title=The+SEO+experiment+%26%238211%3B+Part+2+Google+Rank+graphic&amp;description=The+SEO+experiment+%26%238211%3B+Part+2+Google+Rank+graphic" title="Add 'The SEO experiment &#8211; Part 2 Google Rank graphic' to Ma.gnolia"><img src="http://www.matthewbyrne.co.uk/wp-content/plugins/social-bookmarking-reloaded/magnolia.png" title="Add 'The SEO experiment &#8211; Part 2 Google Rank graphic' to Ma.gnolia" alt="Add 'The SEO experiment &#8211; Part 2 Google Rank graphic' to Ma.gnolia" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit?url=http://www.matthewbyrne.co.uk/seo/the-seo-experiment-part-2-google-rank-graphic/&amp;title=The+SEO+experiment+%26%238211%3B+Part+2+Google+Rank+graphic" title="Add 'The SEO experiment &#8211; Part 2 Google Rank graphic' to Stumble Upon"><img src="http://www.matthewbyrne.co.uk/wp-content/plugins/social-bookmarking-reloaded/stumbleupon.png" title="Add 'The SEO experiment &#8211; Part 2 Google Rank graphic' to Stumble Upon" alt="Add 'The SEO experiment &#8211; Part 2 Google Rank graphic' to Stumble Upon" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/share.php?u=http://www.matthewbyrne.co.uk/seo/the-seo-experiment-part-2-google-rank-graphic/&amp;t=The+SEO+experiment+%26%238211%3B+Part+2+Google+Rank+graphic" title="Add 'The SEO experiment &#8211; Part 2 Google Rank graphic' to FaceBook"><img src="http://www.matthewbyrne.co.uk/wp-content/plugins/social-bookmarking-reloaded/facebook.png" title="Add 'The SEO experiment &#8211; Part 2 Google Rank graphic' to FaceBook" alt="Add 'The SEO experiment &#8211; Part 2 Google Rank graphic' to FaceBook" /></a><a class="social_img" onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,border=0,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home?status=http://www.matthewbyrne.co.uk/seo/the-seo-experiment-part-2-google-rank-graphic/" title="Add 'The SEO experiment &#8211; Part 2 Google Rank graphic' to Twitter"><img src="http://www.matthewbyrne.co.uk/wp-content/plugins/social-bookmarking-reloaded/twitter.png" title="Add 'The SEO experiment &#8211; Part 2 Google Rank graphic' to Twitter" alt="Add 'The SEO experiment &#8211; Part 2 Google Rank graphic' to Twitter" /></a></div>
<!-- Social Bookmarking Reloaded END -->]]></content:encoded>
			<wfw:commentRss>http://www.matthewbyrne.co.uk/seo/the-seo-experiment-part-2-google-rank-graphic/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
