2011-01-21 96 views
0

我有一个基本脚本,可以生成年龄验证的下拉列表。我想要做的是在开始时为每个下拉菜单添加选项。因此,对于一天的第一个选项是“日”,每月 - “月”,一年 - “年”与每一个0值下面的代码:PHP年龄验证下拉列表

<?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 
} 
?> 

任何帮助,在此,将不胜感激。

干杯, 克里斯

+0

什么问题在哪里? – 2011-01-21 12:19:12

+2

可能没有帮助,但我认为日期选择下拉不好的设计。这对用户来说很不方便,带宽浪费,并给你一种错误的验证感。更好地提供文本输入并验证您正确接收的内容。 – tdammers 2011-01-21 12:31:33

回答

0

我不知道这是否是你所需要的。

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); 

编辑:你可能想看看this

希望有所帮助。
-Alberto

0

你可以这样做 - 我为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); 
}