2011-06-04 54 views
2

,我有以下生成的状态下拉表单上:验证选择下拉数组在PHP

$states = array('State', 'Alabama', 'Alaska', 'Arizona', 'Arkansas'); 
echo "<select name='choose_state'>\n"; 
foreach ($states as $key => $state) 
{echo "<option value='$key'>$state</option>\n";} 
echo "</select>"; 

我如何去确保用户
1)只选择其中的一个选项在阵列中
2)不选择默认值? ([0] =>字符串(5)“状态”)

编辑:验证在PHP中,这是一个表格收集用户信息之前发布到分区
我试过使用in_array并试图排除默认值

+0

服务器端或客户端?哪种语言?什么样的下拉? – GolezTrol 2011-06-04 02:52:02

+0

服务器端,php – Janee 2011-06-04 03:33:10

回答

0

我想你错过了一些检查。你永远不应该依赖什么是张贴,并始终执行彻底检查:

$chosen_state = null; 

if (array_key_exists('choose_state', $_POST)) 
{ 
    $choose_state = $_POST['choose_state']; 
    if (array_key_exists($choose_state, $states) && $choose_state > 0) 
    { 
    // Value does actually exist in array and is not item 0. 
    $chosen_state = $states[$chose_state]); 
    } 
} 
+0

感谢你;你是对的,它会检查以确保该值实际上在数组中。我还是这个新手,非常感谢 – Janee 2011-06-04 13:16:47

+0

出于好奇,为什么你使用array_key_exists而不是in_array? – Janee 2011-06-04 13:57:37

+0

array_key_exists检查键是否存在,而in_array检查值。 – GolezTrol 2011-06-04 21:14:35

0

下面的例子假设你存储在var $state_key提供了选择的关键...

试试这个:

$max = sizeof($states) - 1; // this is the number of possible values that you have, minus the default 
if($state_key != 0 && $state_key > 0 && $state_key < $max) 
{ 
    // do whatever here, you've got good data at this point 
} 

这还假定您的默认VA顺便说一句,lue始终是key#0(数组中的第一个)。

+0

'sizeof'? 'count'有什么问题?看起来你有一个错误......你不需要减去一个,并使用'<'。 – mpen 2011-06-04 03:50:49

+0

嗯,这似乎是比其他答案 – Janee 2011-06-04 04:10:13

-1

验证表单提交的PHP:

当你在PHP提交表单,选择选择输入类型返回值在后。所以你可以这样做:

$selectedindex = $_POST["choose_state"]; 

if($selectedindex == 0) 
{ 

    echo "Default item has been selected"; 

} 
else{ 

    echo "Other than default item has been selected "; 
    //you can do further validation here for selected item 
    //is in between 0 and 5 if you need to do so 

} 
+0

谢谢!这看起来像最简单的解决方案 – Janee 2011-06-04 04:11:02