0

我的 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. 用户从每个数组中选择了 1 个复选框(您的代码执行此操作)

  2. 他没有选择超过 4 个复选框(您的代码执行此操作)

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

谢谢

4

1 回答 1

2

“两个都不超过3个”是指2个头发+1个颜色就可以了,但是2个头发+2个颜色不是因为会给出4个吗?然后:

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

然后将我的值插入到 db 列颜色/头发中。

您必须解释您的数据库的结构以及您想要数据的方式。如果我得到 2 种头发和 1 种颜色,你想要:

  • 3排,一带颜色,两排带毛
  • 2排,一个有颜色和头发的,一个有头发的
  • 1 行颜色和毛发与分隔符合并:

    $color_sql = implode(',', array_map($color, 'mysql_real_escape')); $hair_sql = implode(',', array_map($hair, 'mysql_real_escape'));

    INSERT INTO mytable (..., color, hair, ...) 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();
于 2012-07-10T18:03:04.590 回答