奇妙な問題があります。複数のフォームに使用される 1 つの PHP スクリプトがあります。すべてのリクエストを受け取り、データベース内の適切なテーブルにデータを配置します。現状では、次のようになります。
$fields = "";
$values = "";
foreach ($_REQUEST as $key=>$value)
{
$key = str_replace(":","",$key);
$fields .= "$key,";
$values .= "'$value ',";
}
//remove the ending comma from $fields and $values
$fields = substr($fields, 0, -1);
$values = substr($values, 0, -1);
$sql = "INSERT INTO " . $survey . " ($fields) VALUES ($values)";
mysql_query($sql)
or die(mysql_error());
そして、これはうまくいきます。問題は、チェックボックスのあるフォームがいくつかあることです (つまり、1 人が複数のオプションを選択できます)。get メソッドを使用すると、クエリ文字列は次のようになります。
www.somesite.php?V9=1&V9=2&V9=4
現在のスクリプトでは、最後の値であるため、4 だけが取得されます。
これが発生する理由は、チェックボックスの名前がフォームで定義されているためです。name="V9[]" ではなく name="V9" と表示されますが、フォームを変更できません。それらはソフトウェアによって生成され、どのユーザーも HTML フォームを作成し、それをスクリプトにポイントすると、それらの情報がテーブルに記録されるという考えです。したがって、HTML を変更することは私にとって選択肢ではありません。
そのため、キーが送信されたかどうかを検出し、送信された場合は値を追加する方法が必要です。私はこれを試しました:
$fields = "";
$values = "";
foreach ($_REQUEST as $key=>$value)
{
//check to see if the key has already been used for multi-choice questions
$key_check = strpos($fields, "$key,");
if($key_check !== false){
$values = substr($values, 0, -2);
$values .= "\;$value ',";
}else{
$key = str_replace(":","",$key);
$fields .= "$key,";
$values .= "'$value ',";
}
}
//remove the ending comma from $fields and $values
$fields = substr($fields, 0, -1);
$values = substr($values, 0, -1);
$sql = "INSERT INTO " . $survey . " ($fields) VALUES ($values)";
mysql_query($sql)
or die(mysql_error());
しかし、私は同じ結果を得ます。$key_check は決して有効ではないようです。どんな助けでも大歓迎です。ここの誰かが、同様のことを行う動作中の ASP バージョンを持っていますが、DB に保存するのではなく、データを電子メールで送信します。