Перенаправление, если оператор не работает - PullRequest
1 голос
/ 18 января 2010

Эй, я пытаюсь сделать оператор if, который перенаправляет их на другую страницу, если это правда, просто верно?

Я не уверен, почему это не работает, но я использую:

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);
}

Когда я ставлю

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

И я возвращаюсь

Paid User - £2 p/m

Что правильно?

Любая помощь будет оценена, спасибо.

Ответы [ 5 ]

3 голосов
/ 18 января 2010

Похоже, вы хотите позвонить exit() до закрывающей скобки в вашем if утверждении.

Документация для header имеет следующий пример кода:

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

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

Конечный бит вашего if утверждения действительно должен быть:

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();

Кроме того, header не работает, если вы уже отправили любой вывод, согласно этому предупреждению из документации для header:

Помните, что header() нужно назвать перед отправкой любого фактического вывода, либо обычными тегами HTML, пустым строки в файле или из PHP. Это очень распространенная ошибка при чтении кода include() или require(), функции или другая функция доступа к файлу, и есть пробелы или пустые строки, которые выводятся перед заголовком () вызывается. Такой же проблема существует при использовании одного Файл PHP / HTML.

2 голосов
/ 18 января 2010

Поскольку это зависит от & pound; у вас есть несколько возможностей, в зависимости от того, какие значения $_POST['accounttype'] могут иметь.

Сначала я предлагаю вам попробовать:

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

(поскольку &pound; в фунтах HTML ).
Если это не работает, какая часть строки делает ее уникальной? Paid User или 2 p/m? Если что-то из этого достаточно, достаточно проверить подстроку , например:

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

или

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

или любая комбинация (избегая & pound;).

1 голос
/ 18 января 2010

Вы случайно не выводили что-то в браузер? Если вы измените заголовок местоположения после использования операторов echo или print, он выдаст предупреждение, которое вы, вероятно, не увидите, если у вас не включены подробные ошибки или ведение журнала.

Я знаю, что это может произойти с файлами UTF-8 в некоторых версиях PHP - знак порядка байтов (BOM) файла UTF-8 выводится до того, как PHP-скрипт начинает выполнение, что предотвращает отправку заголовка расположения.

0 голосов
/ 18 января 2010

Мое первое желание было бы проверить, есть ли какие-либо дополнительные символы в ваших данных POST, попробовав следующее:

if (trim($_POST['accounttype']) == 'Paid User - £2 p/m') {
0 голосов
/ 18 января 2010

Изменение заголовка HTTP с помощью header требует, чтобы заголовок HTTP еще не был отправлен. Это может быть одной из причин того, почему он не работает для вас, поскольку заголовок HTTP отправляется вместе с первым выводом вашего сценария (любой вывод, включая текст до <?php).

Когда вы устанавливаете сообщение об ошибке на E_ALL и display_errors на true , PHP немедленно покажет вам все ошибки. Это может помочь вам определить причину вашей ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...