5

PHP CodeIgniter フレームワークを使用しています。

問題は、チェックボックスを選択してフォームを送信することで、入力して承認したフィールドをユーザーにチェックしてもらいたいということです。

これらはフィールドのようです。

<tr>    
    <td>Remarks </td>
    <td><textarea name="particular" rows="3" class="save_record autosuggestship"></textarea></td>   
    <td>&nbsp;</td>
    <td>&nbsp;</td>                 
</tr>
<tr>
    <td>Custom Reference No.</td>
    <td><input type = 'text' name = 'custom_ref_no' class = 'save_record autosuggestship' id="custom_ref_no" /></td>
    <td>Date</td>
    <td><input name = 'costom_date' type = 'text' class = 'save_record date_class autosuggestship' id="costom_date" /></td>
</tr>
<tr>
    <td>
        <p> Container Information </p>
    </td>
    <td>

そして、これが承認するためのチェックボックスです。

<tr>
    <td>Approve</td>
    <td><input type="checkbox" id="Approve" /></td>
    <td>&nbsp;</td>
    <td align="left">&nbsp;</td>
</tr>
4

3 に答える 3

1

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"エラーを返す間、サーバーを待つ必要があります。

于 2012-04-30T09:24:29.413 に答える
1

<script></script>jQuery の使用:タグでラップされ、jQuery を含むページにこれを挿入してみてください。

$(document).ready(function() {
    $('form input[type=submit]').on('click', function(e) {
      e.preventDefault();
      if($('#Approve').attr('checked') == 'checked') {
        $('form').submit();
      }
      else {
        alert('You must check the Approve checkbox to continue!');
      }
    });
    // if the user presses enter.
    $('form').on('keyup', function(e) {
      if(e.which == 13) {
       $('form').submit();
      }
    });
});

PHP の場合 (必ず入力にname="Approve":

if(isset($_POST['Approve']) {
  // they have ticked the checkbox.
}
于 2012-04-30T08:52:49.207 に答える
0

フォーム onsubmit イベント ハンドラを使用する

<form onsubmit="return this.Approve.checked?true:alert('must approve!'),false">
<table>
<tr>
    <td>Approve</td>
    <td><input type="checkbox" id="Approve" /></td>
    <td>&nbsp;</td>
    <td align="left">&nbsp;</td>
</tr>
</table>
<input type="submit"/>
</form>

関数を使用できるインライン コードの代わりに、インラインの "return myfunc()" を残すことを忘れないでください。これは、フォームの送信がその戻り値に依存するためです。true の場合、フォームが送信され、それ以外の場合は待機するだけです。

于 2012-04-30T08:55:59.910 に答える