复选框选择&;阵列


checkbox selection & arrays

我的select.php 中有9个复选框

<form method="post" action="test.php">
<input type="checkbox" name="g1[]" id="c1" value="c1">
<input type="checkbox" name="g1[]" id="c2" value="c2">
<input type="checkbox" name="g1[]" id="c3" value="c3">
<input type="checkbox" name="g2[]" id="h1" value="h1">
<input type="checkbox" name="g2[]" id="h2" value="h2">
<input type="checkbox" name="g2[]" id="h3" value="h3">
<input type="checkbox" name="g3[]" id="d1" value="d1">
<input type="checkbox" name="g3[]" id="d2" value="d2">
<input type="checkbox" name="g3[]" id="d3" value="d3">
</form>

好的,我的test.php现在看起来是这样的:

error_reporting(E_ALL);
$g1 = $_POST['g1']; 
$g2 = $_POST['g2']; 
$g3 = $_POST['g3'];
//Connect to DB
$ng1 = count($g1);
$ng2 = count($g2);
$ng3 = count($g3);
 $sum = 0; 
 for ($i = 1; $i <= 3; $i++) 
 { 
     $arr = "g$i"; 
     if (!isset($_POST[$arr])) 
         ${$arr} = array(); 
     else 
         ${$arr} = $_POST[$arr]; 
     if (!is_array(${$arr})) 
         die("Error in input parameter $arr"); 
     ${"ng$i"} = count(${$arr}); 
     if (${"ng$i"} < 1) 
         die("At least one $arr checkbox must be checked"); 
     $sum += ${"ng$i"}; 
     ${"g$i"."_sql"} = implode(',', array_map(${$arr}, 'mysql_real_escape')); 
 } 
 $query="INSERT INTO ch_lg (g1, g2, g3) VALUES ('$g1_sql','$g2_sql','$g3_sql')"; 
 mysql_query($query) or die(mysql_error()); 
 mysql_close(); 
//echo message
}

修改问题

我需要检查一下:

  1. 用户从每个数组中选择了一个复选框(您的代码会这样做)

  2. 他没有选择超过4个复选框(你的代码会这样做)

  3. 他从一个数组中又选择了一个复选框(这意味着他必须总共选择4个,每个复选框中只有1个是不可接受的)-我认为这在你的代码中不会发生。是吗?

感谢

"两者都不超过3"意味着2根头发+1种颜色可以,但2根头发+2种颜色不可以,因为它会给出4?然后:

$ncolor = count($color);
$nhair   = count($hair);
if (($ncolor >= 1) && ($nhair >=1) && (($ncolorn+$nhair)<=3))
   // OK
else
   // No good.

然后将我的值插入数据库列COLOR/HAIR。

你必须解释你的数据库是如何构建的,以及你想要如何获得数据。如果我有2根头发和1种颜色,你想要:吗

  • 3排,一排有颜色,两排有头发
  • 两排,一排有颜色和头发,一排只有头发
  • 1行,颜色和头发与分隔符结合:

    $color_sql=内爆(',',array_map($color,'mysql_real_eescape'));$hair_sql=内爆(',',array_map($hair,'mysql_real_eescape'));

    插入mytable(…,颜色,头发,…)VALUES(…,'$color_sql','$hair_sql',…);

此外,在test.php的开头,我假设有这样的东西:

<?php
     error_reporting(E_ALL);
     $g1 = $_POST['g1'];
     $g2 = $_POST['g2'];
     $g3 = $_POST['g3'];
     ...

验证可以在一个周期内完成:

<?php
     error_reporting(E_ALL);
     $sum = 0;
     for ($i = 1; $i <= 3; $i++)
     {
         $arr = "g$i";
         if (!isset($_POST[$arr]))
             ${$arr} = array();
         else
             ${$arr} = $_POST[$arr];
         if (!is_array(${$arr}))
             die("Error in input parameter $arr");
         ${"ng$i"} = count(${$arr});
         if (${"ng$i"} < 1)
             die("At least one $arr checkbox must be checked");
         $sum += ${"ng$i"};
         ${"g$i"."_sql"} = implode(',', array_map(${$arr}, 'mysql_real_escape'));
     }
     // NOTICE: 'NULL' between quotes? Should't it be NULL without quotes?
     // If ID is autoincrement, just omit it: (g1, g2, g3) VALUES ('$g1_sql',...)
     $query="INSERT INTO ch_lg (ID, g1, g2, g3) VALUES ('NULL','$g1_sql','$g2_sql','$g3_sql')";
     mysql_query($query) or die(mysql_error());
     mysql_close();