Crazyd22
Crazyd22

Reputation: 771

Redirecting if statement not working

Hey, I am trying to make an if statement that redirects them to a different page if true, simple right?

I am not sure why this is not working but I am using:

if ($_POST['accounttype']=='Paid User - £2 p/m'){
    $userid = strtolower($_SESSION['X2X2']);
    $getuser = mysql_query("SELECT * FROM XXXXXX WHERE X2X2 = '$userid'");
    $info = mysql_fetch_array($getuser);
    $id = $info['X3X3'];
    mysql_query("UPDATE members SET payment = '" . mysql_real_escape_string("XXXXXXXX"). "' WHERE X3X3 = $id");
    header('Location: http://beta.XXXXX.co.uk/purchase.php');
    mysql_close($con);
}

When I put

<?
echo $_POST['accounttype'];
?>

And I get back

Paid User - £2 p/m

Which is correct?

Any help would be appreciated, Thanks.

Upvotes: 1

Views: 394

Answers (5)

Dominic Rodger
Dominic Rodger

Reputation: 99751

Looks like you want to call exit() before the close brace on your if statement.

The documentation for header has example code like this:

<?php
header("Location: http://www.example.com/"); /* Redirect browser */

/* Make sure that code below does not get executed when we redirect. */
exit;
?>

The end bit of your if statement really ought to be:

mysql_query("UPDATE members SET payment = '" . mysql_real_escape_string("XXXXXXXX"). "' WHERE X3X3 = $id");
mysql_close($con); // do this before sending a redirect header
header('Location: http://beta.XXXXX.co.uk/purchase.php');
exit();

Also, header doesn't work if you've already sent any output, per this warning from the documentation for header:

Remember that header() must be called before any actual output is sent, either by normal HTML tags, blank lines in a file, or from PHP. It is a very common error to read code with include(), or require(), functions, or another file access function, and have spaces or empty lines that are output before header() is called. The same problem exists when using a single PHP/HTML file.

Upvotes: 3

Felix Kling
Felix Kling

Reputation: 816364

As it seems to depend on £, you have several possibilities depending on which values $_POST['accounttype'] can have.

First I suggest you try:

if ($_POST['accounttype']=='Paid User - &pound;2 p/m'){

(as &pound; is £ in HTML).
If this doesn't work, what is the part of the string, that makes it unique? Paid User or 2 p/m? If any of these, it is sufficient to check against a substring like:

if (substr($_POST['accounttype'],-5)=='2 p/m'){

or

if (substr($_POST['accounttype'],0,9)=='Paid User'){

or any combination (avoiding £).

Upvotes: 2

Corey Ballou
Corey Ballou

Reputation: 43457

My first inclination would be to check if there are any extra characters on your POST data by trying the following:

if (trim($_POST['accounttype']) == 'Paid User - £2 p/m') {

Upvotes: 0

Gumbo
Gumbo

Reputation: 655219

Altering the HTTP header with header requires that the HTTP header has not been sent yet. This can be one reason for why it doesn’t work for you as the HTTP header is sent together with the first output of your script (any output including text before <?php).

When you set error_reporting to E_ALL and display_errors to true, PHP will display you all errors immediately. This can help you to determine the cause of you error.

Upvotes: 0

Andy E
Andy E

Reputation: 344537

You haven't by any chance already output something to the browser have you? If you modify the location header after using the echo or print statements, it will issue a warning which you probably won't see unless you have verbose errors or logging turned on.

I know this can happen with UTF-8 files in some versions of PHP - the byte order mark (BOM) of the UTF-8 file are output before the PHP script starts execution, which prevents the location header from being sent.

Upvotes: 1

Related Questions