0

为了从县获得著名的运动,我创建了这个表格。

$sports = array (
            'Australia' =>  array (
                            1 => 'Cricket',
                            2 => 'Foot Ball',
                            3 => 'Net Ball',
                            4 => 'Kabadi',
                            5 => 'Ragby',
                            6 => 'Basket Ball',
                            7 => 'Volley Ball',
                        ),          
          'New Zealand' =>  array (
                            1 => 'Cricket',
                            2 => 'Foot Ball',
                            3 => 'Net Ball',
                            4 => 'Ragby',
                            5 => 'Basket Ball',                         
                        ),        
              'England' =>  array (
                            1 => 'Cricket',
                            2 => 'Foot Ball',
                            3 => 'Net Ball',
                            4 => 'Ragby',
                            5 => 'Karom',                           
                            6 => 'Basket Ball',                         
                            7 => 'Table Tennis',                            
                            8 => 'Tennis',                          
                        ), 
                );

echo '<br><form action="" method="post">';
    foreach ( $sports AS $country => $sport ) { 
        echo "<h3>{$country}</h3\n";    
        foreach ($sport AS $k => $v) { 
            echo "<br /><input type='checkbox'  name='country-sport[{$country}][]' value='{$k}' />{$v}\n";
        } 
    }
echo "\n<br><input type='submit' value='go' />\n</form>";

我的问题是当我要验证这一点时。在这里,我需要使用此表单验证检查一些条件。

  1. country-subject 数组是否完全为空
  2. 每个国家/地区至少选择了 1 项或最多 3 项运动

不满足这些条件需要显示错误信息。

我尝试了这样的事情..使用此代码,我可以获得第一个错误消息,即如果整个数组为空..

更新:到目前为止,这是我的验证码..

if ( isset($_POST['country-sport']) && is_array( $_POST['country-sport'])) {

    foreach ( $_POST['country-sport'] AS $country => $sport) { 

        if ( count($sport) >= 1 && count($sport) <= 3) { //checking that it has 3 or more values.
             //process
        } else {
            echo "select at leat 1 or upto 3 sports for {$country} ";          
        }   
    }

} else {    
    echo 'You have not selected sports for any country!';
}

更新:使用 var_dump($_POST['country-sport']);

array(3) {
  ["Australia"]=>
  array(3) {
    [0]=>
    string(1) "1"
    [1]=>
    string(1) "2"
    [2]=>
    string(1) "3"
  }
  ["New Zealand"]=>
  array(3) {
    [0]=>
    string(1) "2"
    [1]=>
    string(1) "3"
    [2]=>
    string(1) "4"
  }
  ["England"]=>
  array(3) {
    [0]=>
    string(1) "6"
    [1]=>
    string(1) "7"
    [2]=>
    string(1) "8"
  }
}
4

3 回答 3

1

请尝试以下代码:

<?php
if (isset($_POST['country-sport']) && is_array($_POST['country-sport']))
{      
    foreach ($_POST['country-sport'] AS $country => $sport)
    {
        $varTotal = 0;
        foreach($sport as $k=>$v)
        {
            if($v != '')
            {
                $varTotal += 1;
            }
        }
        if ($varTotal >= 1 && $varTotal <= 3)
        {

        } 
        else
        {
            $arrError[$country] = 'select at least 1 or upto 3 sports for '.$country ;
        }
    }
    print_r($arrError);
} 
else
{
    echo 'You have not selected sports for any country!';
}
?>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title></title>
    </head>
    <body>
        <?php
        $sports = array(
            'Australia' => array(
                1 => 'Cricket',
                2 => 'Foot Ball',
                3 => 'Net Ball',
                4 => 'Kabadi',
                5 => 'Ragby',
                6 => 'Basket Ball',
                7 => 'Volley Ball',
            ),
            'New Zealand' => array(
                1 => 'Cricket',
                2 => 'Foot Ball',
                3 => 'Net Ball',
                4 => 'Ragby',
                5 => 'Basket Ball',
            ),
            'England' => array(
                1 => 'Cricket',
                2 => 'Foot Ball',
                3 => 'Net Ball',
                4 => 'Ragby',
                5 => 'Karom',
                6 => 'Basket Ball',
                7 => 'Table Tennis',
                8 => 'Tennis',
            ),
        );

        echo '<br><form action="" method="post">';
        foreach ($sports AS $country => $sport)
        {
            echo "<h3>{$country}</h3\n";
            $i=0;
            foreach ($sport AS $k => $v)
            {  
                // This will help to get all the fields name in post 
                echo "<input type='hidden'  name='country-sport[{$country}][]' value='' />";              
                echo "<br /><input type='checkbox'  name='country-sport[{$country}][]' value='{$k}' />{$v}\n";
                $i++;
            }
        }
        echo "\n<br><input type='submit' value='go' />\n</form>";
        ?>
    </body>
</html>
于 2013-01-18T10:18:31.280 回答
1

试试这个:

if ( isset($_POST['country-sport']) && !empty( $_POST['country-sport'])) {//using empty

    foreach ( $_POST['country-sport'] AS $country => $sport) { 

        if ( count($sport) > 2) { //checking that it has 3 or more values.
             //process
        } else {
            echo "select at leat 1 or upto 3 sports for {$country} ";          
        }   
    }
} else {    
    echo 'You have not selected sports for any country!';
}
于 2013-01-18T10:22:13.560 回答
0

我认为最好的方法是通过遍历每个国家/地区单独检查该国家/地区的运动是否满足您所述的要求(是否为空,和/或至少选择了 1 到 3 个运动)将其分解为块),然后将错误的结果放在一个单独的数组中,以确定它是否已验证。

这意味着,一旦它通过国家/地区,您将拥有一个具有类似结构的数组,其中哪些是有效的,哪些是无效的。然后您可以从那里显示您的错误和原因。您甚至可以突出显示未正确填写的国家/地区,因为您已将其全部分解。

$result = array(
    'Australia' => array('error' => false, 'reason' => ''),
    'New Zealand' => array('error' => true, 'reason' => 'No countries selected')
);
于 2013-01-18T09:38:54.987 回答