For Programmers: Free Programming Magazines  


Home > Archive > PHP Language > September 2004 > Redirect









You are viewing an archived Text-only version of the thread. To view this thread in it's original format and/or if you want to reply to this thread please [click here]

 

Author Redirect
Purple Haze

2004-09-23, 8:56 pm

ASP has <%Response.redirect("http://blahblah")%>

What is the equivalent command in php to redirect a user to a new URL in
the same window? Or is there a Javascript command that does this job better?

Thanks,
Purple Haze
Michael Fesser

2004-09-23, 8:56 pm

.oO(Purple Haze)

>ASP has <%Response.redirect("http://blahblah")%>
>
>What is the equivalent command in php to redirect a user to a new URL in
>the same window? Or is there a Javascript command that does this job better?


http://www.php.net/header

Micha
Purple Haze

2004-09-23, 8:56 pm

Michael Fesser wrote:
> .oO(Purple Haze)
>
>
>
>
> http://www.php.net/header
>
> Micha


After using:

header("Location: http://www.example.com/");

Its complaining headers have already been sent, and doesn't redirect.
Agelmar

2004-09-23, 8:56 pm

Purple Haze wrote:
> Michael Fesser wrote:
>
> After using:
>
> header("Location: http://www.example.com/");
>
> Its complaining headers have already been sent, and doesn't redirect.


Read the entire section on the header() function, don't just skip down to
the examples. header() must be called before any output (including
whitespace before <?php) has been sent.


Purple Haze

2004-09-23, 8:56 pm

Agelmar wrote:

> Purple Haze wrote:
>
>
>
> Read the entire section on the header() function, don't just skip down to
> the examples. header() must be called before any output (including
> whitespace before <?php) has been sent.
>
>


I guess I should have been more specfic, I need a redirect-function that
can be called anytime in the script. In this instance after the script
has determined that a vaild user and pass have been submitted.

Purple Haze
Michael Fesser

2004-09-23, 8:56 pm

.oO(Purple Haze)

>I guess I should have been more specfic, I need a redirect-function that
>can be called anytime in the script. In this instance after the script
>has determined that a vaild user and pass have been submitted.


Of course you can do this with header(), but you either

* have to make sure there's no other output sent to the browser before
(Does the check for a valid user prints anything out?)

or

* have to use output buffering.

Micha
Purple Haze

2004-09-23, 8:56 pm

Michael Fesser wrote:

> .oO(Purple Haze)
>
>
>
>
> Of course you can do this with header(), but you either
>
> * have to make sure there's no other output sent to the browser before
> (Does the check for a valid user prints anything out?)
>
> or
>
> * have to use output buffering.
>
> Micha


I am still unclear what your referring to, perhaps a copy of the script
will help...

<center>
<form ACTION="login.php" name="saveform" METHOD="POST" align="center">
<p><input NAME="username"VALUE SIZE="8" MAXLENGTH="16" tabindex="1"></p>
<p><input type="password"name="password" size="8" tabindex="2"
maxlength="8"></p>
<p><input TYPE="button"NAME="FormsButton2" VALUE="Validate"
ONCLICK="submit()" tabindex="3"style="font-family: Verdana; font-size:
12pt">
</form>
</center>

<?php
$mysql_database="login";
$mysql_username="root";
$mysql_password="";
$link = mysql_connect("localhost",$mysql_username,$mysql_password) or
die ("Unable to connect to SQL server");
mysql_select_db($mysql_database,$link) or die ("Unable to select database");
$username = $HTTP_POST_VARS['username'];
$password = $HTTP_POST_VARS['password'];

if (isset($password))
{
$qstr = "SELECT * from members where user ='$username' and pass
='$password'";
$result = mysql_query($qstr);

if (mysql_num_rows($result))
{
echo "<font color=#008000><Center><b>**Successful
Login**</b></Center></font>";
header("Location: http://www.example.com/");
exit;
}
else echo "<font color=#ff0000><Center><b>**Failed
Login**</b></Center></font>";
mysql_close();

}
else echo "<font color=#ff8000><Center><b>**No login
attempted**</b></Center></font>";
?>
Purple Haze

2004-09-23, 8:56 pm

Purple Haze wrote:

> Michael Fesser wrote:
>
>
>


Found the answer to my own question :/

I had a feeling javascript was the key here:

echo "<script>window.location=\"login1.php\"</script>";

will do the job
Daniel Tryba

2004-09-23, 8:56 pm

Purple Haze <xxx@xxx.com> wrote:
> I had a feeling javascript was the key here:
>
> echo "<script>window.location=\"login1.php\"</script>";
>
> will do the job


What about any client without javascript?

Fix your php code instead...

--

Daniel Tryba

Michael Fesser

2004-09-23, 8:56 pm

.oO(Purple Haze)

>Found the answer to my own question :/
>
>I had a feeling javascript was the key here:
>
>echo "<script>window.location=\"login1.php\"</script>";
>
>will do the job


Unreliable.

Try to fix your script instead: First - before anything else - check if
the user is valid, then redirect or print out the form.

Micha

PS: Please don't send me copies of your postings by e-mail. I read the
groups I'm posting to.
Chris Hope

2004-09-23, 8:56 pm

Purple Haze wrote:

> Purple Haze wrote:
>
>
> Found the answer to my own question :/
>
> I had a feeling javascript was the key here:
>
> echo "<script>window.location=\"login1.php\"</script>";
>
> will do the job


Bad idea. If they have Javascript disabled or Javascript blocking software
they aren't going to be redirected either.

You have two solutions:

1) Make the very first thing in the page BEFORE any HTML <?php
ob_start(); ?> which will start output buffering. You can then set any
headers you want at any point in the page and the HTML won't be sent to the
browser until the script ends.

2) Move all your HTML down to be underneath your PHP code and recode the
page as appropriate.

In my opinion, and I'm sure many others here, (2) is the better solution as
it makes sense for your validation to be done before rendering any HTML .


--
Chris Hope - The Electric Toolbox - http://www.electrictoolbox.com/

2004-09-24, 3:56 am

> What is the equivalent command in php to redirect a user to a new URL in
> the same window? Or is there a Javascript command that does this job

better?

From reading your posts and the others responses, I have determined that you
almost have it.
FYI, do not use the javascript method -- that will not always work.

Your code is fine; what you need to do is, put your PHP code ABOVE your HTML
code.
In your PHP code, after you issue the header() command, you need to add
exit(); to the code
so that nothing else on the page executes once you redirect the browser's
location.

If the user's login failed, the html form will show up since it is below the
PHP code.

Hope this helps -

____________________________________
Wil Moore III, MCP | Integrations Specialist


Purple Haze

2004-09-24, 3:56 am

laidbak69@hotmail.com wrote:

>
> better?
>
> From reading your posts and the others responses, I have determined that you
> almost have it.
> FYI, do not use the javascript method -- that will not always work.
>
> Your code is fine; what you need to do is, put your PHP code ABOVE your HTML
> code.
> In your PHP code, after you issue the header() command, you need to add
> exit(); to the code
> so that nothing else on the page executes once you redirect the browser's
> location.
>
> If the user's login failed, the html form will show up since it is below the
> PHP code.
>
> Hope this helps -
>
> ____________________________________
> Wil Moore III, MCP | Integrations Specialist
>
>

Yep, I was able to accomplish that using a previous post, Thanks anyway.

I can also see why using header() is better than javascript.
Tony Marston

2004-09-24, 8:56 am


"Purple Haze" <xxx@xxx.com> wrote in message
news:MuI4d.741$%06.624@newsread3.news.atl.earthlink.net...
> Michael Fesser wrote:
>
>
> I am still unclear what your referring to, perhaps a copy of the script
> will help...
>
> <center>
> <form ACTION="login.php" name="saveform" METHOD="POST" align="center">
> <p><input NAME="username"VALUE SIZE="8" MAXLENGTH="16" tabindex="1"></p>
> <p><input type="password"name="password" size="8" tabindex="2"
> maxlength="8"></p>
> <p><input TYPE="button"NAME="FormsButton2" VALUE="Validate"
> ONCLICK="submit()" tabindex="3"style="font-family: Verdana; font-size:
> 12pt">
> </form>
> </center>
>
> <?php
> $mysql_database="login";
> $mysql_username="root";
> $mysql_password="";
> $link = mysql_connect("localhost",$mysql_username,$mysql_password) or die
> ("Unable to connect to SQL server");
> mysql_select_db($mysql_database,$link) or die ("Unable to select
> database");
> $username = $HTTP_POST_VARS['username'];
> $password = $HTTP_POST_VARS['password'];
>
> if (isset($password))
> {
> $qstr = "SELECT * from members where user ='$username' and pass
> ='$password'";
> $result = mysql_query($qstr);
>
> if (mysql_num_rows($result))
> {
> echo "<font color=#008000><Center><b>**Successful
> Login**</b></Center></font>";
> header("Location: http://www.example.com/");
> exit;
> }


There'e your problem right there - you have an echo statement just before
the header(). Remove the echo and the header() will work.

--
Tony Marston

http://www.tonymarston.net



> else echo "<font color=#ff0000><Center><b>**Failed
> Login**</b></Center></font>";
> mysql_close();
>
> }
> else echo "<font color=#ff8000><Center><b>**No login
> attempted**</b></Center></font>";
> ?>



Gary L. Burnore

2004-09-24, 8:56 am

On Fri, 24 Sep 2004 12:33:23 +1200, Chris Hope
<blackhole@electrictoolbox.com> wrote:

>Purple Haze wrote:
>
>
>Bad idea. If they have Javascript disabled or Javascript blocking software
>they aren't going to be redirected either.
>
>You have two solutions:
>
>1) Make the very first thing in the page BEFORE any HTML <?php
>ob_start(); ?> which will start output buffering. You can then set any
>headers you want at any point in the page and the HTML won't be sent to the
>browser until the script ends.
>
>2) Move all your HTML down to be underneath your PHP code and recode the
>page as appropriate.
>
>In my opinion, and I'm sure many others here, (2) is the better solution as
>it makes sense for your validation to be done before rendering any HTML .


Three solutions.

This one works anywhere in your PHP code and allows your refresh to be
dynamic:

$Refresh = "<META HTTP-EQUIV=\"refresh\" CONTENT=\"0 ;" .
"URL=URLHERE\">";
echo $Refresh;


Examples:

--- example 1 ----
$Refresh = "<META HTTP-EQUIV=\"refresh\" CONTENT=\"0 ;" .
"URL=http://www.netbasix.net\">";

--- example 2 ----
$arg1 = "Something";
$arg2 = "Somethingelse";
$Refresh = "<META HTTP-EQUIV=\"refresh\" CONTENT=\"0 ;" .

"URL=http://www.netbasix.net/php/somephpcommand.php?Arg1=$arg1&Arg2=$arg2\">";



--
gburnore@databasix dot com
---------------------------------------------------------------------------
How you look depends on where you go.
---------------------------------------------------------------------------
Gary L. Burnore | ÝÛ³ºÝ³Þ³ºÝ³³Ýۺݳ޳ºÝ³Ý³Þ³ºÝ³ÝÝÛ³
| ÝÛ³ºÝ³Þ³ºÝ³³Ýۺݳ޳ºÝ³Ý³Þ³ºÝ³ÝÝÛ³
DataBasix | ÝÛ³ºÝ³Þ³ºÝ³³Ýۺݳ޳ºÝ³Ý³Þ³ºÝ³ÝÝÛ³
| ÝÛ³ 3 4 1 4 2 ݳ޳ 6 9 0 6 9 ÝÛ³
Black Helicopter Repair Svcs Division | Official Proof of Purchase
========================================
===================================
Want one? GET one! http://signup.databasix.com
========================================
===================================
Sponsored Links







Also available: Server administration forum archive | Web Design forum archive | Software forum archive | Hardware reviews archive

Copyright 2008 codecomments.com