0

フォーム送信アクションでファイルsales_process.phpに渡す複数の配列があります。配列の名前は次のようになります:boards1 = {a、b、c}、boards2 = {b、c、d}、boards3 = {a、c、d}。。など(値はa、b、c、dではありません)。私はこれらを私のフォームの複数の「複数の選択ボックス」に通しています。ここで、a、b、c、dは私の複数の選択オプションです。

for ($count=1;$count<10;$count++)
echo "<td>"."<select name='boards".$count."[]' multiple='multiple'>".showOptionsDrop($boards,$arr)."</select></td>";  

次に、それらをファイルsales_process.phpに渡すときに、implode関数を使用してこれらの配列を文字列に変換し、「schools」テーブルに格納できるようにします。sales_process.phpファイルで、私はこれを行っています:

for ($i=0;$i<$count;$i++) {
$board = implode(',',${'boards'.$i});
$query = "UPDATE schools SET board = '$board' where schoolcode = (some_no)";
$result = mysql_query($query) or die("Error in updating table :".mysql_error());
}  

したがって、このようにして、ループが実行されるたびに、boardsXの値が文字列に変換され、テーブルに格納されます。ここで、Xは1,2,3...などです。
問題は、implode関数が機能せず、エラーが発生することです。
Warning: implode() [function.implode]: Invalid arguments passed in C:\xampp\htdocs\relationshipReport\sales_process.php on line 18

さて、変数${'boards'.$i}が配列ではないと言うなら、私はこれをして、それが私に配列だけを与えることを知りました:

$i=1;
var_dump(${'boards'.$i});
print_r(${'boards'.$i});  

これは次のように出力を与えます:

array(3) { [0]=> string(4) "CBSE" [1]=> string(4) "ICSE" [2]=> string(5) "IGCSE" }
Array ( [0] => CBSE [1] => ICSE [2] => IGCSE )  

私の質問が明確であることを願っています。implode関数で何がうまくいかないかを見つけるのを手伝ってください。質問がわからない場合は、そのことを伝えてください。

4

2 に答える 2

2

あなたの例から、これがあなたの現在のコードであると私は信じています:

for ($i=0;$i<$count;$i++) {
    $board = implode(',',${'boards'.$i});
    $query = "UPDATE schools SET board = '$board' where schoolcode = (some_no)";
    $result = mysql_query($query) or die("Error in updating table :".mysql_error());
} 

その場合は、次のように変更してみてください。

for ($i=0;$i<$count;$i++) {
    if(isset($_POST['boards'.$i]))
    {
        $board = mysql_real_escape_string(implode(',',$_POST['boards'.$i]));
        $query = "UPDATE schools SET board = '$board' where schoolcode = (some_no)";
        $result = mysql_query($query) or die("Error in updating table :".mysql_error());
    }
    else
    {
        echo '$_POST[\'boards' . $i . '\'] doesn\'t exist or is null.<br>';
    }
} 

これにはif、配列エントリが実際に存在することを確認する条件が含まれています。存在する場合は、クエリを実行します。存在しない場合はecho、メッセージが返され、どちらが存在しないかが通知されます。

フロントエンドでJavascriptを確認した場合でも、コードが破損しないことを確認するために、コードを実行する前に必ず確認する必要があります。特にコードに機密情報が含まれている場合は、安全すぎることはありません。

これを試して、あなたがどう行くか教えてください。

于 2012-07-06T06:02:12.710 に答える
1

${'boards'.$i}から来ると仮定し$_POST['boards'.$i]ます。(そうでない場合は、を使用していますがregister_globals、それは良くありません。)

複数選択の場合、オプションが選択されていない場合は、配列の代わりに表示され$_POST['boards'.$i]ます。null

于 2012-07-06T05:48:35.773 に答える