我正在尝试理解php是如何工作的,但我在理解语法和数组/对象时遇到了问题。
我在代码中的评论中还有一些问题:
我理解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? ?>
答案 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
}
}