0

Codeigniter+jQuery の組み合わせを使用して、独自のコーディングを数多く行っています。私の現在のプロジェクトにはさまざまな種類の入力があり、データが異なる場合は、別の方法で処理する必要があります。1 つのフィールドを電子メール フィールドにすることも、1 つのフィールドを数値フィールドにすることもできます。数字とコンマなどのみを許可する必要があります。要点はわかりました。

私がどのように物事を行ってきたかを非常に簡単な例にしました。したがって、送信が押されると、すべての入力のデータを正規表現一致でチェックし、何か問題がある場合は、その入力の色を変更し、いくつかのフィールドで何が問題なのかを通知します。とてもシンプルです。

この方法は機能しますが、多くの入力があると、非常に面倒で維持が難しくなります。つまり、ユーザーが JavaScript を無効にしている場合は、PHP フォールバックが必要になるということです。だから私はjQueryとPHP側で同じチェックをしています。

もう一つはセキュリティです。私はエクスプロイト/XSS 攻撃についてほとんど偏執的すぎると思います。正規表現を使用してすべての不要な文字を削除することが多く、その後、残りのデータが有効かどうかを他の正規表現で確認します。

Codeigniter と jQuery の間でこのデータ処理/検証を実現するためのより良い方法があるかどうか、誰かが教えてくれたら幸いです。

アプリケーション/コントローラー/example.php

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Example extends CI_Controller {

  function __construct()
  {
    parent::__construct();

    $this->load->helper('url');
  }

  public function index()
  {
    $this->load->view('example_view');
  }

  public function jquery()
  {
    echo "Username: ". $this->input->post('userName');
    echo "userAge: ". $this->input->post('userAge');
    echo "userEmail: ". $this->input->post('userEmail');
  }
}
?>

アプリケーション/ビュー/example_view.php

<!DOCTYPE html>
<html lang="en-us">
  <head>
    <meta charset="utf-8">
    <title>My test</title>

    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
  </head>

  <body>
    <div id="status"></div> <br />

    <form id="userForm">
      <label for="userName">Username:</label>
      <input type="text" name="userName" id="userName" /> <br />

      <br />

      <label for="userAge">Age:</label>
      <input type="text" name="userAge" id="userAge" /> </br >

      <br />

      <label for="userEmail">E-Mail:</label>
      <input type="text" name="userEmail" id="userEmail" /> </br >

      </br >

      <input type="submit" name="sendData" value="Send it" />
    </form>
  </body>
</html>


<script>
$("#userForm").submit(function(event) {

    event.preventDefault();

    var error = 0;

    if($("#userForm").match('/regexp_here/'))
    {
      $("#userName").addClass('alert');
      error++;
    }
    else
    {
      $("#userName").removeClass('alert');
    }

    if($("#userAge").match('/regexp_here/'))
    {
      $("#userAge").addClass('alert');
      error++;
    }
    else
    {
      $("#userAge").removeClass('alert');
    }

    if($("#userEmail").match('/regexp_here/'))
    {
      $("#userEmail").addClass('alert');
      error++;
    }
    else
    {
      $("#userEmail").removeClass('alert');
    }

    if(error == 0)
    {
      $.ajax({
        type: 'POST',
        url: 'example/jquery/',
        data: { 
          userName: userName, 
          userAge: userAge, 
          userEmail: userEmail
        },
        success:function(data) 
        {
          $("status").html(data);
        },
        error:function() 
        {
          $("status").html("Well, it was error...");
        }
      });
    }
    else { }
});
</script>
4

0 に答える 0