php M или F (мужчина или женщина) - PullRequest
0 голосов
/ 29 ноября 2009

Я знаю, что есть более изящные способы настроить html-форму, чтобы принять участие мужчины или женщины; Тем не менее, я учусь, и мне просто интересно, если это также возможно:

//Incorporate two checks
 if (empty($_POST['sex'])==FALSE && sanityCheck($_POST['sex'], 'string', 1)==TRUE)
      {
      // if the checks are ok for  sex we assign sex  to a variable
      $sex = $_POST['sex'];
       }
      else
      {
      // if all is not well we echo an error message
      echo 'Please enter a valid Gender';
      // and exit the script
      exit();
      }

Если так, как бы я проверил это с помощью регулярных выражений? Независимо от того, набрал ли пользователь M или F.

Я думаю:

function checksex($sexcheck)
{
//Some regex here to check the sex?
  return preg_match('               ', $sexcheck);
}

А затем вызвать checksex в качестве третьей проверки, добавленной к условному условию if, например:

if (empty($_POST['sex'])==FALSE && sanityCheck($_POST['sex'], 'string', 1) != FALSE && checksex($_POST['sex'], 1) ==TRUE)
{
...
}

Ответы [ 4 ]

7 голосов
/ 29 ноября 2009

Чтобы проверить, набрал ли пользователь M или F, все, что вам нужно сделать, это сравнение строк. Нет необходимости в регулярных выражениях

if ( isset($_POST['sex']) ){
    $sex = $_POST['sex'];
    if ( $sex == 'M' ){
        echo 'Male';
    }else if ( $sex == 'F' ){
        echo 'Female';
    }else{
        echo 'Please enter a valid Gender';
    }
}else{
    echo 'Please enter a valid Gender';
}

Однако вместо того, чтобы пользователь вводил M или F, почему бы не использовать поле выбора или радиокнопки?

Поле выбора может выглядеть примерно так

<select name='sex'>
    <option selected="yes" value="NA">Not Saying</option>
    <option value="F">Female</option>
    <option value="M">Male</option>
 </select>

Или переключатели:

<input type="radio" name="sex" value="M" /> Male <br />
<input type="radio" name="sex" value="F" /> Female

Конечно, вам все равно придется проверить, что $_POST['sex'] по-прежнему M или F, и обработать случай, когда его нет ни в одном из них, поскольку пользователь может решить опубликовать недействительное значение.

4 голосов
/ 29 ноября 2009

Попробуйте это "(M | F) {1}" без кавычек

2 голосов
/ 29 ноября 2009

Как насчет

// check if the sex variable is 'f' or 'm'
        $sex = ($_POST['sex'] == 'f' || $_POST['sex'] == 'm') ? $_POST['sex'] : false;
// thanks to peter
    // if $sex is false then echo..
        if (!$sex)
            echo ('Please enter a valid Gender');

Explaination

это условный оператор, называемый Тернарный оператор. Это как

(если оговорка)? (затем): (еще);

Или

(expr 1)? (expr 2): (expr 3);

expr 2 оценивается, если expr 1 равен true выражение 3 оценивается, если выражение 1 ложно

Ссылка: http://php.net/manual/en/language.operators.comparison.php

1 голос
/ 29 ноября 2009
$s = $_POST['sex'];

if(isset($s) && $s == 'M') {
    $sex = "Male";
} elseif(isset($s) && $s == 'F') {
    $sex = "Female";
} else {
    $sex = "Please enter a valid gender";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...