2013-10-11 5 views
-2

Внутри моего файла PHP У меня есть это заявление:Почему этот оператор IF сбивает мой php?

if($_POST['married'] === true) $married = 'yup' else $married = 'nop'; 

Но если я не комментирую, мой результат PHP страница становится пустым. Это практически сбой. Я ПОЧТИ из другого места на этот PHP, и в значениях POST у меня есть «женатое» значение. Это действительно пусто (не верно или ложно), но это не имеет к этому никакого отношения. Я попробовал этот способ тоже:

if($_POST['married'] === '') $married = 'yup' else $married = 'nop'; 

тот же результат. Пустая страница. Что-то не так с моим синтаксисом? Я не вижу своей проблемы. Пожалуйста, помогите мне.

+0

Проверьте данные об ошибках. но я ожидаю, что это потому, что вы пытаетесь «if else» в одной строке без использования команды seperator ';'. – Kami

+0

'ini_set ('display_errors', true);' и 'error_reporting (E_ALL);', вероятно, покажут вам, что у вас есть синтаксические ошибки в вашем коде (подсказка: отсутствующие точки с запятой). – brezanac

+0

'' 'заявления не ** ** сбой **. это простая синтаксическая ошибка. –

ответ

1

точку с запятой после $married = 'yup' и использовать isset, чтобы определить, установлено ли значение $_POST:

if(isset($_POST['married']) && $_POST['married'] == true) 
    $married = 'yup'; 
else 
    $married = 'nop'; 
1

Вы пропустили точку с запятой внутри, если заявление и попытаться проверить, установлена ​​ли переменная $ _POST или не

if(isset($_POST['married']) === true) 
    $married = 'yup';//Here you missed the semicolon 
else 
    $married = 'nop'; 
+0

Я подарил всем большие пальцы. Это была точка с запятой. Я впечатлен скоростью, с которой вы все ответили. Вам понадобилось 2-4 минуты, чтобы увидеть мой вопрос и ответить на него. Это прекрасно. Я приму первый ответ. Я не согласен с отсутствием исследования. Я много исследовал в google, но пропустил точку с запятой darn :(Спасибо всем – user1137313

1

Я принимаю show_errors = false так это молча бомбить? Если это так (во время разработки), обязательно включите error reporting.

С учетом этого вы должны всегда отметьте $_POST/$_GET значения перед их использованием. например

$married = isset($_POST['married']) && ((bool)$_POST['married']) 
     ? 'yup' 
     : 'nop'; 
3

Вы не используете if правильно.

if($_POST['married'] == true) 
{ 
    $married = 'yup'; 
} 
else 
{ 
    $married = 'nop'; 
} 

также === не может быть использована для POST, так как он автоматически отправляет все в виде строки; компаратор === сравнивает типы данных, а также содержимое.

+0

Все в '$ _POST' ** есть строка **, поэтому' === 'отлично, но не нужно. – brezanac

+0

Нет, если он сравнивает строку к логическому, как и выше? –

+0

Исходный пост был явно изменен (не было никаких логических элементов), но все еще утверждая, что «=== не может использоваться для POST», неверно, независимо от того, как вы его смотрите. – brezanac

2

SEMICOLON дружище !!

if($_POST['married'] === '') $married = 'yup'; else $married = 'nop'; 
1

пустой оператор поможет Вам:

if(!empty($_POST['married'])) { 
    $married = 'yup'; 
} 
else { 
    $married = 'nop'; 
} 
+0

Это не эквивалентно: http://php.net/manual/en/types.comparisons.php и bTW не отвечает на вопрос. –

+0

Я предполагаю, что поле 'замужем' является флажком - в большинстве случаев, когда поле браузера отправляет флажок, оно помещает строку 'on' (или строку из атрибута value). Это не логическая строка «TRUE», а строка. Если флажок не установлен, браузер отправляет пустое значение или пропускает этот ключ в целом.Поэтому 'empty' - лучший выбор для user1137313. Тип сравнения не является предметом для этой записи ... empty/not empty тоже не является предметом - user1137313 забыл о запятой раньше else :) – Nicolai

+0

просто скажите, что для OP (развернуть свой ответ). научить его, как ловить рыбу, не просто дать ему рыбу. –

2

Вы забыли поставить точку с запятой как раз за 'Япом'. это будет

if($_POST['married'] === true) $married = 'yup'; else $married = 'nop'; 

или, если вы хотите использовать Oneliner, то:

($_POST['married']===true)?($married = 'yup'):($married = 'nop'); 
+2

Не следует, чтобы один лайнер был '$ замужем = $ _POST ['married'] === true? 'yup': 'nop';'? –

+0

Ну, это еще один вариант. По-моему, яснее и читабельнее. – Sergey

2

Вам нужно добавить точку с запятой после каждого оператора:

if($_POST['married']) 
    $married = 'yup'; 
else 
    $married = 'nop'; 

Вы также можете хотите проверить, установлен ли он первым, используя isset:

if(isset($_POST['married']) && $_POST['married'] === true) 
    $married = 'yup'; 
else 
    $married = 'nop'; 

http://php.net/manual/en/function.isset.php

Вы также можете написать заявление с помощью tenary:

$married = isset($_POST['married']) && $_POST['married'] === true ? 'yup' : 'nop'; 

Больше на tenary оператора: http://www.sitepoint.com/using-the-ternary-operator/

1

Ваша страница сбой, потому что точка с запятой отсутствует.

if() не требуется точка с запятой, потому что это предложение без инструкции. $married = 'yup' - это утверждение, которое требует, чтобы точка с запятой (;) заканчивалась.

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