[英]how to edit and insert data from the single form
這是我的控制器。 在這里,函數add_post()
是用於添加和更新數據的函數。 問題是,如果我要編輯表單,那么我可以從數據庫中獲取相應區域的表單中的值,但是當我想使用相同的功能添加數據時,則無法。 我進行了很多搜索,但找不到解決方案。
<?php
class Blog_controller extends CI_Controller {
public function index() {
$this->get_post();
}
public function __construct() {
parent::__construct();
$this->load->helper('form');
$this->load->helper('url');
$this->load->model('blog_model');
}
function add_post($id) {
if($id==NULL) {
return $this->load->view('admin/add_post');
} else {
$data['query']=$this->blog_model->get_single_post($id);
$this->load->view('admin/add_post',$data);
}
}
function do_upload() {
$config['upload_path'] = './uploads/';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = '100';
$config['max_width'] = '1024';
$config['max_height'] = '768';
$this->load->library('upload', $config);
if ( ! $this->upload->do_upload())
{
$error = array('error' => $this->upload->display_errors());
$this->load->view('premium/main', $error);
} else {
$this->upload->do_upload();
$data=$this->upload->data();
$filename=$data['file_name'];
$this->blog_model->insert_post($filename);
}
}
function get_post() {
$data['query']=$this->blog_model->get_post();
$this->load->view('premium/main',$data);
}
function view_table() {
$data['query']=$this->blog_model->get_post(); $this->load->view('admin/view_table',$data);
}
}
?>
MODEL
這是我的項目的模型。我想使用單個函數(即insert_post())插入和更新數據。
<?php
Class Blog_model extends CI_Model
{
function __construct()
{
parent::__construct();
$this->load->database();
}
function insert_post($filename)
{
$data=array(
'title'=>$this->input->post('title'),
'description'=>$this->input->post('description'),
'publish'=>$this->input->post('publish'),
'image'=>$filename,
);
$this->db->insert('post',$data);
redirect('blog_controller');
}
function get_post()
{
$query = $this->db->get_where('post');
return $query->result();
}
function get_single_post($id)
{
$query = $this->db->get_where('post',array('id'=>$id));
return $query->row($id);
}
}
?>
這是我的看法。 在此表單中,我想在用戶想要插入數據並在用戶想要編輯時添加數據,然后應在表單的相應字段中檢索數據並應進行更新...
<html>
<body>
<h1>Add Blog Title</h1>
<?php function add_post($id);?>
<?php echo form_open_multipart('blog_controller/do_upload');?>
<p>Title : <input type="text" name="title" value="<?php if($id==0){echo $query->title;}?>"></br></p>
<p>Description : <textarea name="description" rows="5"> <?php echo $query->title;?></textarea></br/></p>
<p>Current Image : <img src="<?php echo base_url();?>/uploads/<?php echo $query->image;?>"</b></p>
<p>Image : <?php echo form_upload('userfile');?></b></p>
<p>Publish ?: <input type="checkbox" name="publish" value="1" <?php if($query->publish == 1) echo 'checked="checked"';?>></br></p>
<input type="submit" value="submit">
</form>
</body>
</html>
這是我的表格,通過該表格傳遞了相應的編輯字段ID,因此我們可以查看表單中的數據,並知道我們要編輯哪個數據字段。
<html>
<body>
<table border="2px">
<tr>
<td>ID</td>
<td>Title</td>
<td>Description</td>
<td>image</td>
<td>Action</td>
</tr>
<?php foreach($query as $a):?>
<tr>
<td><?php echo $a->id;?></td>
<td><?php echo $a->title;?></td>
<td><?php echo $a->description;?></td>
<td><img src="<?php echo base_url();?>/uploads/<?php echo $a->image?>" height="100px" width="100px"></td>
<td><?php echo anchor('blog_controller/add_post/'.$a->id,"Edit");?></td>
<td><?php echo anchor('blog_controler/delete_post/'.$a->id,"Delete");?></td>
<?php endforeach;?>
</tr>
</table>
</body>
</html>
您需要驗證發送到控制器的表單數據,然后將這些值發送回視圖:這是一個示例:
function add_post()
{
if ($this->input->post())
{
$this->form_validation->set_rules('text', 'Text', 'trim|required|min_length[8]');
}
if ($this->form_validation->run() == FALSE)
{
// VALIDATION ERROR
}
else
{
// SUCCESS
// code to save title in db ...
// and redirect to success page
redirect('admin/posts');
]
$this->load->view('admin/add_post', $data);
}
因此,如果在文本字段中未發送任何內容且長度至少為8個字符,它將重新加載視圖。
如果可以,則執行此部分中的代碼(您將需要在其中保存到db函數,現在我還沒有在其中添加代碼)並重定向到admin / posts。
並以您的形式而不是:
<input type="text" name="text" value=""/>
您需要圓頂的東西,例如:
<input type="text" name="username" value="<?php echo set_value('text'); ?>"/>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.