v2.5.2
Giriş yap

LastInsertID çalışmaması

ynscnr55
527 defa görüntülendi

Arkadaşlar Merhaba. Galeri sayfası için aynı form üzerinden çoklu resim yüklemeyi deniyorum. LastInsertId bi türlü çalıştıramadım. Yardımcı olubilir misiniz ?

                                           if(isset($_POST['galeriKaydet']))
{
    $ad=$_POST['galeri_ad'];
    $desc=$_POST['galeri_desc'];
    $keyword=$_POST['galeri_keyword'];
    $aciklama=$_POST['galeri_aciklama'];
    $durum=$_POST['galeri_durum'];
    $zaman=$_POST['galeri_zaman'];  
	$sira=$_POST['galeri_sira'];	
    $uploads_dir ='../../img';
    $tmp_name=$_FILES['galeri_resimyol']["tmp_name"];  
    $benzersizsayi1=rand(20000,32000);
    $benzersizsayi2=rand(20000,32000);
    $uzanti = '.webp';
    $benzersizad=$benzersizsayi1.$benzersizsayi2;
    $refingyol=substr($uploads_dir, 3)."/".$benzersizad.$uzanti;
    @$tip = pathinfo($_FILES['galeri_resimyol']["name"], PATHINFO_EXTENSION);
  if (($tip != "jpg") && ($tip != "png" ) && ($tip != "webp") && ($tip != "gif")) { 
     /*  echo '<div style="width:320px;" class="position-absolute top-0 end-0"><div class="alert alert-danger alert-dismissible fade show" role="alert">
       <strong>Başarısız.!</strong><br>JPG, PNG, GIF veya WEBP Formatında Resim Seçiniz.
        <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
      </div></div>'; */
  	 echo "<script>location.href='../galeri-ekle.php?durum=error'</script>";
   }else{   


    @move_uploaded_file($tmp_name, "$uploads_dir/$benzersizad$uzanti");
    $galeri_ekle=$db->prepare("insert into galeri (galeri_ad,galeri_desc,galeri_keyword,galeri_aciklama,galeri_durum,galeri_zaman,galeri_sira,galeri_resimyol) values(?,?,?,?,?,?,?,?)");
    $galeri_ekle->execute(array($ad,$desc,$keyword,$aciklama,$durum,$zaman,$sira,$refingyol));
	$pid = $db->LastInsertId();
    if (isset($_FILES['resim'])) {
    $yuklenemeyenler = array(); //yüklenemeyen ve hatası dönen resimleri bu dizide tutacağız.
    $uzanti = '.webp';
    $klasor = "../../img"; //yükleyeceğimiz klasörü belirledik.

    //Artık resimlerimiz dizi olarak geldiği için bir döngü ile tek tek kontrol ve kayıt etmemiz gerekiyor.
    $resim_sayisi = count($_FILES['resim']['name']); //kaç tane resim geldiğini öğrendik.
    for ($i = 0; $i < $resim_sayisi; $i++) {
        //resim sayısı kadar döngüye soktuk.

        $resimBoyutu = $_FILES['resim']['size'][$i]; //döngü içerisindeki resmin boyutunu öğrendik.
        if ($resimBoyutu > (1024 * 1024 * 12)) {
            //buradaki işlem aslında bayt, kilobayt ve mb formülüdür.
            //2 rakamını mb olarak görün ve kaç yaparsanız o mb anlamına gelir.
            //Örn: (1024* 1024* 3) => 3MB/ (1024* 1024* 4) => 4MB

            $yuklenemeyenler[] = $_FILES['resim']['name'][$i] . " - BOYUT";
        } else {
            $resimtip = $_FILES['resim']['type'][$i]; //resim resimtipini öğrendik.
            $resimAdi = $_FILES['resim']['name'][$i]; //resmin adını öğrendik.
            
            if ($resimtip == 'image/jpeg' || $resimtip == 'image/jpg' || $resimtip == 'image/png') { //uzantısnın kontrolünü sağladık. sadece .jpg ve .png yükleyebilmesi için.
            move_uploaded_file($_FILES['resim']['tmp_name'][$i],$klasor."/".$_FILES['resim']['name'][$i].$uzanti);
            $db->query("insert into resim values ('','$pid','".$klasor."/".$_FILES['resim']['name'][$i].$uzanti."')");
          


            } else {
                $yuklenemeyenler[] = $_FILES['resim']['name'][$i] . " UZANTI";
            }
        }
    }
    if (count($yuklenemeyenler) > 0) {
        echo "Aşağıdaki Resimler Yüklenemedi. <br />";
        var_dump($yuklenemeyenler);
    } else echo "TÜM RESİMLER BAŞARILI BİR ŞEKİLDE YÜKLENDİ.";
}
    if($galeri_ekle)
    {
     /*   echo '<div style="width:320px;" class="position-absolute top-0 end-0"><div class="alert alert-success alert-dismissible fade show" role="alert">
       <strong>Başarılı.!</strong><br>Galeri Başarıyla Eklendi.
        <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
      </div></div>'; */
           echo "<script>location.href='../galeri.php?durum=ok'</script>";
        //  header("Location:../production/iletisim_ayar.php?durum=ok");

    }
    else
    {
              /*  echo '<div style="width:320px;" class="position-absolute top-0 end-0"><div class="alert alert-danger alert-dismissible fade show" role="alert">
       <strong>Başarısız.!</strong><br>Ekleme İşlemi Yapılırken Hata Oluştu.
        <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
      </div></div>'; */
           echo "<script>location.href='../galeri-ekle.php?durum=no'</script>";
        //header("Location:../production/iletisim_ayar.php?durum=no");
    }
}

} 

Cevap yaz
Cevaplar (15)
gokcin
770 gün önce

Merhaba,
Resim yükleme işlemi yaparken, bence verotNet 'in resim yükleme sınıfını kullanmanı tavsiye ederim.

Aşağıki kod ile rahatlıkla işlem yapabilirsin.

require_once('class.upload.php');

$image = new Upload( $_FILES[ 'resim' ] );
if ( $image->uploaded ) {
	$image->file_name_body_pre  = date('YmdHis').'_';
	$image->file_new_name_body  = time().'_'.rand(100,99999999);
	$image->image_convert 		= 'jpg';
	$image->jpeg_quality		= 100;
	$image->allowed = array ( 'image/*' );
	$image->Process('../../img');
	if ( $image->processed ) {

		$temp 			= json_encode(array('status'=>'success','message'=>'Resim Yüklendi..'));

		$add = $db->insert('galeri')
		->set(array(
			'baslik' 		=> $_POST['baslik'],
			'aciklama' 		=> $_POST['aciklama '],
			'kategori' 		=> $_POST['kategori  '],
			'resim' 			=> $image->file_dst_name,
		));
		$galeri_son_id = $db->lastInsertId();

		if ($add) { 
			$add__ = $db->insert('resimler')
			->set([
				'galeri_id' => $galeri_son_id,
			]);

			if ($add__) {
				echo 'Resim Yüklendi';
			} else {
				echo 'Resim Kayıt Edilemedi';
			}
		} else { 
			echo 'SQL Sistemsel kaynaklı hata oluştu.';
		}
	} else {
		echo 'Resim yüklerken bir hata oluştur.. ('.$image->error.')';
	}

	$image-> Clean();
}else{
	echo 'Resim Seçiniz.';
}

VerotNet ile daha detaylı için linki incele

ynscnr55
770 gün önce

ilginiz alakanız için teşekkür ederim. Kod örneğini kaydettim bundan sonra bu şekilde çalışmalara başlayacağım. Bu arada sorun çözüldü herkese de çok teşekkür ederim. :)

h4ckdr0
770 gün önce
<?php

require_once 'db.php';          
if(isset($_POST['submit'])){

    $baslik = $_POST['baslik'];
    $aciklama = $_POST['aciklama'];
    $kategori = $_POST['kategori'];
    $resim = $_FILES['resim']['name'];
    $resim_tmp = $_FILES['resim']['tmp_name'];

    $sql = "INSERT INTO galeri (baslik,aciklama,kategori) VALUES ('$baslik','$aciklama','$kategori')";
    $query = $db->prepare($sql);
    $query->execute();

    $last_id = $db->lastInsertId();         // son eklenen verinin id'sini alıyoruz

    foreach($resim as $key => $value){
        $sql = "INSERT INTO resimler (resim,galeri_id) VALUES ('$value','$last_id')";
        $query = $db->prepare($sql);
        $query->execute();
    }

    if($query){
        echo "Kayıt başarılı";
    }else{
        echo "Kayıt başarısız";
    }

}
gokcin
771 gün önce

Diğer arkadaşımın sana verdiği tavsiye işlemine uyarsan, yazdığın koduda okuyabilir, nerelerde hata yapıyorsan onuda kolaylıkla bulabilirsin. Ayrıca vermiş olduğum kod doğru bir yapı. Kullandığın yapıdan kaynaklı hata alıyorsun.

ynscnr55
771 gün önce

@abdullahx nacizane tavsiyeniz için teşekkür ederim :) kod yapısını değiştirmeye çalışacağım.

abdullahx
772 gün önce

Size naçizane bir tavsiyem, daha temiz bir kod yazmaya çalışın. Her şey birbirine girmiş durumda bu kodlarda. Bunun farkına ileride varacaksınız, bu karmaşık görüntü sizi de rahatsız edecek, ve keşke php kodlamaya youtube'daki o video serisinden başlamasaydım diyeceksiniz. Zira o izlediğiniz seri tam bir php katili serisi. Farklı kurslardan daha güzel algoritmalar geliştirecek şekilde öğrenmenizi tavsiye ediyorum.
Başkasını bilmem ama ben yukarıda yazdığınız kodlara bakınca hiç oturup inceleyesim gelmiyor.

ynscnr55
772 gün önce

@gokcin onu da yaptım ama veritabanına kaydetmiyor ne yazıkki :( sadece insert into resim yaptım o halde bile kaydetmedi. Yeni veritabanı oluşturup denedim sonuç yine aynı. Aynı işlemi localhostta yapıyorum sorun yok ama. Karışık bi durum

gokcin
772 gün önce
$sonid = $db->lastInsertId();
ynscnr55
774 gün önce

Galeri ekleme sorun yok hocam. Çoklu fotoğrafları resim tablosuna kaydetmiyor. ama aynı işlemi dropzone ile yaptıgımda resim tablosuna kayıt oluyor.

abdullahx
774 gün önce

galeri tablosunda primary key olduğundan emin misiniz?

ynscnr55
774 gün önce

@ebykdrms hocam aynı

ebykdrms
774 gün önce

LastInsertId() yerine lastInsertId() yazmanız gerekiyor olabilir.

ynscnr55
775 gün önce

Hala çözemedim..

ynscnr55
775 gün önce

Projeme ekledim hocam.

qplot
776 gün önce

oncelıkle https://www.verot.net/php_class_upload.htm?lang=en-GB bunu kullan sonra onu yaparız