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. 彼は 1 つの配列から 1 つ以上のチェックボックスを選択しました (つまり、合計 4 つを選択する必要があり、それぞれ 1 つだけを選択することはできません) - これはあなたのコードでは発生していないと思います。そうですか?

ありがとうございました

4

1 に答える 1

2

「両方で3本以下」というのは、髪2本+1色ならOKだけど、髪2本+2色なら4本だからダメなの?それで:

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

次に、私の値をdb列COLOR / HAIRに挿入します。

DB がどのように構造化されているか、どのようにデータが必要かを説明する必要があります。もし私が髪を2本とカラーを1本手に入れたら、あなたは欲しいですか:

  • 3列、カラー1列、ヘアー2列
  • 2 列、1 つはカラーと髪、もう 1 つは髪のみ
  • 色と髪がセパレーターで結合された 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 に答える