This will count your outgoing hits so you know where people are going from your site. This was created quickly to manage outgoing hits, perhaps it'll be of some use. I heavily commented it so hopefully all will understand its logic. It is a very simple script. It just tracks url and number of hits.
By : philip
A new version of this lives here :
http://www.theprojects.org/scripts/linkTracker/
<?php // : Filename : go.php // : Version 0.0.1d
// Me : Philip Olson @ theprojects.org // : Do whatever you want, just don't take credit as your own. // : NO CREDIT REQUIRED. :-) This is simple, all should learn to // create such a script, which is why it is so commented :-)
// Use : <a href="go.php?url=www.google.com">google</a> // : Will insert url name and hit count into database. // : Manages outgoing hit count.
// Set : mysql table name hits and url. hits is integer about 8chars // and url is to hold at least the length of your longest linked // url, set to about or at least 80chars. // Ex : CREATE TABLE url_redirect ( // url varchar(100) NOT NULL, // hits int(10) DEFAULT '1' NOT NULL, // PRIMARY KEY (url) // ); // // TODO: Error checking does not exist and should / will in version .2 // If you want a version .2 then email author and ask!
/*----------------------------------------------------------------- BEGIN USER CONFIGURATIONS -----------------------------------------------------------------*/
// If go.php is called directly, goes to default_url.
$default_url = 'www.theprojects.org';
// Your database settings. You should include these from a secure // location (out of your web root) but it's up to you :-)
// Debug TRUE or FALSE. If you're debuggin, set to TRUE
$debug = FALSE;
/*----------------------------------------------------------------- END USER CONFIGURATIONS ------------------------------------------------------------------*/
// Db connect function function db_connect() { global $db_host,$db_name,$db_user,$db_pass,$db_table,$connected; global $err;
if ($conn) { $db_link = mysql_select_db($db_name,$conn); if ($db_link) { $connected = TRUE; } else { $err .= '[Db not being selected]'; } } else { $err .= '[Db not being connected]'; } }
// This connects to db. In future consider more 'useful' placement // for this function. db_connect();
// If $url is not empty then process request if (!empty($url)) {
// If connected to database then insert info into database otherwise // just redirect url. if ($connected) { $msg .= '[$connected is TRUE, database being query\'d]';
// Select current hit count from db where field url equals url $r = mysql_query ("select hits from $db_table WHERE url='$url'");
// Return the results from above query $hits = @mysql_result($r,0);
// If not yet in database (0 hits) then insert new url, value=1 hit if ($hits == 0) { $q = "INSERT INTO $db_table (url,hits) VALUES('$url','1')";
// Else use current hit count plus 1 as we just got a hit } else { $q = "UPDATE $db_table SET hits = $hits+1 WHERE url='$url'"; }
// And finally, put info into the database mysql_query($q); }
// Else $url is empty so set as default $host } else { $url = "$default_url"; }
// If debug is TRUE then show debug information and do not redirect. if ($debug) {
print '<li>$url is ' . $url; print '<li>$hits is ' . $hits; print '<li>$q is ' . $q; print '<li>db_connect is ' . print db_connect();
// If $msg and $err are not empty then print them out. if (!empty($msg)) { print '<li>Messages are ' . $msg; } if (!empty($err)) { print '<li>Errors are ' . $err; }
} else {
// Do redirection. To be paranoid (for no good reason), clear // cache first. header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); header ("Pragma: no-cache"); header ("Cache-Control: no-cache, must-revalidate"); header ("Location: http://$url"); exit; }
// Email me questions, will most likely answer them. ?>
DISCLAIMER: The content provided in this article is not warranted or guaranteed by Developer Shed, Inc. The content provided is intended for entertainment and/or educational purposes in order to introduce to the reader key ideas, concepts, and/or product reviews. As such it is incumbent upon the reader to employ real-world tactics for security and implementation of best practices. We are not liable for any negative consequences that may result from implementing any information covered in our articles or tutorials. If this is a hardware review, it is not recommended to open and/or modify your hardware.