2013-07-15 38 views
0

我開發一個網站用CI 2.1.3笨HMVC不明確的表單字段

我有一個博客模塊,在這個博客我有一個表來發表評論。

我打電話這種形式的視圖中使用:

echo Modules:: run('blog/comment'); 

當我提交這份表格給ajaxForm,輸入字段的值不被清除。

我控制器對評論表單功能:

public function comment($postId) 
{ 
$this->load->helper('form'); 
$this->data['success'] = FALSE; 
$this->data['postId'] = $postId; 

if(!isset($_POST['comment_submit'])) 
{  
    $this->data['new_comment'] = $this->blog_comment_m->get_new(); 
} 
else 
{ 
    $this->data['new_comment'] = $this->blog_comment_m->object_from_post(array('author', 'authur_email', 'content')); 
    $this->load->library('form_validation'); 
    $rules = $this->blog_comment_m->rules; 
    $this->form_validation->set_rules($rules); 

    if($this->form_validation->run() == TRUE) 
    { 
    $this->data['success'] = TRUE; 
     $this->data['new_comment'] = $this->blog_comment_m->get_new(); 
    } 
} 

$this->load->view('add_comment', $this->data); 
} 

評論表單:

<div id="commentAjax"> 
<?php $attr = array('id'=>'commentForm'); echo form_open(site_url('blog/comment/' . 

$postId), $attr); ?> 
    <input type="hidden" name="post_id" value="<?php echo $postId; ?>" /> 
    <div style="border-top:2px groove #930"><h4>Leave a Comment</h4></div> 

    <div class="control-group <?php if(form_error('author')) echo 'error'; ?>"> 
    <label>Name *</label> 
    <?php echo form_input(array('name'=>'author', 'class'=>'input-large', 'value'=>set_value('author', $new_comment->author))); ?> 
    <span class="help-block"><?php echo form_error('author'); ?></span> 
    </div> 

    <div class="control-group <?php if(form_error('author_email')) echo 'error'; ?>"> 
    <label>Email *</label> 
    <?php echo form_input(array('name'=>'author_email', 'class'=>'input-large', 'value'=>set_value('author_email', $new_comment->author_email))); ?> 
    <span class="help-block"><?php echo form_error('author_email'); ?></span> 
    </div> 

    <div class="control-group <?php if(form_error('content')) echo 'error'; ?>"> 
    <label>Comment *</label> 
    <?php echo form_textarea(array('name'=>'content', 'value'=>set_value('content', $new_comment->content))); ?> 
    <span class="help-block"><?php echo form_error('content'); ?></span> 
    </div> 
    <div> 
     <?php echo form_submit('submit', 'Send Comment', 'class="btn btn-submit"');?> 
     <input type="hidden" name="comment_submit" value="1" /> 
    </div> 
    <?php echo form_close(); ?> 

    <?php if($success): ?> 
    <div style="border:1px solid #666; background:#9F9; color:#000; margin-top:10px; width:50%; padding:5px; font-weight:bold"> 
     <p>Thank you for your comment.</p> 
     <p>To avoid spam, your comment has been submitted for approval.</p> 
     <p><h2 class="highland">Highland Coffee Roastery</h2></p> 
    </div> 
    <?php endif; ?> 
</div> 
<script> 
$(function() 
{       
    var options = { target: '#commentAjax' }; 
    $('#commentForm').ajaxForm(options); 
}); 
</script> 

我甩了$ new_comment陣列和字段的值是空的。

我檢查了頁面源和輸入字段values =''。

但是,我仍然看到我在輸入字段中提交的值。

刷新頁面仍顯示值。

出了什麼問題?

+0

順便說一下,當有人回答我的問題時,有沒有辦法獲得電子郵件?無法在任何地方找到此選項。 –

回答

0

我上了Daniweb論壇答案:

好了,問題是,SET_VALUE()如果驗證運行真的還是假的不考慮,通常你重定向()等接線柱陣列被重置了自動,在這裏我們可以通過擴展/system/libraries/Form_validation.php迫使這一行動,創建/application/libraries/MY_Form_validation.php並粘貼此:驗證運行真正

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 
    class My_Form_validation extends CI_Form_validation { 
    public function __construct() 
    { 
    parent::__construct(); 
    } 
    public function resetpostdata() 
    { 
    $obj =& _get_validation_object(); 
    foreach($obj->_field_data as $key) 
    { 
    $this->_field_data[$key['field']]['postdata'] = NULL; 
    } 
    return true; 
    } 
    } 
    ?> 

後,調用該方法,如在這個例子中:

if($this->form_validation->run() === FALSE) 
    { 
    # . . . 
    } 
    else 
    { 
    $this->form_validation->resetpostdata(); 
    # load view & other stuff 
    }