0

Codeigniter のフォーム検証を使用して、モーダル ウィンドウからのテキスト入力がデータベースに既に存在するものと重複しているかどうかを確認しようとしています。Codeigniter の set_rules の内部で何が起こっているかを確認するのに十分なことがないようです。コード動物の誰かが私を助けてくれることを願っています。

Ajax はテキストをコントローラーの関数に送信し、コントローラーはそれを $value として取得し、コントローラーでこの文字列が既に DB の table.field にあるかどうかを確認し、そうでない場合は $unique=false を送信します ( true) jQuery に戻ります。問題は、DB の内容に関係なく、set_rules ステートメントが常に true を返すことです。

コントローラーは次のとおりです。

public function change_options()
{
    # Receives and sends back user-entered new option and adds it to database


    # Get strings from ajax in view
    $value = $_POST['new_option'];
    $value_class = $_POST['new_option_class'];
    //echo $value_class; die;

    #Make array to send to model
    $value_array = array('Options' => $value);

    # Make sure option is unique
    $this->load->library('form_validation');
    //$this->form_validation->set_rules('Options', 'Option', 'is_unique['.$value_class.'.Options]');    
    $this->form_validation->set_rules('add-new-submit', 'Option', 'is_unique['.$value_class.'.Options]');    <---- This is always true

    if ($this->form_validation->run() == TRUE) // Only add new option if it is unique
    {
        # Add new option to dropdown in database
        $this->load->model('data_model');
        $this->data_model->add_option($value_class, $value_array);  
        $unique = true;         
    }
    else 
    {           
        # Send string back to view via ajax
        $unique = false;
    }                       

    echo json_encode(array($value, $unique));           
}

set_rules の最初のスロットで考えられるすべてを試しました: 'Options', 'add-new-text', 'add-new-submit', (これらの最後の 2 つはそれぞれモーダル html の名前です) $ value_class (問題のフォーム要素の ID)。完全を期すためのモーダルは次のとおりです。

  <!-- add-new field -->
  <div class="modal small hide fade" id="add-new" tabindex="-1" role="dialog" aria-labelledby="add-new-fieldLabel" aria-hidden="true">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-hidden="true">√ó&lt;/button>
        <h3 id="add-new-fieldLabel">Add New Field</h3>
      </div>
      <div class="modal-body">

          <p>Would you like to add a new item?</p>
          <input type="text" id="add-new-text" name="add-new-text" placeholder="Type the new option">

      </div>

      <div class="modal-footer">
        <button type="button" class="btn btn-success" id="add-new-submit" name="add-new-submit"/>Add</button>
      </div>
 </div><!-- /add-new field -->

何が起こっているか分かる人はいますか?

4

1 に答える 1

0

私はこれを行う方法を考え出し、どうやら投稿または受信していないAJAXにコードを投稿しました。フォーム検証を使用する必要はありません!

于 2013-07-21T20:29:34.660 に答える