TL;DRバージョン
何百ものhtml入力要素を含む大きなフォームがあります。すべての要素名を格納するためにphp配列を作成しました。process.phpファイルを実行すると、ループを使用してその配列を実行し、新しい配列を作成します。その配列のキーは各要素の名前であり、その配列の値は各要素の値です。このコードは、テキストボックス、ラジオボタンの要素値として機能し、ドロップダウン選択は正常に機能することを知っています。チェックボックスには値が配列に入れられていません。代わりに、キーと値は同じもの、つまり要素の名前を読み取ります。$ _POSTが、値ではなく、チェックボックスの名前またはIDを教えてくれるのはなぜですか?
完全な説明/wコードサンプル:
私が抱えている問題は、私の理解からすると、$ _ POSTがどのように機能するかに反するため、私にはかなり珍しいように思われます。
いずれにせよ、私はこの1年間旅行保険のウェブサイトを開発していて、完成に近づいています。クライアントは、ユーザーがアプリケーションを送信した後に表示できるバージョンのフォームを作成することを望んでおり、選択したファイルから値を取得します。
私の問題は、$ _ POSTがチェックボックス要素の値を取得しておらず、名前またはIDを取得していることです(どちらも同じであるため、どちらを取得しているかわかりません)。$ _POSTは、チェックボックスだけでなく、すべてのラジオ、テキスト、およびドロップダウン要素の値を正常に取得しています。
フォームが非常に大きいため、process.phpファイルに非常に大きな配列があります。私が行ったことは、アクセスしたい各要素の名前を持つ配列を作成することです。以下は、配列が従う構造のサンプルです。ここにすべてを投稿するのは非常に大きなものです(400以上の要素がフォームにあります)。
$form_data = array
('trav_emer_med_insur',
'trav_emer_single',
'trav_emer_single_date_go',
'trav_emer_single_date_ba',
'trav_emer_single_days',
'trav_emer_annual',
'trav_emer_annual_date_go',
'trav_emer_annual_days',
'trav_emer_extend',
'trav_emer_extend_date_go',
'trav_emer_extend_date_ef',
'trav_emer_extend_date_ba',
'trav_emer_extend_days',
);
これは、process.phpで実行され、サーバー上の保護されたフォルダーに保存されるユーザーデータファイルを作成するコードです。
// Create user output data
$out_data = array();
$count = count($form_data);
for( $i = 0; $i < $count; $i++ )
{
if(empty($_POST[$form_data[$i]])) {
$out_data[$form_data[$i]] = " ";
}
else {
$out_data[$form_data[$i]] = $_POST[$form_data[$i]];
}
}
//Set variable names for new file
$dir = "/home/imelnick/public_html/getawayinsured.ca/userdata/";
$timestamp=date("YmdGis");
$name = $out_data['txtApp1Name'];
$value = str_replace(" ", "", $name);
$item = $value . "^" . $timestamp . ".txt";
$filename = $dir . $item;
//Put data in file
//Open file for writing
$fileHandle = fopen($filename, 'w') or die("Can't open file");
//Write contents of out_data array to file
foreach ($out_data as $key => $value) {
$fileLine = $key . "\t" . $value . "\r\n";
fwrite($fileHandle, $fileLine);
}
//Close file
fclose($fileHandle);
配列内の名前の最初のブロックはチェックボックスに属し、次の形式に従います。
<input type="checkbox" name="trav_emer_med_insur" id="trav_emer_med_insur_if" value="YES" class="form_elements" onClick="if(this.checked){document.getElementById('trav_emer_med_options').style.display='block';}else{document.getElementById('trav_emer_med_options').style.display='none';}"/>
onClickステートメントは、申請者に追加のオプションを提供する追加のチェックボックスを含むdivを展開します。
フォームデータから作成された出力データ配列には、要素の名前として配列内の各項目のキーがあり、配列内の各項目の値は対応するHTML要素の値です。
配列を分割して$key/ $ valueの組み合わせを書き込むと、の期待値は$_POST[$form_data[0]] (note: $form_data[0] = trav_emer_med_insur)
上記のチェックボックスコードの値になりますvalue="YES"
。ただし、ファイルの出力は次のようになります。
trav_emer_med_insur trav_emer_med_insur
フォーム上の他の要素の値がファイルに完全に保存されているため、フォーム自体を処理するコードに問題はないと確信しています(ラジオボタン、テキストボックス、ドロップダウンはすべて機能します)。チェックボックスはそうではなく、HTML要素の値を$ _POSTすることを拒否し、単に名前を2回出力し続けます。
たとえば、smoke_ifという名前の上記の配列サンプルにリストされていない形式の別の要素は、申請者が喫煙したかどうかを尋ねるラジオボタンのペアです。これは最近のアプリケーションからの出力例です。
ご覧のとおり、私のコードの望ましい結果が実行されています。
smoked_if no
これは$_POST自体の機能と矛盾するだけでなく、フォーム上の他のすべての要素に問題なく値が投稿されるため、チェックボックス要素と$_POSTに問題があることがわかります。
どんな援助も大歓迎です。