codeigniter Insert ข้อมูลในหน้าเดียวกันยังไงครับ
เอาหัว form มาดูด้วยครับ ประกาศไว้อย่างไร
และ code ตัวรับ ทำไว้อย่างไร
ข้อมูลน้อยเกินไปที่จะตอบครับ ถ้าจะตอบก็เป็นการเดาล้วนๆล่ะครับ
ว่าน่าจะเป็นอยา่งโน้นอย่างนี้อย่างนั้น
หรือจะเอาไปเป็นตัวอย่างก็ได้ครับ อันนี้ผมทำเอาไว้ เป็นส่วน รับ ajax
มา insert update ข้อมูล และส่งค่ากลับไป
ไม่รู้ว่าจะตรงตามต้องการไหม
Code (PHP)
<?php
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Ledger extends CI_Controller {
private $ss;
public function index(){
$this->load->library('session');
$this->ss=(array)$this->session->userdata('profile');
if(!isset($ss['id'])) exit('No found session id '); //exit('No direct script access allowed');
if(!isset($_REQUEST['run'])) exit('No found request run'); // exit('No direct script access allowed');
$rq=$_REQUEST;
switch($rq['run']){
case 'save_main': $this->save_main( $rq ); break;
case 'save_group': $this->save_group( $rq ); break;
case 'save_ledger': $this->save_ledger( $rq ); break;
case 'test': echo 'TEST';
}
}
private function save_main($rq){
if( $rq['m_id']!=='insert'){
$id=intval($rq['m_id']); $where = "m_id = $id";
$str = $this->db->update_string('acc_ledger_main', $rq['ro'], $where);
$this->db->query($str);
}else{
$ro=$rq['ro'];
if($ro['main_id']>''){
$ro['user_id']=$this->ss['id'];
$str = $this->db->insert_string('acc_ledger_main', $ro );
$this->db->query($str);
}else{
$str='INSERT INTO acc_ledger_main '.
'SELECT null, ?, max(main_id) + 1, ? , ? '.
'FROM acc_ledger_main where user_id='.$ss['id'];
$this->db->query($str, array($this->ss['id'], $ro['main_name'], $ro['main_is_cr']));
}
$id = $this->db->insert_id();
}
$rs=$this->db->query('select * from acc_ledger_main where m_id='.$id);
$row=$rs->result_array();
echo json_encode( array( 'type'=>'complete', 'id'=>$id, 'str'=>$str, 'ro'=>$row[0] ) );
}
private function save_group( $rq ){
if( $rq['id']!=='insert'){
$id=intval($rq['id']);
$where = "g_id = $id";
$str = $this->db->update_string('acc_ledger_grouup', $rq['ro'], $where);
$this->db->query($str);
}else{
$str = $this->db->insert_string('acc_ledger_grouup', $rq['ro'] );
$this->db->query($str); $id = $this->db->insert_id();
}
echo json_encode( array( 'type'=>'complete', 'id'=>$id, 'str'=>$str ) );
}
private function save_ledger( $rq ){
if( $rq['id']!=='insert'){
$id=intval($rq['id']);
$where = "id = $id";
$str = $this->db->update_string('acc_ledger', $rq['ro'], $where);
$this->db->query($str);
}else{
$str = $this->db->insert_string('acc_ledger', $rq['ro'] );
$this->db->query($str); $id = $this->db->insert_id();
}
echo json_encode( array( 'type'=>'complete', 'id'=>$id, 'str'=>$str ) );
}
}
?>
ประวัติการแก้ไข 2015-02-17 23:52:23
Date :
2015-02-17 23:46:42
By :
Chaidhanan
ประมาณนี้ครับ
Code
<?php
class Member extends CI_CONTROLLER
{
public function __construct()
{
parent::__construct();
$this->load->model("member_model","member");
$this->load->library("form_validation");
}
public function index()
{
//$this->rs = $this->member->getall();
$this->load->view("member/index");
}
public function create()
{
$config = array(
array(
"field"=>"name",
"label"=>"ชื่อ",
"rules"=>"required"
),
array(
"field"=>"surname",
"label"=>"นามสกุล",
"rules"=>"required"
),
array(
"field"=>"email",
"label"=>"อีเมล์",
"rules"=>"required|valid_email|callback_check_exists_email"
)
);
$this->form_validation->set_rules($config);
if($this->form_validation->run()==FALSE)
{
$this->load->view("member/create");
}else
{
}
}
public function check_exists_email($email){
$check = $this->member->findemail($email);
if($check)
{
return TRUE;
}else{
$this->form_validation->set_message("check_exists_email","%s มีข้อมูลอยู่แล้ว");
return FALSE;
}
}
public function check_exists_email_edit($email,$id){
$check = $this->member->findemail_edit($email,$id);
if($check)
{
return TRUE;
}else{
$this->form_validation->set_message("check_exists_email_edit","%s มีข้อมูลอยู่แล้ว");
return FALSE;
}
}
}
Code
<!doctype html>
<html lang="th">
<head>
<meta charset="utf-8"/>
<title>MEMBER</title>
</head>
<body>
<h1>MEMBER</h1>
<table>
<thead>
<tr>
<th>No</th>
<th>ชื่อ</th>
<th>นามสกุล </th>
<th>Email</th>
</tr>
</thead>
<tbody>
<?php if(count($rs)>0):
$no = 1;
?>
<?php foreach($rs as $r):?>
<tr>
<td><?php echo $no;?></td>
<td><?php echo $r->name;?></td>
<td><?php echo $r->surname;?></td>
<td><?php echo $r->email;?></td>
</tr>
<?php
$no++;
endforeach;?>
<?php endif;?>
</tbody>
</table>
<?php echo validation_errors(); ?>
<?php echo form_open("");?>
<table>
<tr>
<td>Name</td>
<td><input type='text' name='name' value="<?php echo set_value("name");?>"/></td>
</tr>
<tr>
<td>Surname</td>
<td><input type='text' name='surname' value="<?php echo set_value("surname");?>"/></td>
</tr>
<tr>
<td>Email</td>
<td><input type='text' name='email' value="<?php echo set_value("email");?>"/></td>
</tr>
<tr>
<td> </td>
<td><input type='submit' name='submit' value="Save"/></td>
</tr>
</table>
<?php echo form_close();?>
</body>
</html>
Date :
2015-02-18 09:04:21
By :
tatalas
กดปุ่ม save แล้วไม่ตอบสนองเลยครับ
แต่พอย้ายไปอยู่คนละ view ดันกดได้ปกติ
พอจะมีทำให้มันรวมอยู่ในหน้าเดียวกัน และทำงานได้ไหมครับ
Date :
2015-02-18 09:05:41
By :
tatalas
ตอบคุณ : tatalas เมื่อวันที่ 2015-02-18 09:05:41
รายละเอียดของการตอบ ::
case 1:
---------
0. สมมติว่าโค้ดทำงานที่ member/index
1. view ที่ให้มา เดาว่าเป็น view member/index
2. เปิด form โล่งๆ ใน CI => action=member/index, method= post
จะ submit จนเม้าส์พัง member/index ก็ไม่ทำงานอะไรนอกเหนือจากโหลด view เดิม มาแสดง
case 2:
----------
0. สมมติว่าโค้ดทำงานที่ member/create
1. สมมติว่า view ที่ให้มา คือ view member/create
2. ทำงานครั้งแรก validations error 100% โหลด view member/create
3. form เปิดโล่ง ==> submit ที่ member/create, method=post
4. ถ้า submit form เปล่า ๆ หรือ ถ้าเจตนาให้ validations ไม่ผ่าน ก็ย้อนกลับไปดูข้อ 2 อีกที
5. ถ้าผ่าน required, valid email, check email (custom) ==> โค้ดไม่แสดงผลอะไรเลย
กรณีทำงานที่ member/create โค้ดไม่ตอบสนอง
เพราะเมื่อโหลดมาครั้งแรก validations ตรวจสอบก่อนทันที(ทุกครั้ง) ทำให้เข้าเงื่อนไข ไปโหลด member/create view ขึ้นมาใหม่ตลอด
ถามว่า "พอจะมีทำให้มันรวมอยู่ในหน้าเดียวกัน และทำงานได้ไหมครับ"
ตอบว่า "ได้ครับ"
แต่เบื้องต้น ให้ลองไล่แก้ตามที่แนะนำไปก่อน
แก้เสร็จแล้ว เดี๋ยวจะมาพูดถึงลำดับการวางโค้ดอีกที (best practice)
Date :
2015-02-18 09:44:52
By :
triplea
Controller
Code (PHP)
<?php
class manage extends CI_Controller
{
public function __Construct()
{
parent::__Construct();
$this->load->model('user_model','user');
}
public function index()
{
$var['rs'] = $this->user->get_all();
$this->load->view('user/index',$var);
}
public function inser_user()
{
$ar = array(
'name' => $this->input->post('fname')
);
if($this->user->insert($ar))
{
redirect('manage/index');
}
}
}
?>
Model
Code (PHP)
<?php
class user_model extends CI_Model
{
public function get_all()
{
return $this->db->get('tb_user')->result();
}
public function insert($ar)
{
if(!empty($ar)){
return $this->db->insert('tb_user',$ar);
}
}
}
?>
View
Code (PHP)
<html>
<head>
<title>Hello</title>
<head/>
<body>
<table>
<thead>
<td>Name</td>
</thead>
<tbody>
<?php if(!empty($rs)):?>
<?php foreach($rs as $data):?>
<tr>
<td><?php echo $data->name;?></td>
</tr>
<?php endforeach;?>
<?php :else:?>
<td>--No Data--</td>
<?php endif;?>
</tbody>
</table>
<hr>
<?php echo form_open('manage/insert_user');?>
<input type="text" name="fname">
<input type="submit" value="save">
<?php echo form_close();?>
</body>
</html>
ประวัติการแก้ไข 2015-02-18 11:00:18
Date :
2015-02-18 10:52:39
By :
tam78910
Load balance : Server 05