Pdo ile Update İşlemini Yapamadım

Bu konuyu okuyanlar

mali2012

Asistan
Katılım
10 Eylül 2012
Mesajlar
157
Reaksiyon puanı
9
Puanları
18
Merhaba arkadaşlar. "cokluresimlistele.php" sayfasında resimleri listelettiriyorum. Listeleme için 1. resme bakabilirsiniz. Güncelleme yapmak için "duzenle.php" sayfasında da id'ye göre resmi açtırıyorum. Güncelleme için 2. resme bakabilirsiniz. Güncelle butonuna bastığımda sayfada hata veriyor. Kodların hepsini koymuyorum, kafa karışıklığı olmasın diye. Lazım olan yeri koyuyorum. "cokluresimlistele.php" sayfasında sayfalama yaptırdığım için "select" alanında "$goster" ve "$limit" kodları da var. Onlar önemli değil.
"cokluresimlistele.php"
PHP:
$resimcek     = $db->query("SELECT * FROM cokluresimlistele ORDER BY baslik DESC LIMIT $goster, $limit");
    $resimlerial  = $resimcek->fetchAll(PDO::FETCH_ASSOC);
<?php foreach ($resimlerial as $resim) { ?>

    <div class="cokluresimlistelealani">
  
    <div class="cokluresimlisteleresim"><img src="../../../upload/cokluresimlistele/<?php echo $resim["cokluresimlistele_resim"]; ?>">

    <div class="cokluresimlisteleresimyazisi">
   
    <a href="../../../resim-galerisi.php<?php echo substr($resim['baslik'],0,44); ?>"><?php echo substr($resim['baslik'],0,44); ?></a>  <!-- Veritabanından çekilen string in karakter sayısını belirliyor. -->
  
    <div class="silduzenlediv"><a href="duzenle.php?duzenle=<?php echo substr($resim['cokluresimlistele_id'],0,44); ?>"><div class="duzenle">Düzenle</div></a><a href=""><div class="sil">Sil</div></a></div>  
    </div>
Şimdi önemli olan kısım şurası: "duzenle" butonunda "duzenle.php?duzenle=" gibi bir link oluşturdum. "Düzenle" butonuna bastığımda, hangi resmin "düzenle" butonuna bastıysam o resim "id" sine göre açılıyor.
"duzenle.php"
PHP:
<?php if ($_GET) {
    $duzenle = $_GET["duzenle"];
    ?>
   
    <?php
    $resimcek     = $db->query("SELECT * FROM cokluresimlistele WHERE cokluresimlistele_id='$duzenle'");
    $resimlerial  = $resimcek->fetchAll(PDO::FETCH_ASSOC);
    ?>

    <?php foreach ($resimlerial as $resim) { ?>
   
    <div class="duzenle-php-resimlistelealani">
   
    <div class="duzenle-php-resimlisteleresim"><img src="../../../upload/cokluresimlistele/<?php echo $resim["cokluresimlistele_resim"]; ?>">
    <!-- <div class="resimyazisi"><?php echo $resim["cokluresimlistele_baslik"]; ?></div> -->
    <div class="duzenle-php-resimlisteleresimyazisi">
   
    <span class="baslikyazisi">Başlık : <input style="text-align:center;" type="text" value="<?php echo substr($resim['baslik'],0,44); ?>" name="<?php echo substr($resim['baslik'],0,44); ?>" /></span><br>
    <span class="idyazisi">Id :     <input style="text-align:center;" type="text" value="<?php echo substr($resim['cokluresimlistele_id'],0,44); ?>" name="<?php echo substr($resim['cokluresimlistele_id'],0,44); ?>" /></span>
    <div class="duzenlebutonu"><a href='guncelle.php?guncelle<?php echo $resim['cokluresimlistele_id'] ?>'>Güncelle</a></div>
    </div>
   
    </div>
   
    </div>
   
    <?php } } ?>
Güncelleyebilmek için ise guncelle.php sayfasına göndermem gerekiyor. Bunu da "id" ye göre gönderiyorum. Ama bir türlü kayıt yapamadım.
Bu kodlarla ben başlık kısmını güncellemek istiyorum ama "id" yi güncelliyor. "array" kısmına "başlık" kısmını nasıl yazabileceğimi bilemedim. Ne "post" ile ne de "get" ile alabildim o kısmı. O resmin "id" si ne ise o ismi alıyor "başlık" için. Sonuçta başlık yerine id kayıt oluyor. Yardım edebilirseniz sevinirim.
"guncelle.php"
PHP:
    <?php
    $aaa=$_GET['guncelle'];
    $query = $db->prepare("UPDATE cokluresimlistele SET baslik=? WHERE cokluresimlistele_id='$aaa'");
    $query->execute(array($aaa));
    if($query) {
        echo "tamam";
    } else {
        echo "olmadı";
    }
    ?>
Mesaj otomatik birleştirildi:

Arkadaşlar işin aslı şu: update alanını şu şekil yazığımda oluyor. Yani
PHP:
set baslik="Ankara"
ve "execute" alanını boş bıraktığımda "Ankara" diye yazıyor. Sadece "baslık" alanına nasıl bir değişken yazmam gerektiğini bilemedim. Yani "başlık" alanını değişken ile çekemedim.
PHP:
<?php
    $aaa=$_GET['guncelle'];
    $query = $db->prepare("UPDATE cokluresimlistele SET baslik='Ankara' WHERE cokluresimlistele_id='$aaa'");
    $query->execute();
    if($query) {
        echo "tamam";
    } else {
        echo "olmadı";
    }
    ?>
 

Ekli dosyalar

  • aa1.jpg
    aa1.jpg
    48.9 KB · Görüntüleme: 87
  • aa2.jpg
    aa2.jpg
    52.4 KB · Görüntüleme: 104
Son düzenleme:

ProgramBoy

Asistan
Katılım
2 Şubat 2021
Mesajlar
183
Reaksiyon puanı
119
Puanları
43
Yaş
48
PHP ile uzun süredir uğraşmadım fakat şu kodda

PHP:
$aaa=$_GET['guncelle'];
$query = $db->prepare("UPDATE cokluresimlistele SET baslik=? WHERE cokluresimlistele_id='$aaa'");
$query->execute(array($aaa));

orta satırda en sondaki $aaa nın yerine baslik=? deki gibi yer tutucu / placeholder değişkeni olan ? kullanman ve son satırda (array($aaa)) gibi içeriği belirsiz array yerine array işareti içinde (forumda array işareti yazınca tag olarak algılayıp cıkarmıyor) baslik ve cokluresimlistele_id değişkenlerine karşılık gelen değişkenleri örneğin $baslik, $id gibi, koyman gerekebilir...
 

mali2012

Asistan
Katılım
10 Eylül 2012
Mesajlar
157
Reaksiyon puanı
9
Puanları
18
Orta satırda $aaa nın yaptığı iş şu: "duzenle.php" sayfasından "get" metoduyla "guncelle" parametresini alıp; hangi id'li resmin adını değiştireceğimi belirliyor. Yani o değişken sayesinde hangi resme tıkladıysam o resmin başlığını değiştirebiliyorum. Asıl sorun şu: "duzenle.php" sayfasından get ile gönderdiğim sayfadaki "baslık" alanını, "guncelle.php" sayfasında nasıl alabilirim. "duzenle.php" sayfasında "baslık" alanının "name" kısmı eğer ki "baslık" olsaydı, alabilirdim o "name" alanını ama "duzenle.php" sayfasında da "name" alanının içine başlık çekiyorum. O yüzden "name" alanını nasıl alabileceğimi bilemedim. Yukarıda yazdığın kod doğru ama şöyle bir hata veriyor. Tabi ki kodlar şu şekilde iken.
PHP:
<?php
    $id=$_GET['guncelle'];
    $baslik=$_GET['baslik'];
    
    $query = $db->prepare("UPDATE cokluresimlistele SET baslik='$baslik' WHERE cokluresimlistele_id='$id'");
    $query->execute(array($baslik));
    if($query) {
        echo "tamam";
    } else {
        echo "olmadı";
    }
    ?>


Warning: Undefined array key "baslik" in C:\xampp\htdocs\site\admin\panel\production\guncelle.php on line 8

Fatal error
: Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in C:\xampp\htdocs\site\admin\panel\production\guncelle.php:11 Stack trace: #0 C:\xampp\htdocs\site\admin\panel\production\guncelle.php(11): PDOStatement->execute(Array) #1 {main} thrown in C:\xampp\htdocs\site\admin\panel\production\guncelle.php on line 11
 

ProgramBoy

Asistan
Katılım
2 Şubat 2021
Mesajlar
183
Reaksiyon puanı
119
Puanları
43
Yaş
48
yer tutucu değişken kısmında hata var gibi.
şimdi kendi deneme veritabanımda sql güncelleme / update denedim.
alttaki kod hatasız şekilde güncelleme yaptı

PHP:
<?php

$host="localhost";$vt="denemeveritabani";$vt_kullanici="root";$vt_sifre="";
$vt = new PDO("mysql:host=$host;dbname=$vt",$vt_kullanici,$vt_sifre);
$vt->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // hata msj görmek için

$ilce_id=50;
$yeni_ad="Tutak";
$guncelle = $vt->prepare("UPDATE ilce SET ilce_adi=? WHERE id=?") or die("Hata");
$guncelle->execute([$yeni_ad, $ilce_id]);
// Yaptığımız güncelleme gerçekleşmiş mi kontrol:

$sql_ilceler = "SELECT id, ilce_adi FROM ilce WHERE il_id=4"; // il_id 4: Aydın sehri
$sorgu_islet = $vt->query($sql_ilceler) or die("Hata ilçe sorgu");
$ilceler = $sorgu_islet->fetchALL(PDO::FETCH_ASSOC);

echo count($ilceler) . " adet ilçe\n";//Oylesine bir kontrol
foreach ($ilceler as $row) {  // ilçeleri bas
echo $row['id'] . " - " . $row['ilce_adi'] . "\n";}

$vt = null; //PDO'da baglanti kapatmak için (mysql_close($db) çalışmıyor)
?>
 

mali2012

Asistan
Katılım
10 Eylül 2012
Mesajlar
157
Reaksiyon puanı
9
Puanları
18
PHP:
$yeni_ad="Tutak";
Bu kısmı ben $_POST veya $_GET ile alamıyorum düzenle sayfasından. Bu verdiğiniz değeri ben veritabanından almam lazım. Siteyi yaptığımda kullanıcılar web editörünü açıp $yeniad="..." yazıp o veriyi elde etmeyecekler. O verinin yani başlık değerinin veritabanından çekilen veriden geliyor olması lazım. Veritabanından çektiğim veri foreach ile listelettiğim bir yer olunca veriyi nasıl alacağımı bilemedim. Daha iyi bir şekilde şöyle izah edeyim.,
"duzenle.php sayfasında veritabanından çektiğim veriyi listelettiriyorum. "guncelle.php" sayfasında ise "baslik" alanını buradan çektiğim veri ile değiştirmem lazım. Yani "duzenle.php" sayfasında veriyi şu şekilde çektirirken:
PHP:
 <?php foreach ($resimlerial as $resim) { ?>
    
    <div class="duzenle-php-resimlisteleresimyazisi">
  
    <span class="baslikyazisi">Başlık : <input style="text-align:center;" type="text" value="<?php echo substr($resim['baslik'],0,44); ?>" name="<?php echo substr($resim['baslik'],0,44); ?>" /></span><br>
dikkat ettiyseniz "name" alanı
PHP:
name="<?php echo substr($resim['baslik'],0,44); ?>"
bu şekilde. Bu name alanını "guncelle.php" sayfasından nasıl çekeceğim, benim sorum bu.
 

ProgramBoy

Asistan
Katılım
2 Şubat 2021
Mesajlar
183
Reaksiyon puanı
119
Puanları
43
Yaş
48
PHP ile uzun süredir uğraşmadığım için ince ayrıntıları yorumlayamam. Bahsettiğin kısım ince ayrıntı.
 
Üst