代码点火器表单 - 传递发布数据和从数据库填充字段

时间:2018-03-15 16:45:41

标签: database forms codeigniter view

我正在尝试理解php是如何工作的,但我在理解语法和数组/对象时遇到了问题。

  1. 我知道代码点火器只使用$ _POST并将表单数据保存在数组中但是如何在视图中访问它?
  2. 我在代码中的评论中还有一些问题:

    我理解MVC的概念,但下面的代码是一体化的。

    <?php
    //database - formvalidation 
    //controller - form
    //model - form
    //model methods - add
    //view form/add.php
    class Form extends CI_Controller {
    
        public function __construct() {
            parent::__construct();
            $this->load->model( 'Form_model' );
            $this->load->library( array( 'form_validation' ) );
        }
    //controller > add
        public function add() {
    
            if ( $this->form_validation->run() == FALSE ) {     //displaying form if validation doesn't run
                $this->load->view( 'form/add' );
            }
            else {      //inserting data from the form into the database
    
                //I dont understand what happens here and how to access keys in the view :/
                $data = array(
                    'username' => $this->input->post( 'username' ),
                );
                $this->Form_model->add( $data ); // passing data array to the view
                $this->load->view( 'form/success' ); //loading success page
            }
        }
    
    //Form model > add
            var $table = 'formvalidation';
            public function add( $data ) {
            $this->db->insert( $this->table, $data );
            return $this->db->insert_id();
        }
    
    //Form model > get all items
    //how can I use this function to display data in the view?
        public function get_all() {
            return $this->db->get( $this->table )->result_array();
        }   
    }
    ?>
    
        <? //view ?>
    
        <?php echo form_open('form/add',array('class'=>'pure-form', 'style'=>'width:50%')); ?>
    
    <?php echo form_error('username'); ?>
    
        <?php foreach($asd as $a){ 
    //What if I don't want to use foreach loop?
    //How can i display field values in the view?
    ?>
    <input type="text" name="username" value="<?php echo $asd ?>" class="w3-input" />
    
    
        <?php } ?>
    
    <div><input type="submit" value="Submit" /></div>
    
    </form>
    
    <? //Can you show me simple example of using objects and arrays to display data in the view? ?>
    

2 个答案:

答案 0 :(得分:1)

如果验证失败,您希望使用发布数据重新填充字段,以便用户不必为不会失败的输入重新输入数据。

您可以在表单视图中使用set_value($fieldname)方法执行此操作。

<?php echo form_open('form/add',array('class'=>'pure-form', 'style'=>'width:50%')); ?>
<?php echo form_error('username'); ?>
<input type="text" name="username" value="<?php echo set_value('username'); ?>" class="w3-input" />
<input type="submit" value="Submit" />

现在,如果发生验证错误,用户发布的内容将显示在username字段中。

在此功能中:

public function get_all() {
    return $this->db->get( $this->table )->result_array();
}   

您正在使用result_array()result_array()row_array()的不同之处在于表中的所有用户都将作为数组返回(只要您不具有唯一的where条件),例如array( 0 => array('username'=>'bob'), 1 => array('username'=>'jeff'));。因此,您可以生成一个表或所有用户中的任何一个:

在控制器中:$this->load->view('form/success', array('users' => $this->form_model->get_all());

在视图中:

foreach ($users as $user) {
    echo $user['username'];
}
回声:鲍勃杰夫

但我认为你只想得到刚刚添加的用户......在这种情况下,这样的模型函数可以很好地工作:

public function get_one($id) {
    $this->db->where('id', $id);
    return $this->db->get( $this->table )->row_array();
}   

然后在控制器中:

if ($this->form_validation->run() == FALSE) {
        $this->load->view('form/add');
    } else {
        $data = array(
            'username' => $this->input->post('username'),
        );
        $id = $this->Form_model->add($data);
        $user = $this->Form_model->get_one($id);
        $this->load->view('form/success', array('user' => $user));
    }

并在视野中:

echo $user['username'];

result()row()生成的对象分别与对应的result_array()row_array()相同,但通过->访问对象除外而不是[$somekey]。在最后一个示例中,您使用row()而不是row_array()中的get_one()传递了一个对象,您可以在视图中访问它:$user->username;。将数据分配给视图通常在上述方法中处理,但有关详细信息,您可以view the docs.

答案 1 :(得分:0)

确定。我将post值与数据库函数值混淆。现在这个主题对我来说有点亮了。看下面:

我不知道在哪里可以找到用户指南中的信息:/

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

class Lol extends CI_Controller {

function __Construct() {
    parent::__Construct();
    //loading helpers, models, libraries
    $this->load->database();
    $this->load->helper( array( 'form' ) );
    $this->load->library( array( 'form_validation' ) );
}
//form remembers the username field value
public
function index() {
    echo form_open( 'lol' );
    $val = set_value('username');
    echo form_input( 'username', $val );
    echo form_submit( 'submit', 'Submit' );
    echo form_close();
}

public
function validation() {
    //setting up the form validation
    $this->form_validation->set_rules( 'username', 'Username', 'required|min_length[3]' );

    //displaying form if validation doesn't run
    if ( $this->form_validation->run() == FALSE ) {
        echo form_error( 'username' );
        echo form_open( 'lol/validation' );
        $val = set_value('username');
        echo form_input( 'username', $val );
        echo form_submit( 'submit', 'Submit' );
        echo form_close();
    }
    //inserting data from the form into the database
    else {
        echo "username is ok";
    }
}
//getting field value from database in two ways: array and object. Your pick.
public
function database() {
    echo form_open( 'lol' );
    $val = $this->get_all();
    //echo form_input( 'username', $val->username ); // object
    echo form_input( 'username', $val['username'] ); //array
    echo form_submit( 'submit', 'Submit' );
    echo form_close();
}
//getting database data
public function get_all() {
    //return $this->db->get('formvalidation')->row(); //object
    return $this->db->get('formvalidation')->row_array(); //array
} 

}