剛進入這行,接收別人寫的CI PHP程式,要寫一個修改資料的程式,程式如以下,但式不能修改資料??
已上網google還是無解,想請高手幫忙看一下,問題在哪?謝謝
model Firmregisterdb.php
public function editFirmregister($name,$phone,$email) {
$data = array(
//'userName'=>$name,
'name'=>$name,
'phone'=>$phone,
'email'=>$email
);
$this->db->where("id",$id);
$this->db->update("firmregister",$data);
$status = FALSE;
$query = $this->db->affected_rows();
if($query>0){
$status = TRUE;
}
return $status;
}
public function getSingleFirmregister($id){
$query = $this->db->get_where("firmregister",array("id"=>$id));
return $query->row_array();
}
controllers Firmregister.php
public function single($id){ //顯示個別詳細資料
if(isset($_POST['name']))
{
$name=$_POST['name'];
$phone=$_POST['phone'];
$email= $_POST['email'];
$result = $this->firmregisterdb->editFirmregister($name,$phone,$email);
if($result){
redirect('/firmregister/','resfresh');
}else{
$data['message']='資料沒有變';
}
}
$data['part1']=$this->firmregisterdb->getSingleFirmregister($id);
$this->load->view("header");
$this->load->view("sidebar");
$this->load->view("firmregistersingle",$data);
$this->load->view("footer");
}
<pre class="c" name="code">
$data = array(
//'userName'=>$name,
'name'=>$name,
'phone'=>$phone,
'email'=>$email
);
$this->db->where("id",$id);
所以說………
$id呢???
id 在資料庫裡式設AUTO_INCREMENT, 這樣也要把id寫進去嗎??
剛剛有試過把id加上去一樣沒辦法做修改資料的動作
看了回應, 我誠心建議把網站外包出去處理比較快
$status = FALSE;
$query = $this->db->affected_rows();
if($query>0){
$status = TRUE;
}
這一段說真的我也看得有點………以前寫的人為啥不這樣就好了?
<pre class="c" name="code">
$query = $this->db->affected_rows();
return $query > 0;
sun3038yes提到:
id 在資料庫裡式設AUTO_INCREMENT, 這樣也要把id寫進去嗎??
sun3038yes提到:
$this->db->where("id",$id);
...不然這個$id變數哪裡來?
得不到$id變數值,你的SQL查詢肯定永遠都得不到資料
查詢都查不到資料,如何要求update可以更新得到資料?
後來有把id加進去了 ,但是還是不能更新得到資料,不曉得問題在哪
weiclin 說:
看了回應, 我誠心建議把網站外包出去處理比較快
真的很誠心,我也覺得這樣做最好。
看了題目中的
已上網google還是無解
就很好奇,就算有人回了,就會有救嗎?果然是
你可以把你修改後的程式碼再貼上來, 不然這樣猜很辛苦
另外, 看看你用的 CI 是那一版, 2.x 還是 3.x ?
更改後
model Firmregisterdb.php
<pre class="c" name="code">
//修改資料
public function editFirmregister($id,$name,$phone,$email) {
$data = array(
//'userName'=>$name,
'id'=>$id,
'name'=>$name,
'phone'=>$phone,
'email'=>$email
);
//$this->db->trans_start();
$this->db->where("id",$id);
$this->db->update("firmregister",$data);
$query = $this->db->affected_rows();
$status = FALSE;
if($query>0){
$status = TRUE;
}
return $status;
}
public function getSingleFirmregister($id){
$query = $this->db->get_where("firmregister",array("id"=>$id));
return $query->row_array();
}
你的 $id 是用來決定要更新哪一筆資料, 所以不要加到 $data 陣列裡面去
另外, 你可以在 db->update 後使用 $str = $this->db->last_query(); 來取得 sql 語法
你拿去 mysql 執行看看大概就知道原因了吧
controllers Firmregister.php
<pre class="c" name="code">
public function single($id){ //顯示個別詳細資料
if(isset($_POST['name']))
{
$id=$_POST['id'];
$name=$_POST['name'];
$phone=$_POST['phone'];
$email= $_POST['email'];
$result = $this->firmregisterdb->editFirmregister($id,$name,$phone,$email);
if($result){
redirect('/firmregister/','resfresh');
}else{
$data['message']='資料沒有變';
}
}
$data['part1']=$this->firmregisterdb->getSingleFirmregister($id);
$this->load->view("header");
$this->load->view("sidebar");
$this->load->view("firmregistersingle",$data);
$this->load->view("footer");
}
接續以上 controllers程式
public function editFirmregister($id){
if(isset($_POST['name'])){
$id=$_POST['id'];
$name=$_POST['name'];
$phone=$_POST['phone'];
$email= $_POST['email'];
$result = $this->firmregisterdb->editFirmregister($id,$name,$phone,$email);
if($result){
redirect('/firmregister/','resfresh');
}else{
$data['message']='資料沒有變';
}
}
版本不確定是用哪一版的
我根本上覺得……原本寫的人的問題也很……大。
有$this->input->post()不用要用$_POST是不怕被注射嗎?
而且$post = $this->input->post();
這樣就可以接回全部的$_POST資料而且還是過濾好的。
不過我想或許另一個原因就是你跟ci實在不熟吧!
已找出問題在哪了,謝謝大家
還是新手,第一次使用到ci 還不是熟悉