Hello and welcome to our community! Is this your first visit?
Register
Enjoy an ad free experience by logging in. Not a member yet? Register.
Results 1 to 10 of 10
  1. #1
    Banned
    Join Date
    Mar 2007
    Posts
    1,523
    Thanks
    116
    Thanked 0 Times in 0 Posts

    Question How can I get USERID from setting RSUSER session?

    hi,

    When a user logs in to my site, a session is set to show their username but I would like to show their USERID too?!

    here is my login functions:
    Code:
    function checkPass($login, $password) {
    	/*
    	Password checking function:
    	This is a simple function that takes the $login name and
    	$password that a user submits in a form and checks that a
    	row exists in the database where:
    
    	the value of the 'login' column is the same as the value in $login
    	and
    	the value of the 'password' column is the same as the value in $password
    
    	If exactly one row is returned, then that row of data is returned.
    	If no row is found, the function returns 'false'.
    	*/
    	global $link;
    
    	$query="SELECT * FROM members_copy WHERE rsUser='$login' and rsPass='$password'";
    	$result=mysql_query($query, $link)
    		or die("checkPass fatal error: ".mysql_error());
    
    	// Check exactly one row is found:
    	if(mysql_num_rows($result)==1) {
    		$row=mysql_fetch_array($result);
    		return $row;
    	}
    	//Bad Login:
    	return false;
    } // end func checkPass($login, $password)
    
    
    /******************************************************\
     * Function Name : cleanMemberSession($login, $pass)
     *
     * Task : populate a session variable
     *
     * Arguments : string $login, string $pass
    				taken from users table in db.
     *
     * Returns : none
     *
     \******************************************************/
    function cleanMemberSession($login, $password) {
    	/*
    	Member session initialization function:
    	This function initializes 3 session variables:
      $login, $password and $loggedIn.
    
    	$login and $password are used on member pages (where you
    	could allow the user to change their password for example).
    
    	$loggedIn is a simple boolean variable which indicates
    	whether or not the user is currently logged in.
    	*/
    	
    	$_SESSION["rsUser"]=$login;
    	$_SESSION["rsPass"]=$password;
    	$_SESSION["loggedIn"]=true;
    } // end func cleanMemberSession($login, $pass)
    I want to just write a select SQL in my page and show the USERID WHERE RSUSER = SESSION_['rsUser'] ?! this doesn't work though I sort of tried it?!

  • #2
    Super Moderator
    Join Date
    Feb 2009
    Location
    England
    Posts
    539
    Thanks
    8
    Thanked 63 Times in 54 Posts
    PHP Code:
    function cleanMemberSession($login$password$id) {
        
    /*
        Member session initialization function:
        This function initializes 3 session variables:
      $login, $password and $loggedIn.

        $login and $password are used on member pages (where you
        could allow the user to change their password for example).

        $loggedIn is a simple boolean variable which indicates
        whether or not the user is currently logged in.
        */
        
        
    $_SESSION["rsUserID"]=$id;
        
    $_SESSION["rsUser"]=$login;
        
    $_SESSION["rsPass"]=$password;
        
    $_SESSION["loggedIn"]=true;

    Then tweak your current login code slightly:

    PHP Code:
    if ($user checkPass($_REQUEST['login'], $_REQUEST['password'])) {
      
    cleanMemberSession($user['rsUser'], $user['rsPass'], $user['rsUserId']);
    } else {
      echo(
    'Login failed');

    Though I obviously don't know what the user ID field is called, nor what your HTML form fields are called. You'll have to tweak the code to suit.

    Later you can display the user ID with:

    PHP Code:
    echo($_SESSION['rsUserID']); 
    lamped.co.uk :: Design, Development & Hosting
    marcgray.co.uk :: Technical blog

  • #3
    Banned
    Join Date
    Mar 2007
    Posts
    1,523
    Thanks
    116
    Thanked 0 Times in 0 Posts
    hi, thanks, I just tried that, I don't get the ID?!

  • #4
    Super Moderator
    Join Date
    Feb 2009
    Location
    England
    Posts
    539
    Thanks
    8
    Thanked 63 Times in 54 Posts
    It's impossible to know why without the full code and knowing what the HTML form is like.
    lamped.co.uk :: Design, Development & Hosting
    marcgray.co.uk :: Technical blog

  • #5
    Banned
    Join Date
    Mar 2007
    Posts
    1,523
    Thanks
    116
    Thanked 0 Times in 0 Posts
    here is my code for a login page:

    Code:
    <?php
    session_start();
    include_once("config.php");
    
    $ebits = ini_get('error_reporting');
    error_reporting($ebits ^ E_NOTICE);
    /*
    Login script:
    This script does the following:
    
    Checks that the user is NOT already logged in - if they are they
    are redirected to the members page by the 'checkLoggedIn()' function.
    
    Checks if the login form has been submitted - if so, the 'login' and
    'password' fields are checked to ensure they are of the correct format and length.
    If there are any problems here an error is added to the $messages array and
    then the script executes the 'doIndex()' function - this function basically
    outputs the main 'index' page for this script - ie the login form.
    
    If there are no problems with the previous step, the 'login' and 'password'
    field data is passed to the 'checkPass' function to check that an entry
    exists in the 'users' table for that login/password pair.
    If nothing is returned from the 'checkPass()' function, an error is
    added to the $messages array and the 'doIndex()' function is called as above.
    
    If a row of data is returned from the 'users' table, the data is passed to
    the 'cleanMemberSession()' function - which initializes session variables and
    logs the user in.  The user is then forwarded to the members page.
    
    If the form hasn't yet been submitted, then the 'doIndex()' function is called
    and the login page is displayed.
    */
    // Check user not logged in already:
    checkLoggedIn("no");
    
    // Page title:
    $title="Member Login Page";
    if (isset($_POST['rsUser'])) 
    {
    $msg = 'You must enter a valid username/password';
    header('Location: default.php?msg='.$msg);
    }
    
    
    // if $submit variable set, login info submitted:
    if(isset($_POST["submit"])) {
    	//
    	// Check fields were filled in
    	//
    	// login must be between 4 and 15 chars containing alphanumeric chars only:
    	field_validator("rsUser", $_POST["rsUser"], "alphanumeric", 3, 15);
    	// password must be between 4 and 15 chars - any characters can be used:
    	field_validator("rsPass", $_POST["rsPass"], "string", 3, 15);
    
    	// if there are $messages, errors were found in validating form data
    	// show the index page (where the messages will be displayed):
    	if($messages){
    		doIndex();
    		// note we have to explicity 'exit' from the script, otherwise
    		// the lines below will be processed:
    		exit;
    	}
    
    	// OK if we got this far the form field data was of the right format;
    	// now check the user/pass pair match those stored in the db:
    	/*
    	If checkPass() is successful (ie the login and password are ok),
    	then $row contains an array of data containing the login name and
    	password of the user.
    	If checkPass() is unsuccessful however, $row will simply contain
    	the value 'false' - and so in that case an error message is
    	stored in the $messages array which will be displayed to the user.
    	*/
        if( !($row = checkPass($_POST["rsUser"], $_POST["rsPass"])) ) {
    		// login/passwd string not correct, create an error message:
            $messages[]="Incorrect login/password, try again";
        }
    
    	/*
    	If there are error $messages, errors were found in validating form data above.
    	Call the 'doIndex()' function (which displays the login form) and exit.
    	*/
    	if($messages){
    		doIndex();
    		exit;
    	}
    
    	/*
    	If we got to this point, there were no errors - start a session using the info
    	returned from the db:
    	*/
    	cleanMemberSession($row["rsUser"], $row["rsPass"], $row["USERID"]);
    
    	// and finally forward user to members page (populating the session id in the URL):
    	header("Location: main.php");
    } else {
    	// The login form wasn't filled out yet, display the login form for the user to fill in:
    	doIndex();
    }
    
    /*
    This function displays the default 'index' page for this script.  This consists of just a simple
    login form for the user to submit their username and password.
    */
    function doIndex() {
    	/*
    	Import the global $messages array.
    	If any errors were detected above, they will be stored in the $messages array:
    	*/
    	global $messages;
    
    	/*
    	also import the $title for the page - note you can normally just declare all globals on one line
    	- ie:
    	global $messages, $title;
    	*/
    	global $title;
    }
    	// drop out of PHP mode to display the plain HTML:
    ?>
    <!doctype html>
    <html>
    <head>
    <title>List of Pubs and Bars in the UK</title>
    <meta name="description" content="Pubs and bars in the UK, nightlife for food and drink" />
    <meta name="keywords" content="Pubs, bars, List, uk, nightlife, drinking, drinks, beer, lager, food" />
    <meta name="Content-Language" content="en-gb" />
    <meta name="robots" content="FOLLOW,INDEX" />
    <meta name="revisit-after" content="2 days" />
    <meta name="copyright" content="jbiddulph.com" />
    <meta name="author" content="John Biddulph - Professional web site design and development in the south of england mainly worthing and brighton" />
    <meta name="distribution" content="Global" />
    <meta name="resource-type" content="document" />
    <link rel="stylesheet" type="text/css" href="css/reset.css" />
    <link rel="stylesheet" type="text/css" href="css/ui-lightness/jquery-ui-1.8.6.custom.css" title="default" />
    <link rel="alternate stylesheet" type="text/css" href="css/south-street/jquery-ui-1.8.6.custom.css" title="1" />
    <link rel="alternate stylesheet" type="text/css" href="css/redmond/jquery-ui-1.8.6.custom.css" title="2" />
    <link rel="alternate stylesheet" type="text/css" href="css/custom-theme/jquery-ui-1.8.6.custom.css" title="3" />
    <script type="text/javascript" src="js/html5.js"></script>
    <script type="text/javascript" src="js/stylechanger.js"></script>
    <script type="text/javascript" src="js/jquery-1.4.2.min.js"></script>
    <script type="text/javascript" src="js/jquery-ui-1.8.6.custom.min.js"></script>
    <script type="text/javascript">
    			$(function(){
    
    				// Accordion
    				$("#accordion").accordion({ header: "h3" });
    	
    				// Tabs
    				$('#tabs').tabs();
    	
    
    				// Dialog			
    				$('#dialog').dialog({
    					autoOpen: false,
    					width: 600,
    					buttons: {
    						"Ok": function() { 
    							$(this).dialog("close"); 
    						}, 
    						"Cancel": function() { 
    							$(this).dialog("close"); 
    						} 
    					}
    				});
    				
    				// Dialog Link
    				$('#dialog_link').click(function(){
    					$('#dialog').dialog('open');
    					return false;
    				});
    
    				// Datepicker
    				$('#datepicker').datepicker({
    					inline: true
    				});
    				
    				
    				//hover states on the static widgets
    				$('#dialog_link, ul#icons li').hover(
    					function() { $(this).addClass('ui-state-hover'); }, 
    					function() { $(this).removeClass('ui-state-hover'); }
    				);
    				
    				
    			});
    		</script>
    <script type="text/javascript">
    	function lookup(inputString) {
    		if(inputString.length == 0) {
    			// Hide the suggestion box.
    			$('#suggestions').hide();
    		} else {
    			$.post("rpc.php", {queryString: ""+inputString+""}, function(data){
    				if(data.length >0) {
    					$('#suggestions').show();
    					$('#autoSuggestionsList').html(data);
    				}
    			});
    		}
    	} // lookup
    	
    	function fill(thisValue) {
    		$('#inputString').val(thisValue);
    		setTimeout("$('#suggestions').hide();", 200);
    	}
    	function gohere(url) {
    location.href = url;
    }
    </script>
    <script type="text/javascript">
    
      var _gaq = _gaq || [];
      _gaq.push(['_setAccount', 'UA-2434589-23']);
      _gaq.push(['_trackPageview']);
    
      (function() {
        var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
      })();
    
    </script>
    </head>
    <body>
    <?php if($messages) { displayErrors($messages); }?>
    <header>
    	<div id="title">
    		<h1>My Pub Space
    		 <a href="#" onClick="setActiveStyleSheet('default'); return false;"><img src="images/0.gif" width="15" height="15" border="0" alt="css style" /></a>
    		 <a href="#" onClick="setActiveStyleSheet('1'); return false;"><img src="images/1.gif" width="15" height="15" border="0" alt="css style" /></a>
    		 <a href="#" onClick="setActiveStyleSheet('2'); return false;"><img src="images/2.gif" width="15" height="15" border="0" alt="css style" /></a>
    		 <a href="#" onClick="setActiveStyleSheet('3'); return false;"><img src="images/3.gif" width="15" height="15" border="0" alt="css style" /></a>
    		 <span>
    			 <form method="post" class="textbox" action="search.php">
    					Town/City:&nbsp;<input type="text" size="26" class="searchbox" value="" name="rsTown" id="inputString" onKeyUp="lookup(this.value);" onBlur="fill();" />
    				
    				<div class="suggestionsBox" id="suggestions" style="display: none;">
    					<img src="images/upArrow.png" style="position: relative; top: -36px; left: 105px; z-index:1;" alt="upArrow" />
    					<div class="suggestionList" id="autoSuggestionsList">
    &nbsp;					</div>
    				</div>
    				<input type="image" src="images/go.png" height="30" with="30" value="GO" />
    			</form>
    		</span>		
    	  </h1>
    	</div>
    </header>
    <nav>
    	<ul>
    		<li class="selected"><a href="default.php">Home</a></li>
    		<li><a href="#">Events</a></li>
    		<li><a href="register.php">Register</a></li>
    	</ul>
    </nav>
    <section id="intro">
    	<header>
    		<h2>Your social guide to going down the pub, online!</h2>
    	</header>
    	<p>Stuck in town with nowhere to go? Not sure if up the road or down the street is best? Need to be somewhere warm, cosy and friendly. Need a drink?....<br />You've come to the right place, mypubspace has it all!</p>
    	<img src="images/pub.jpg" alt="pub" /> </section>
    <div id="content">
    	<div id="mainContent">
    		<section>
    			<article class="blogPost">
    				<header>
    					<h2>Pubs and Bars UK Listing</h2>
    					<!-- AddThis Button BEGIN -->
    					<div class="addthis_toolbox addthis_default_style addthis_32x32_style">
    					<a class="addthis_button_preferred_1"></a>
    					<a class="addthis_button_preferred_2"></a>
    					<a class="addthis_button_preferred_3"></a>
    					<a class="addthis_button_preferred_4"></a>
    					<a class="addthis_button_compact"></a>
    					</div>
    					<script type="text/javascript">var addthis_config = {"data_track_clickback":true};</script>
    					<script type="text/javascript" src="http://s7.addthis.com/js/250/addthis_widget.js#username=jarv81178"></script>
    					<!-- AddThis Button END -->
    				</header>
    				<?php
    				if ($msg <>"") 
    					{
    					echo "<div class=\"ui-widget\">
    				<div style=\"padding: 0pt 0.7em;\" class=\"ui-state-error ui-corner-all\"> 
    					<p style=\"padding-top:18px;\"><span style=\"float: left; margin-right: 0.3em;\" class=\"ui-icon ui-icon-alert\"></span> 
    					<strong>Alert:</strong> $msg</p>
    				</div>
    			</div>"; 
    					}
    
    	$tableName="pubs";		
    	$targetpage = "default.php"; 	
    	$limit = 20; 
    	
    	$query = "SELECT COUNT(*) as num FROM $tableName";
    	$total_pages = mysql_fetch_array(mysql_query($query));
    	$total_pages = $total_pages['num'];
    	
    	$stages = 3;
    	$page = mysql_escape_string($_REQUEST['page']);
    	if( isset($_REQUEST['page']) && ctype_digit($_REQUEST['page']) ) {
          $page = (int) $_GET['page'];
          $start = ($page - 1) * $limit;
    }else{
          $start = 0;   
    }
    	
        // Get page data
    	$query1 = "SELECT * FROM $tableName LIMIT $start, $limit";
    	$result = mysql_query($query1);
    	
    	// Initial page num setup
    	if ($page == 0){$page = 1;}
    	$prev = $page - 1;	
    	$next = $page + 1;							
    	$lastpage = ceil($total_pages/$limit);		
    	$LastPagem1 = $lastpage - 1;					
    	
    	
    	$paginate = '';
    	if($lastpage > 1)
    	{	
    	
    
    	
    	
    		$paginate .= "<div class='paginate'>";
    		// Previous
    		if ($page > 1){
    			$paginate.= "<a href='$targetpage?page=$prev'>previous</a>";
    		}else{
    			$paginate.= "<span class='disabled'>previous</span>";	}
    			
    
    		
    		// Pages	
    		if ($lastpage < 7 + ($stages * 2))	// Not enough pages to breaking it up
    		{	
    			for ($counter = 1; $counter <= $lastpage; $counter++)
    			{
    				if ($counter == $page){
    					$paginate.= "<span class='current'>$counter</span>";
    				}else{
    					$paginate.= "<a href='$targetpage?page=$counter'>$counter</a>";}					
    			}
    		}
    		elseif($lastpage > 5 + ($stages * 2))	// Enough pages to hide a few?
    		{
    			// Beginning only hide later pages
    			if($page < 1 + ($stages * 2))		
    			{
    				for ($counter = 1; $counter < 4 + ($stages * 2); $counter++)
    				{
    					if ($counter == $page){
    						$paginate.= "<span class='current'>$counter</span>";
    					}else{
    						$paginate.= "<a href='$targetpage?page=$counter'>$counter</a>";}					
    				}
    				$paginate.= "...";
    				$paginate.= "<a href='$targetpage?page=$LastPagem1'>$LastPagem1</a>";
    				$paginate.= "<a href='$targetpage?page=$lastpage'>$lastpage</a>";		
    			}
    			// Middle hide some front and some back
    			elseif($lastpage - ($stages * 2) > $page && $page > ($stages * 2))
    			{
    				$paginate.= "<a href='$targetpage?page=1'>1</a>";
    				$paginate.= "<a href='$targetpage?page=2'>2</a>";
    				$paginate.= "...";
    				for ($counter = $page - $stages; $counter <= $page + $stages; $counter++)
    				{
    					if ($counter == $page){
    						$paginate.= "<span class='current'>$counter</span>";
    					}else{
    						$paginate.= "<a href='$targetpage?page=$counter'>$counter</a>";}					
    				}
    				$paginate.= "...";
    				$paginate.= "<a href='$targetpage?page=$LastPagem1'>$LastPagem1</a>";
    				$paginate.= "<a href='$targetpage?page=$lastpage'>$lastpage</a>";		
    			}
    			// End only hide early pages
    			else
    			{
    				$paginate.= "<a href='$targetpage?page=1'>1</a>";
    				$paginate.= "<a href='$targetpage?page=2'>2</a>";
    				$paginate.= "...";
    				for ($counter = $lastpage - (2 + ($stages * 2)); $counter <= $lastpage; $counter++)
    				{
    					if ($counter == $page){
    						$paginate.= "<span class='current'>$counter</span>";
    					}else{
    						$paginate.= "<a href='$targetpage?page=$counter'>$counter</a>";}					
    				}
    			}
    		}
    					
    				// Next
    		if ($page < $counter - 1){ 
    			$paginate.= "<a href='$targetpage?page=$next'>next</a>";
    		}else{
    			$paginate.= "<span class='disabled'>next</span>";
    			}
    			
    		$paginate.= "</div>";		
    	
    	
    }
     echo $total_pages.' Results';
     // pagination
     echo $paginate;
    ?>
    
    <div id="accordion">
    <?php 
     
    
    		while($row = mysql_fetch_array($result))
    		{
    		
    		echo '<div><h3><a href=\"#\">'.$row['rsPubName'].', '.$row['rsTown'].'</a></h3><div>'.$row['rsAddress'].'<br />'.$row['rsTown'].', '.$row['rsCounty'].'<br />'.$row['rsPostCode'].'<br /><br />Region: '.$row['Region'].'<br /><br />Telephone: '.$row['rsTel'].'<br /><br /><a href="viewpub.php?PubID='.$row['PubID'].'">More info</a><br /><br /><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.mypubspace.com/default.php?PubID='.$row['PubID'].'%2F&amp;layout=standard&amp;show_faces=true&amp;width=400&amp;action=recommend&amp;colorscheme=light&amp;height=80" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:400px; height:80px;" allowTransparency="true"></iframe></div></div>';
    		
    		}
    	
    	?>
    </div>
    			</article>
    		</section>
    		
    	</div>
    	<aside>
    		<section>
    			<header>
    				<h3>Members Login Area</h3>
    			</header>
    			<form method="post" class="textbox" action="<?php print $_SERVER["PHP_SELF"]; ?>">
    				Username:&nbsp;<br />
    				<input type="text" class="textbox" name="rsUser" value="<?php print isset($_POST["rsUser"]) ? $_POST["rsUser"] : "" ; ?>">
    				Password:&nbsp;<br />
    				<input type="password" class="textbox" name="rsPass">
    				<br />
    				<br />
    				<input name="submit" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only" type="submit" value="Login">
    				<br />
    			</form>
    			<ul>
    				<li><button onclick="gohere('register.php')" id="button" type="button" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only" role="button" aria-disabled="false"><span class="ui-button-text"><a href="register.php">Sign up</a></span></button></li>
    				<li><button id="button" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only" role="button" aria-disabled="false"><span class="ui-button-text"><a href="forgot.php">Forgot Password</a></span></button></li>
    			</ul>
    		</section>
    		<section>
    			<header>
    				<h3>Quick Search</h3>
    			</header>
    			<ul>
    				<li><a href="#">Coming Soon!</a></li>
    			</ul>
    		</section>
    		<section>
    			<iframe src="http://www.facebook.com/plugins/activity.php?site=http%3A%2F%2Fwww.mypubspace.com%2F&amp;width=230&amp;height=400&amp;header=true&amp;colorscheme=light&amp;border_color=%23ffffff&amp;recommendations=true" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:230px; height:400px;" allowTransparency="true"></iframe>
    		</section>
    	</aside>
    </div>
    <footer>
    	<div>
    		<section id="about">
    			<header>
    				<h3>About</h3>
    			</header>
    			<p>My Pub Space is one of the largest and newest UK Pubs and Bars Listing sites online. It is not just a list of pubs, we have added a touch of interactive social pubbing experience online! Once registered, you can view information on pubs in your area, write reviews, organise your evenings out!</p>
    		</section>
    		<section id="blogroll">
    			<header>
    				<h3>Links</h3>
    			</header>
    			<ul>
    				<li><a href="#">Coming Soon!</a></li>
    			</ul>
    		</section>
    		<section id="popular">
    			<header>
    				<h3>Popular</h3>
    			</header>
    			<ul>
    				<li><a href="#">Coming Soon!</a></li>
    			</ul>
    		</section>
    	</div>
    </footer>
    </body>
    </html>

  • #6
    Super Moderator
    Join Date
    Feb 2009
    Location
    England
    Posts
    539
    Thanks
    8
    Thanked 63 Times in 54 Posts
    Is "USERID" definitely the right field name for the users table?
    lamped.co.uk :: Design, Development & Hosting
    marcgray.co.uk :: Technical blog

  • #7
    Banned
    Join Date
    Mar 2007
    Posts
    1,523
    Thanks
    116
    Thanked 0 Times in 0 Posts
    yes it is USERID and it is an integer Auto increment

  • #8
    Super Moderator
    Join Date
    Feb 2009
    Location
    England
    Posts
    539
    Thanks
    8
    Thanked 63 Times in 54 Posts
    Assuming you updated the cleanMemberSession() function with the one I gave you, this should work and have applied the correct $_SESSION data. Where have you put in the code to display the ID?
    lamped.co.uk :: Design, Development & Hosting
    marcgray.co.uk :: Technical blog

  • Users who have thanked Lamped for this post:

    jarv (12-06-2010)

  • #9
    Banned
    Join Date
    Mar 2007
    Posts
    1,523
    Thanks
    116
    Thanked 0 Times in 0 Posts

    Thumbs up

    YAY great thanks, you are the best!!! I just modifile my cleanmembersession and didn't use yours before - sorry!


    all works fine now thank you

  • #10
    Super Moderator
    Join Date
    Feb 2009
    Location
    England
    Posts
    539
    Thanks
    8
    Thanked 63 Times in 54 Posts
    Good to know, thanks for the thanks...
    lamped.co.uk :: Design, Development & Hosting
    marcgray.co.uk :: Technical blog


  •  

    Posting Permissions

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