テキスト入力から一連の値を収集する PHP フォームがありますが、1 つの入力については、javascript を介して入力を行います (ユーザーがカレンダーから日付を選択し、その日付がテキスト入力に入力されます)。これの簡略版をセットアップしました:
<?php
$displayForm = true;
if ($_POST['submitFlag'] == 1) {
// Form was submitted. Check for errors and submit.
$displayForm = false;
$installationTime = $_POST['installation-time'];
// send e-mail notification
$recipients = "test@test.com";
$subject = "Test Email - Test Form Submission";
$message = wordwrap('Someone has filled out the secure form on test.com. Here\'s what they had to say:
Installation Time: ' . $installationTime .'
');
$headers = "From: test@test.com";
mail($recipients, $subject, $message, $headers);
// Output thank you message
?>
<h2>Thank You!</h2>
<?php if($installationTime == NULL){echo 'test failed: value submitted was null.';}else{echo 'test passed: value submitted was not null.';} ?>
<p>Your form has been submitted. Thank you for your interest in test.com.</p>
<?php
}
if ($displayForm) {
// If form was not submitted or errors detected, display form.
?>
<div class="note"><span class="required">*</span> Click me to set value of input.</div>
<form name="contactForm" id="contactForm" method="post" enctype="multipart/form-data" action="<?php echo $_SERVER['PHP_SELF']; ?>?state=submit">
<label for="installation-time" class="service-time">The time you have selected for installation is: <span class="required">*</span></label>
<input type="text" name="installation-time" id="installation-time" disabled value="<?php echo $_POST['installation-time']; ?>" />
<input type="hidden" name="submitFlag" id="submitFlag" value="1" />
<input type="submit" name="submit" id="submit" value="Sign-Up" />
</form>
<?php
} // End of block displaying form if needed.
?>
そして、jQuery で次のいずれかを実行します。
$('.note').click(function(){
$('#installation-time').val('test string');
});
フォームを送信すると、その値を収集するはずの PHP 変数が null になります。フォーム内の他のすべての入力は機能し、JavaScript を削除して、JavaScript で設定したものとまったく同じテキストを入力に手動で入力すると、同様に機能します。
問題は、テキスト入力にまったく同じ文字列を手動で入力するのではなく、フィールドに JavaScript を入力すると問題が発生する理由です。ここでもエラーは発生せず、入力はフロントエンドで正しく設定されています。どういうわけか、フォームを投稿しても、JavaScript で設定した場合と手動で入力した場合の値が反映されません。ここで私が見逃している本当に基本的な何かがなければなりません。
ここで何が起こっているのか分かりますか?私はこれについて何時間も戸惑いましたが、役に立ちませんでした。
更新: コードを更新、テスト ページ: http://dev.rocdesign.info/test/