Page 1 of 1

How can I redirect a user?

Posted: Thu Dec 09, 2004 12:41 am
by Seona
Hi guys,

I'm trying to teach myself PHP, and I've spent a while looking for some code that will do a particular job, but haven't had any luck so far.

What I want is to be able to redirect a user to a different page. The logic I'm trying to use is:

if (condition is true)
send user to the page they wanted
else
send user to the error page


Is these a nice easy way to do this?

Posted: Thu Dec 09, 2004 1:20 am
by rehfeld

Code: Select all

if ($foo) {
    header('Location: http://example.org/page.php');
} else {
    header('Location: http://example.org/error.php');
}

Posted: Thu Dec 09, 2004 1:30 am
by Seona
Great, that's exactly what I wanted. :)

Thanks.

Posted: Thu Dec 09, 2004 6:56 pm
by Seona
Hmm, I think I've found a limitation to this, or I'm doing something else wrong.

I have a processing page for a form. It includes another file which has some universal functions in it - I wanted to keep them seperate for modularity. So I include the file, do some basic validation of the data, put the data into the database, create a folder on the server based on what was in the form, and then bump the user off to the results page.

That's the theory, anyway. What I get is the following error:

Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/_fuctions/directoryManagement.php:58) in /var/www/html/adminAdd.php on line 29


Line 29 is, unsurprisingly, header('Location: http://onehouseproductions.com/siteAdmin.php');

Why doesn't it like it? Why does my other processing page, which I was working on yesterday when I first asked the question, understand this code perfectly?

I is confuzzled. :?

Posted: Thu Dec 09, 2004 7:06 pm
by timvw
php gives you the reason:

output started at /var/www/html/_fuctions/directoryManagement.php:5

rtfm [php_man]header[/php_man] and discover what your problem is.

Posted: Thu Dec 09, 2004 7:41 pm
by Seona
Hmm... OK, so apparently I have something outputting something before the redirect. The trouble is, I can't figure out what. The included file has three functions in it, but they shouldn't be outputting anything as far as I can tell. And I can't find anything else in my code that will be outputting anything either.

In case anyone more familiar with PHP than me (which is pretty much everyone here - I began working with it for the first time yesterday) can see what I'm missing, here's the two files.

The processing file:

Code: Select all

<?php
	include '_fuctions/directoryManagement.php';

	// declare some relevant variables
	$DBhost = "localhost";
	$DBuser = "myname";
	$DBpass = "mypass";
	$DBName = "mydb";
	$table = "client_site";
	// this converts the form variables somehow
	import_request_variables('p', 'p_');
	// connect to database
	$link = mysql_connect($DBhost,$DBuser,$DBpass);
	@mysql_select_db("$DBName") or die("Unable to select database $DBName"); 	
	
	/**************************************/
	/*       check if client exists       */
	/**************************************/
	// create the query to compare the form data with the records in the client_site table
	$sqlquery = "SELECT * FROM $table WHERE clientName = '" . $p_clientName . "' OR sitePath = '" .  $p_sitePath . "'";
	// run the query and check it worked
	$result = mysql_query($sqlquery,$link);
	if (!$result = mysql_query($sqlquery,$link))
    	exit("Illegal query");
	// get the number of rows returned by the query
	$number = mysql_num_rows($result);
	// if query returned any records, abort
	if ($number != "0") {
		header('Location: http://onehouseproductions.com/siteAdmin.php');
		exit;
	}
	
	/*************************************/
	/*    add details to the database    */
	/*************************************/
	// create the query to add data to the client_site table
	$sqlquery = "INSERT INTO $table VALUES ('','" . $p_clientName . "','" .  $p_sitePath . "')";
	// run the query and check it worked
	$result = mysql_query($sqlquery,$link);
	if (!$result = mysql_query($sqlquery,$link))
    	exit("Illegal query");
	
	
	/*************************************/
	/*      create folder on server      */
	/*************************************/
	
	//is_emtpy_folder($p_sitePath);
	
	if (!Another_is_dir($p_sitePath)) {	
		FtpMkdir(mainwebsite_html,$p_sitePath);
	}
	header('Location: http://onehouseproductions.com/siteAdmin.php');

?>
And the included file with the functions:

Code: Select all

<?php
	/****************************************/
	/*        check if folder exists        */
	/****************************************/
	function Another_is_dir($file) {
		return ((fileperms("$file") & 0x4000) == 0x4000);
	}

	/***************************************/
	/* check if folder exists and is empty */
	/***************************************/
	function is_emtpy_folder($folder){
		if(is_dir($folder) ){
			$handle = opendir($folder);
			while( (gettype( $name = readdir($handle)) != "boolean")){
				$name_array[] = $name;
			}
			foreach($name_array as $temp)
			$folder_content .= $temp;
	
			closedir($handle);
			if($folder_content == "...") {
				return true;
			} else {
				return false;
			}
		}
		else
			return true; // folder doesnt exist
	}

	/*******************************************/
	/* create directory through FTP connection */
	/*******************************************/
	function FtpMkdir($path, $newDir) {
		$server='www.onehouseproductions.com'; // ftp server
		$connection = ftp_connect($server); // connection
		
		// login to ftp server
		$user = "myname";
		$pass = "mypass";
		$result = ftp_login($connection, $user, $pass);
	
		// check if connection was made
		if ((!$connection) || (!$result)) {
			return false;
			exit();
		} else {
			ftp_chdir($connection, $path); // go to destination dir
			if(ftp_mkdir($connection,$newDir)) { // create directory
				return $newDir;
			} else {
				return false;       
			}
			ftp_close($conn_id); // close connection
		}
	}

?>

The functions have all been written by other people and gleaned from various sources (mostly the user comments in the php.net manual) so I must confess to not being entirely certain what they do or why.

I would be very grateful if someone could look over my code and tell me why it hates me.

Posted: Thu Dec 09, 2004 7:45 pm
by rehfeld
look at the html source

whatever is before the error message php spits out, is your problem

blank lines and spaces etc.. are all considered output

Posted: Thu Dec 09, 2004 7:49 pm
by Benjamin
Yeah if you have 1 space before the <?php tag, and possibly even after the ?> in an included file, that is considered output.

Posted: Thu Dec 09, 2004 8:19 pm
by Seona
Ah, that was what did it. A single space. Thanks guys.

Posted: Fri Dec 10, 2004 12:27 am
by ol4pr0
personally i like to use the handy of javascript to redirect.
u might give it a try.

Code: Select all

<script language="javascript">
		location.replace("page.php");
		</script>