iT邦幫忙

0

PHP CI無法修改資料??

剛進入這行,接收別人寫的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");
	}

1 個回答

0
Samと可樂快跑
iT邦好手 1 級 ‧ 2015-10-12 16:16:43
最佳解答
<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加上去一樣沒辦法做修改資料的動作

weiclin iT邦高手 4 級 ‧ 2015-10-12 18:14:03 檢舉

看了回應, 我誠心建議把網站外包出去處理比較快

$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;
外獅佬 iT邦大師 1 級 ‧ 2015-10-12 23:41:57 檢舉

sun3038yes提到:
id 在資料庫裡式設AUTO_INCREMENT, 這樣也要把id寫進去嗎??

sun3038yes提到:
$this->db->where("id",$id);

落寞...不然這個$id變數哪裡來?
得不到$id變數值,你的SQL查詢肯定永遠都得不到資料

外獅佬 iT邦大師 1 級 ‧ 2015-10-12 23:42:58 檢舉

查詢都查不到資料,如何要求update可以更新得到資料?落寞落寞

後來有把id加進去了 ,但是還是不能更新得到資料,不曉得問題在哪暈

weiclin 說:
看了回應, 我誠心建議把網站外包出去處理比較快

真的很誠心,我也覺得這樣做最好。

看了題目中的

已上網google還是無解

就很好奇,就算有人回了,就會有救嗎?果然是搖頭

weiclin iT邦高手 4 級 ‧ 2015-10-13 10:31:12 檢舉

你可以把你修改後的程式碼再貼上來, 不然這樣猜很辛苦
另外, 看看你用的 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();
	    }
weiclin iT邦高手 4 級 ‧ 2015-10-13 13:27:29 檢舉

你的 $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']='資料沒有變';
}
}

版本不確定是用哪一版的Orz

我根本上覺得……原本寫的人的問題也很……大。
有$this->input->post()不用要用$_POST是不怕被注射嗎?
而且$post = $this->input->post();
這樣就可以接回全部的$_POST資料而且還是過濾好的。
不過我想或許另一個原因就是你跟ci實在不熟吧!

已找出問題在哪了,謝謝大家
還是新手,第一次使用到ci 還不是熟悉 哭

我要發表回答

立即登入回答