2012-04-11 133 views
0

我的形式將驗證在客戶端,但我試圖找出爲什麼它沒有在服務器端驗證。我沒有完成我的PHP,但它甚至沒有提出我的控制檯中的POST請求,說它提交表單到服務器。不提交表單

的jQuery:

$(document).ready(function() 
{ 

/* 
* Validate the form when it is submitted 
*/ 
var validateform = $("#newArticleForm").validate({ 
    invalidHandler: function(form, validator) { 
     var errors = validator.numberOfInvalids(); 
     if (errors) { 
      var message = errors == 1 
      ? 'You missed 1 field. It has been highlighted.' 
      : 'You missed ' + errors + ' fields. They have been highlighted.'; 
      $('.box .content').removeAlertBoxes(); 
      $('.box .content').alertBox(message, {type: 'warning', icon: true, noMargin: false}); 
      $('.box .content .alert').css({ 
       width: '100%', 
       margin: '0', 
       borderLeft: 'none', 
       borderRight: 'none', 
       borderRadius: 0 
      }); 
     } else { 
      $('.box .content').removeAlertBoxes(); 
     } 
    }, 
    showErrors : function(errorMap, errorList) { 
     this.defaultShowErrors(); 
     var self = this; 
     $.each(errorList, function() { 
      var $input = $(this.element); 
      var $label = $input.parent().find('label.error').hide(); 
      $label.addClass('red'); 
      $label.css('width', ''); 
      $input.trigger('labeled'); 
      $label.fadeIn(); 
     }); 
    }, 
    submitHandler: function(form) { 
     var dataString = $('#newArticleForm').serialize(); 
     $.ajax({ 
      type: 'POST', 
      url: '/kowmanager/dashboard/articleSubmit', 
      data: dataString, 
      dataType: 'json', 
      success: function(data) { 
       if (data.error) { 
        $('.box .content').removeAlertBoxes(); 
        $('.box .content').alertBox(data.message, {type: 'warning', icon: true, noMargin: false}); 
        $('.box .content .alert').css({ 
         width: '', 
         margin: '0', 
         borderLeft: 'none', 
         borderRight: 'none', 
         borderRadius: 0 
        }); 
       } 
       else 
       { 
        $('.box .content').removeAlertBoxes(); 
        $('.box .content').alertBox(data.message, {type: 'success', icon: true, noMargin: false}); 
        $('.box .content .alert').css({ 
         width: '', 
         margin: '0', 
         borderLeft: 'none', 
         borderRight: 'none', 
         borderRadius: 0 
        }); 
        $(':input','#newArticleForm') 
        .not(':submit, :button, :hidden, :reset') 
        .val(''); 
       } 
      } 
     }); 
    } 
}); 

}); 

控制器:

function articleSubmit() 
{ 
    $outputArray = array('error' => 'yes', 'message' => 'unproccessed'); 
    $outputMsg = ''; 
    // Sets validation rules for the login form 
    $this->form_validation->set_rules('title', 'Title', 
     'trim|required|xss_clean|alpha_numeric'); 
    $this->form_validation->set_rules('category', 'Category', 
     'integer'); 
    $this->form_validation->set_rules('isSticky', 'Is Sticky', 
     'integer'); 
    $this->form_validation->set_rules('comments', 'Allow Comments', 
     'integer');  

    // Checks to see if login form was submitted properly 
    if (!$this->form_validation->run()) 
    { 
     $outputArray['message'] = 
      'There was a problem submitting the form! Please refresh the window and try again!'; 
    } 
    else 
    { 

    } 
} 

查看:

<?php $attributes = array('class' => 'validate', 'id' => 'newArticleForm'); ?> 
      <?php echo form_open_multipart('', $attributes) ?> 
       <div class="content no-padding"> 
        <div class="section _100"> 
         <?php echo form_label('Title', 'title'); ?> 

         <div> 
          <?php echo form_input('title', '', 'class="required"'); ?> 
         </div> 
        </div> 

        <div class="section _100"> 
         <?php echo form_label('Category', 'category'); ?> 

         <div> 
          <?php echo form_dropdown('category', $categories, '', 'class="required"'); ?> 
         </div> 
        </div> 

        <div class="section _100"> 
         <?php echo form_label('Is Sticky', 'sticky'); ?> 

         <div> 
          <?php 
                  $options = array(
                     '' => 'Please Select An Option', 
                     '0' => 'No', 
                     '1' => 'Yes', 
                    ); 
                  ?><?php echo form_dropdown('sticky', $options, '', 'class="required"'); ?> 
         </div> 
        </div> 

        <div class="section _100"> 
         <?php echo form_label('Allow Comments', 'comments'); ?> 

         <div> 
          <?php 
                  $options = array(
                     '' => 'Please Select An Option', 
                     '0' => 'No', 
                     '1' => 'Yes', 
                    ); 
                  ?><?php echo form_dropdown('comments', $options, '', 'class="required"'); ?> 
         </div> 
        </div> 

        <div class="section _100"> 
         <?php echo form_label('Date Comments Expire', 'datetime'); ?> 

         <div> 
          <input id="datetime" type="datetime" class="required" /> 
         </div> 
        </div> 

        <div class="section _100"> 
         <?php echo form_label('Status', 'status'); ?> 

         <div> 
          <?php 
                  $options = array(
                     '' => 'Please Select An Option', 
                     '0' => 'Inactive', 
                     '1' => 'Active', 
                    ); 
                  ?><?php echo form_dropdown('status', $options, '', 'class="required"'); ?> 
         </div> 
        </div> 

        <div class="section _100"> 
         <?php echo form_label('Image', 'file'); ?> 
         <div> 
          <?php echo form_upload('file', '', 'class="required"'); ?> 
         </div> 
        </div> 

        <div class="section _100"> 
         <?php echo form_label('Permalink', 'permalink'); ?> 

         <div> 
          <?php echo form_input('permalink', '', 'class="required"'); ?> 
         </div> 
        </div> 

        <div class="section _100"> 
         <?php echo form_label('Article', 'article'); ?><?php $attributes = array('name' => 'article', 'cols' => '30', 'rows' => '5', 'id' => 'article', 'class' => 'required') ?> 

         <div> 
          <?php echo form_textarea($attributes); ?> 
         </div> 
        </div> 
       </div><!-- End of .content --> 

       <div class="actions"> 
        <div class="actions-left"> 
         <?php echo form_reset(array('id' => 'reset', 'name' => 'reset'), 'Reset'); ?> 
        </div> 

        <div class="actions-right"> 
         <?php echo form_submit(array('id' => 'submit', 'name' => 'submit'), 'Submit'); ?> 
        </div> 
       </div><!-- End of .actions --> 
      <?php echo form_close(); ?> 

編輯:

我使用這個jQuery很好,但不知道是否其他形式任何人都有還有其他想法嗎?

+0

你嘗試加入'.complete()'和'.error()'處理程序'$ .ajax'請求?他們返回什麼? – 2012-04-11 18:05:23

回答

0

我知道這個問題的答案的問題......它驅使我堅果所以我很樂意幫助你與這一個:))

笨的作品與POST請求的方式很特別。如果你這樣做,而是使用GET請求,你會看到它的工作正常......所以發生了什麼?

笨有CRSF令牌來確保您發佈在一個安全的方式您的數據。 因此,請確保您將此crsf值與其餘數據一起發送。

我給你舉個例子,這是我的POST AJAX +笨的樣子:

$.ajax({ 
     type: 'POST', 
     dataType: 'HTML', 
     data: { 
      somevalue : somevalue, 
      csrf_test_name : $.cookie('csrf_cookie_name') 
     }, 

...

正如你所看到的,你CRSF值存儲在cookie中。我使用jquery插件cookie助手,但感覺炒使用任何其他插件。

然而,記住這個名字「csrf_test_name」總是預計笨使POST請求

有一個愉快的一天!


對於那些誰想要閱讀更多一個回合這一點,這就是我所說的: http://aymsystems.com/ajax-csrf-protection-codeigniter-20

+0

奇怪,因爲我有其他形式,我使用這項工作很好,我有上面的方式,但與這種形式它不適用於某種原因。 – 2012-04-11 18:13:26

+0

在你的配置文件中,你的global_xss_filtering是否設置爲true? – 2012-04-11 18:14:36

+0

是的,它被設置爲true – 2012-04-11 18:17:05