jQueryを使用してそれを行う方法:
ブラウザーは常にこの js ピースを実行しないことを決定できるため、これは絶対確実ではありませんが、フォームを送信する前 (およびサーバーの応答を待機する前) にユーザーに通知するため、サーバーへの無駄な要求を防ぐため、主に帯域幅を節約するために役立ちます。
Useless requests
ここでは、HTTP リクエスト (フォーム送信) を意味し、ユーザーに 1 つのチェックボックスをオンにしてから同じデータを再度送信するように求めるメッセージを返します。
$(document).ready(function() {
// Catch submit events:
$('form').submit(function() {
// Check if checkbox is checked:
if ($('#checkme').is(':checked')) {
// Allow form submit:
return true;
} else {
// Prevent form submit:
alert('You must check the Approve checkbox to continue!');
return false;
}
});
});
PHPの見出しを使用してそれを行う方法<form>
の例を参照してください。
上記のクライアント側のソリューションはtomhallamの回答に基づいており、それを少し小さく、よりシンプルに、完全なものに変更し、jQuery の推奨事項を少し改善しています。
PHP を使用してそれを行う方法:
この場合、PHP を使用して、サーバー側で同じチェックを行うことは常に良いことです。サーバー側のチェックは、クライアントが Javascript またはサーバーによって定義された他のクライアント側のチェック方法をサポートしていない場合でも、値が実際にチェックされることを保証します。
<?php
/* POST($key) returns value of $_POST($key) if set,
* otherwise empty string is returned. */
function POST( $key ) {
if ( isset( $_POST[$key] )) return $_POST[$key];
else return '';
}
if ( isset( $_POST['checkme'] )) {
// Checkme is checked, do something with form data:
mySql_insert_formdata( $_POST );
$_POST['error'] = 'Form processed, thanks for your data';
} elseif ( isset($_POST['submitted'])) {
// Form submitted but checkme not checked, set error message
$_POST['error'] = 'Checkme must be cheked first!';
}
echo POST('error');
?>
<form action="forms.php" method="post">
<!-- Hidden field to check at server if form is submitted -->
<input type="hidden" name="submitted" value="anything" />
<!-- Some fields for user to fill, POST() inserts previous value if any -->
<label for="email">eMail</label>
<input type="email" id="email" name="email" value="<?php echo POST('email'); ?>" /><br/>
<!-- Checkbox that must be checked -->
<input type="checkbox" id="checkme" name="checkme" />
<label for="checkme">Approve</label><br/>
<!-- And submit button -->
<input type="submit" value="Submit" />
</form>
クライアント側とサーバー側のソリューションを組み合わせる:
Javascript (クライアント側) ソリューションは、ブラウザの設定と JavaScript のサポートに依存します。
PHP (サーバー側) ソリューションは機能することが保証されており、クライアント/ブラウザーはこれを変更できません。
ただし、Javascript がサポートされている場合はいつでも、クライアントは問題について即座に通知を受け取り、サーバーの処理を待つ必要がないように、両方を持っているとよいと思います。
また、ユーザーが JS サポートを持っていない場合、サーバーがフォームをチェックし、データを使用するか"try again"
エラーを返す間、サーバーを待つ必要があります。