2016-04-06 23 views
1

, veri değiştirilemez:neden verileri güncelleyemiyor? Ben bir güncelleme fonksiyonu var

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"; 
    } 
} 

benim başlatma:

$ db = new Veritabanı();

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']); 

    } 

Verileri neden güncelleyemiyorsunuz? ve sabit veri düzeltilmiş gibi görünüyor, doğru sorgu ile yine de, neden başarısız oldular?

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

belki ihtiyacımız var mı: ne yaptığınızı muhtemelen doğru olmakla birlikte

+1

'$ S'ye yankı ve sorguyu kontrol !! – Saty

+2

bir hata mı alıyorsunuz? Ayrıca hazırlamayı da kullanıyorsunuz ama daha sonra değişkeninizi doğrudan sorgunun içine sokuyorsunuz, bu şekilde sorgusuz sql enjeksiyona karşı hala savunmasız kalıyor! – Jester

cevap

0

, bu ne istediğini muhtemelen olmadığını düşünüyorum?

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

Bunun dışında değişken değerleriniz için yer tutucuları kullanmanız gerekir, çünkü artık bir sql enjeksiyon sorununuz var. Değerlerden biri ' bir alıntı içeriyorsa, sorguyla ilgili sorunlara da neden olabilirsiniz.

Sen gibi bir şey yapabileceğini:

$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

hata iletisi: 1054-Bilinmeyen '' where where '' sütununda '3rrdsafd'. neden? – rojib

İlgili konular