Выпадающий список проверки возраста PHP - PullRequest
0 голосов
/ 21 января 2011

У меня есть базовый скрипт, который генерирует выпадающие списки для проверки возраста. Что я хочу сделать с этим, это добавить параметры для каждого раскрывающегося списка в начале. Таким образом, для дня первым вариантом будет «День», месяц - «Месяц», год - «Год», каждый со значением 0. Вот код:

<?php
//define the year
$thisYear = date('Y');
$filtered = array_map("strip", $_POST);

function strip($val){
$val = strip_tags($val);
$val = htmlentities($val,ENT_QUOTES);
return $val;
}

function renderDropDown($name, $opts, $valueIsKey=true){
$out = array();
$out[] = '<select name="'.$name.'">';
foreach($opts as $key => $val){
    if($valueIsKey){
        $out[] = '<option value="'.$key.'">'.$val.'</option>';
    } else {
        $out[] = '<option value="'.$val.'">'.$val.'</option>';
    }
}
$out[] = '</select>';

return implode("\n", $out);
}

if($_POST['submit'] != 'submit' && !isset($_POST['submit'])){
//define text months
for($i=2; $i<=13; $i++){
    $calTime = mktime(0, 0, 0, $i, 0, $thisYear);
    $months[date('m', $calTime)] = date('M', $calTime);
}
$renderHTML = true;
} else {    
    //try to construct a valid date from post data
if(checkdate($filtered['months'], $filtered['days'], $filtered['years'])){
    //valid date..check if they are 18+
    $validAge = $thisYear - 18;
    if($filtered['years'] <= $validAge){
        //inside you go
        die('yes');
    } else {
        header('Location: http://www.google.com');
    }
} else {
    //invalid date.. try again mr hacker
}
}

if($renderHTML){
?>
<form name="ageVerifier" action="" method="post">
    Day: <?php print(renderDropDown('days', range(1,31), false)); ?>
    Month: <?php print(renderDropDown('months', $months)); ?>
    Year: <?php print(renderDropDown('years', range($thisYear, $thisYear-100), false)); ?>
    <input type="submit" name="submit" value="submit" />
</form>
<?php
}
?>

Любая помощь по этому вопросу будет принята.

Cheers, Chris

Ответы [ 2 ]

0 голосов
/ 21 января 2011

Вы можете сделать что-то вроде этого - я добавил дополнительный аргумент в функцию renderDropDown;вы просто передаете то, что хотите, чтобы первое значение было указано в качестве последнего аргумента.

В качестве примечания вам может потребоваться выполнить дополнительную проверку ввода.Добавление значений по умолчанию, таких как «День», означает, что теперь у вас есть потенциальные неверные данные.

function renderDropDown($name, $opts, $valueIsKey=true, $default=null){
  $out = array();
  $out[] = '<select name="'.$name.'">';

  if ($default)
    $out[] = "<option value=''>{$default}</option>";

  foreach($opts as $key => $val){
    if($valueIsKey){
        $out[] = '<option value="'.$key.'">'.$val.'</option>';
    } else {
        $out[] = '<option value="'.$val.'">'.$val.'</option>';
    }
  }
  $out[] = '</select>';

  return implode("\n", $out);
}
0 голосов
/ 21 января 2011

Я не уверен, что это то, что вам нужно.

function renderDropDown($name, $opts, $valueIsKey=true){
    $out = array();
    $out[] = '<select name="'.$name.'">';

    $out[] = '<option value="0">'.ucfirst($name).'</option>';

    foreach($opts as $key => $val){
        if($valueIsKey){
            $out[] = '<option value="'.$key.'">'.$val.'</option>';
        } else {
            $out[] = '<option value="'.$val.'">'.$val.'</option>';
        }
    }
    $out[] = '</select>';

    return implode("\n", $out);
}

Это просто, но у вас будет множественное число s в конце каждого имени.Возможно, вы захотите добавить аргумент $title к функции, чтобы он стал:

function renderDropDown($name, $opts, $title, $valueIsKey=true){

    [...]

    $out[] = '<option value="0">'.$title.'</option>';

    [...]

}

Вы можете вызвать эту функцию с чем-то вроде:

renderDropDown('days', range(1,31), "Day", false);

Редактировать: возможно, вы захотите взглянуть на это .

Надеюсь, что это поможет.
- Альберто

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