2015-03-12 6 views
1

Я пытаюсь выяснить, как превратить эту вложенную операцию if в один оператор if и не удается запустить его.Включение вложенного оператора PHP if в один оператор if

Это оригинальный вложенным, если заявление:

if (isset($_REQUEST['gender'])) 
    { 
     $gender = $_REQUEST['gender']; 

     if ($gender == 'M') 
     { 
      echo '<p><b>Good day, Sir!</b></p>'; 
     } 
     elseif ($gender == 'F') 
     { 
      echo '<p><b>Good day, Madam!</b></p>'; 
     } 
     else 
     { // Unacceptable value. 
      $gender = NULL; 
      echo '<p class="error">Gender should be either "M" or "F"!</p>'; 
     } 
    } 
    else 
    { // $_REQUEST['gender'] is not set. 
     $gender = NULL; 
     echo '<p class="error">You forgot to select your gender!</p>'; 
    } 

Это моя попытка:

 if (isset($_REQUEST['gender']) && $gender == 'M') 
    { 
     $gender = $_REQUEST['gender']; 
     echo '<p><b>Good day, Sir!</b></p>'; 
    } 
    elseif (isset($_REQUEST['gender']) && $gender == 'F') 
    { 
     $gender = $_REQUEST['gender']; 
     echo '<p><b>Good day, Madam!</b></p>'; 
    } 
    elseif (isset($_REQUEST['gender']) && $gender != 'M' || (isset($_REQUEST['gender']) && $gender != 'F') 
    { // Unacceptable value. 
     $gender = $_REQUEST['gender']; 
     $gender = NULL; 
     echo '<p class="error">Gender should be either "M" or "F"!</p>'; 
    } 
    else 
    { // $_REQUEST['gender'] is not set. 
     $gender = NULL; 
     echo '<p class="error">You forgot to select your gender!</p>'; 
    } 

Я не уверен, что это потому, что $gender = $_REQUEST['gender']; не выполняется, но любая помощь будет оценена ,

+0

Вы пробовали что-то вроде если (Исеть ($ _ REQUEST [ 'пол']) && $ _REQUEST [ 'пол'] == 'M'))? –

+0

Зачем вам это нужно? первый из них гораздо читабельнее. –

ответ

2

Вы проверяете переменную $gender перед тем, как присвоить ей значение. Ниже приводятся следующие данные:

$gender = isset($_REQUEST['gender']) ? $_REQUEST['gender'] : ""; 
if ($gender == 'M') 
{ 
    echo '<p><b>Good day, Sir!</b></p>'; 
} 
else if($gender == 'F') 
{ 
    echo '<p><b>Good day, Madam!</b></p>'; 
} 
else if (!empty($gender) && ($gender != 'M' || $gender != 'F')) 
{ // Unacceptable value. 
    echo '<p class="error">Gender should be either "M" or "F"!</p>'; 
} 
else 
{ 
    echo '<p class="error">You forgot to select your gender!</p>'; 
} 
1

Оператор switch может быть более чистым.

switch ($_REQUEST['gender']) { 
    case null: 
     echo '<p class="error">You forgot to select your gender!</p>'; 
     break; 
    case 'M': 
     echo '<p><b>Good day, Sir!</b></p>'; 
     break; 
    case 'F': 
     echo '<p><b>Good day, Madam!</b></p>'; 
     break; 
    default: 
     echo '<p class="error">Gender should be either "M" or "F"!</p>'; 
} 
0

Вот непроверенный способ, которым я бы это сделал. Сначала я также выполнял проверку на стороне клиента (javascript). Я также предполагаю, что ваше гендерное поле - это текст, если вы можете выбрать strtolower и обрезать.

<?php 
if (empty($_REQUEST['gender']) || (strtolower(trim($_REQUEST['gender'])) != 'm' && strtolower(trim($_REQUEST['gender'])) != 'f')) { 
    //this should probably be checked client side for better usability, but better to check server side that we trust the data 
    echo '<p class="error">Please enter a valid Gender</p>'; 
} else { 
    $gender = strtolower(trim($_REQUEST['gender'])); 
    echo '<p><b>Good day, '; 
    if ($gender == 'm') { 
     echo 'Sir!</b></p>'; 
    } else { 
     echo 'Madam!</b></p>'; 
    } 
}