2016-04-06 66 views
1

我有一个更新功能,数据不能改变:为什么无法更新数据?

function editAnggota($data,$id){ 

     $i=0; 
     foreach ($data as $key => $value) { 
      if(!is_int($value)){ 
       $arrayValue[$i] = $key. " = '".$value."'"; 
      }else{ 
      $arrayValue[$i] = $key. " = ".$value; 
     } 
     $i++; 
    } 
    $nilai = implode(', ', $arrayValue); 


    $s = "UPDATE `anggota` SET $nilai 
      WHERE id = '$id'"; 

    $sql = $this->db->prepare($s) or die(' error : '.$this->db->error); 

    $sql->execute(); 
    if(!$sql){ 
     die('Koneksi error : '.$this->db->error); 
    } 
    if($sql){ 
     header("location: ?op=anggota"); 
    }else{ 
     echo "gagal"; 
    } 
} 

当我开始:

$ DB =新的数据库();

if(isset($_POST['edit'])){ 
    $id = $_POST['id']; 
    $nama = $_POST['nama']; 
    $jk = $_POST['jk']; 
    $tempat = $_POST['tempat']; 
    $tanggal = $_POST['tanggal']; 
    $formattgl = date('Y-m-d',strtotime('$tanggal')); 
    $pekerjaan = $_POST['pekerjaan']; 
    $alamat = $_POST['alamat']; 
    $fotonama = str_replace(' ', '-', $id.'.jpg'); 
    $filefoto = move_uploaded_file($_FILES['foto']['tmp_name'], '../asset/img/anggota/'.$fotonama); 

    $data = array(
     'id'=>$id, 
     'nama'=>$nama, 
     'jk'=>$jk, 
     'tempat'=>$tempat, 
     'tanggal'=> date('Y-m-d',strtotime('tanggal')), 
     'pekerjaan'=>$pekerjaan, 
     'alamat'=>$alamat, 
     'foto'=>$fotonama 
     ); 

    $db->editAnggota($data,$_GET['id']); 

    } 

为什么无法更新数据? 和固定数据 它看起来像我做对了,无论如何正确的查询,他们为什么失败?

+1

回声'$ s'并检查您的查询! – Saty

+2

您是否收到错误?你也使用准备,但是你仍然直接插入到查询中,这样你的查询仍然容易受到sql注入的影响! – Jester

回答

0

虽然你在做什么可能是正确的,我觉得这可能不是你想要什么:

$db->editAnggota($data,$_GET['id']); 

你也许需要这个?

$db->editAnggota($data,$_POST['id']); 

除此之外,你应该为你的变量值使用占位符,因为现在你有一个sql注入问题。如果其中一个值包含引号',那么您甚至可能自己导致查询出现问题。

你可以这样做:

$arrayValue = array(); 
$values = array(); 
foreach ($data as $key => $value) { 
    $arrayValue[] = "$key = :$key"; 
    $values[":" . $key] = $value; 
} 
$nilai = implode(', ', $arrayValue); 

$s = "UPDATE `anggota` SET $nilai 
     WHERE id = :idd"; 

$values[':idd'] = $data['id']; 

$sql = $this->db->prepare($s) or die(' error : '.$this->db->error); 

$sql->execute($values); 
+0

错误出现:1054-'where子句'中的未知列'3rrdsafd'。 为什么? – rojib

相关问题