2010-01-18 2 views
1

Эй, я пытаюсь сделать оператор 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 

Что является правильным?

Любая помощь будет принята с благодарностью, Спасибо.

+0

Лучшей идеей было бы использовать идентификатор для каждого типа пользователей. 'if ($ _POST [' accounttype '] ==' Paid User - £ 2 p/m ')' не является хорошим подходом – Shoban

+1

Я предполагаю, что это как-то связано с кодировкой знака фунта. Является ли код в инструкции if выполненным? –

+0

Нет, это должно быть как-то связано с знаком £ – Crazyd22

ответ

2

Как кажется, зависит от £, у вас есть несколько вариантов в зависимости от значения которых $_POST['accounttype'] могу иметь.

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

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

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

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

или

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

или любое сочетание (избегая £).

+0

Да, это прекрасно, спасибо! – Crazyd22

3

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

documentation for 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.

+0

Но утверждение if возвращается, так как оно не равно «Платный пользователь - £ 2 p/m». Я попытался поставить exit(); но все равно не работает. Я попытался поставить эхо в оператор if, но это не получается. – Crazyd22

+0

Тогда комментарий Феликса по вашему вопросу, вероятно, имеет значение - что произойдет, если вы удалите символ '' '? Что выглядит источник просмотра, где отображается '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' –

+0

Я пробовал добавить После этого, но он возвращается с правильным ответом – Crazyd22

1

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

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

+0

У меня есть оператор if, который бы что-то повторил, если произошла ошибка, но это ничего не повторяет, если только не существует. Не уверенная погода? – Crazyd22

+0

Если это что-то повторяет, прежде чем ваш заголовок будет выводиться, это может стать причиной проблемы. Ваши файлы UTF-8 закодированы? –

+0

Да, но это ничего не повторяет перед заявлением. Когда я помещаю оператор эха в оператор if, он даже не повторяет это? Разве это не означает, что в заявлении что-то не так? – Crazyd22

0

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

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

+0

Как это установить? 'error_reporting к E_ALL и display_errors к true' – Crazyd22

+0

@ Crazyd22: Просто следуйте ссылкам и прочитайте их описание. – Gumbo

0

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

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

Спасибо, но все еще не работает – Crazyd22

Смежные вопросы