v2.5.2
Giriş yap

Php Kaç Tane Resim Ekle Butonu Olmalı mı?

yazilimyolcusu
431 defa görüntülendi ve 1 kişi tarafından değerlendirildi

Merhabalar. Bir sorum olacaktı. 1. resimdeki büyük resim, 2. resimde eklettiğim resim. Yalnız benim, alttaki 4 alan için de resim ekletmem lazım. 2. resimde görüldüğü gibi 4 adet daha "file" butonu ekleyecek yer yok. Tasarım için uygun değil. Resimleri çoklu eklesem o 4 resmi nasıl o yerlere koyabilirim bilemedim. Bir de zaten çoklu ekleme işlemini yaptım ama veritabanına eklettiremedim. Ne yapmalı bu durumda bir akıl verebilir misiniz?
https://www.hizliresim.com/bsva4kg
https://www.hizliresim.com/f3rhzx7

Cevap yaz
Cevaplar (11)
yazilimyolcusu
650 gün önce

Bu kodlarla ben iki ayrı id'de kayıt yapıyorum. Siz, tek satırda birden çok resim adı kaydedebileceğimi yazmıştınız. Nasıl yapabilirim bunu?

yazilimyolcusu
650 gün önce

Hataları şu şekilde hallettim.

$ad = $_POST['ad'];
  $ozellik = $_POST['ozellik'];
  $kategori = $_POST['kategori'];
  $eskifiyat = $_POST['eskifiyat'];
  $yenifiyat = $_POST['yenifiyat'];
  $indirimlifiyat = $_POST['indirimlifiyat'];
  $urunsayisi = $_POST['urunsayisi'];
  $urunalani = $_POST['urunalani'];


  foreach($ad as $index => $names) {
    $s_ad = $names;
    $s_ozellik = $ozellik[$index];
    $s_kategori = $kategori[$index];
    $s_eskifiyat = $eskifiyat[$index];
    $s_yenifiyat = $yenifiyat[$index];
    $s_indirimlifiyat = $indirimlifiyat[$index];
    $s_urunsayisi = $urunsayisi[$index];
    $s_urunalani = $urunalani[$index];

    $filename = "urunadlari.json";
    $arr = [".$s_ad.", ".$s_ozellik.", ".$s_kategori.", ".$s_eskifiyat.", ".$s_yenifiyat.", ".$s_indirimlifiyat.", ".$s_urunsayisi.", ".$s_urunalani."];
    $dizijson = json_encode($arr);
    file_put_contents($filename, $dizijson);
    $veriokujson = file_get_contents($filename);
    $yeniveri = json_decode($veriokujson);
    // foreach($yeniveri as $oku) {

      if(move_uploaded_file($gecici_yol, "../../images/indexurunler/" . $dosya_adi)) {
        
      $jsonveriekle = "INSERT INTO indexsayfaurun (urun_resim, urun_ad, urun_ozellik, urun_kategori, urun_eskifiyat, urun_yenifiyat, urun_indirimlifiyat, urun_sayisi, urun_alani) 
                        VALUES ('$dosya_adi', '$s_ad', '$s_ozellik', '$s_kategori', '$s_eskifiyat', '$s_yenifiyat', '$s_indirimlifiyat', '$s_urunsayisi', '$s_urunalani')";
      $jsonverieklesorgu = mysqli_query($db, $jsonveriekle);
    // }
      }
    }
    if ($jsonverieklesorgu) { ?>
      <div style="margin-top:25px; text-align:center; font-size:30px;">
        <?php
        echo "Ürün Kaydedildi";
        header("Refresh:3; url=urunekle.php");
        ?>
      </div>
    
    <?php }
yazilimyolcusu
650 gün önce

Dediğiniz gibi, verileri aşağıdaki gibi json dosyasına kaydettim ama verileri veritabanına yazdırırken 30 sıra şöyle bir hata verdi

Warning: Illegal string offset 'urun_ad' in sayfa 51
Warning: Illegal string offset 'urun_ad' in sayfa 52

gibi. Bir de veritabanına veritabanı alanı kadar da boş kayıt girdi. Kodlar

if(isset($_FILES['dosya'])) {

  $ad = $_POST['ad'];
  $ozellik = $_POST['ozellik'];
  $kategori = $_POST['kategori'];
  $eskifiyat = $_POST['eskifiyat'];
  $yenifiyat = $_POST['yenifiyat'];
  $indirimlifiyat = $_POST['indirimlifiyat'];
  $urunsayisi = $_POST['urunsayisi'];
  $urunalani = $_POST['urunalani'];


  foreach($ad as $index => $names) {
    $s_ad = $names;
    $s_ozellik = $ozellik[$index];
    $s_kategori = $kategori[$index];
    $s_eskifiyat = $eskifiyat[$index];
    $s_yenifiyat = $yenifiyat[$index];
    $s_indirimlifiyat = $indirimlifiyat[$index];
    $s_urunsayisi = $urunsayisi[$index];
    $s_urunalani = $urunalani[$index];

    $filename = "urunadlari.json";
    $arr = [".$s_ad.", ".$s_ozellik.", ".$s_kategori.", ".$s_eskifiyat.", ".$s_yenifiyat.", ".$s_indirimlifiyat.", ".$s_urunsayisi.", ".$s_urunalani."];
    $dizijson = json_encode($arr);
    file_put_contents($filename, $dizijson);
    $veriokujson = file_get_contents($filename);
    $yeniveri = json_decode($veriokujson);
    foreach($yeniveri as $oku) {
      $jsonveriekle = "INSERT INTO indexsayfaurun (urun_ad, urun_ozellik, urun_kategori, urun_eskifiyat, urun_yenifiyat, urun_indirimlifiyat, urun_sayisi, urun_alani) 
                        VALUES ('".$oku["urun_ad"]."', '".$oku["urun_ozellik"]."', '".$oku["urun_kategori"]."', '".$oku["urun_eskifiyat"]."', '".$oku["urun_yenifiyat"]."', '".$oku["urun_indirimlifiyat"]."', '".$oku["urun_sayisi"]."', '".$oku["urun_alani"]."')";
      $jsonverieklesorgu = mysqli_query($db, $jsonveriekle);
    }
    if($jsonverieklesorgu) {
      echo "tamam";
    } else {
      echo "olmadı";
    }
  }   
}
?>
yazilimyolcusu
671 gün önce

Değişkenlerin başına "$" işareti koymamışım. Onu da hallettim. Şöyle bir problem oluştu. "Uninitialized string offset: 1 in" diye bir hata alıyorum.

yazilimyolcusu
671 gün önce

Yapmak istediğim bu ama veritabanına değişken isimleri kaydediyor. Tek sıkıntı bu şu an.

if(isset($_POST['eklemeyap'])) {
  $ad = $_POST['ad'];
  $ozellik = $_POST['ozellik'];
  $kategori = $_POST['kategori'];
  $eskifiyat = $_POST['eskifiyat'];
  $yenifiyat = $_POST['yenifiyat'];
  $indirimlifiyat = $_POST['indirimlifiyat'];
  $urunsayisi = $_POST['urunsayisi'];
  $urunalani = $_POST['urunalani'];

  foreach($ad as $index => $names) {
    $s_name = $names;
    $s_ozellik = $ozellik[$index];
    $s_kategori = $kategori[$index];
    $s_eskifiyat = $eskifiyat[$index];
    $s_yenifiyat = $yenifiyat[$index];
    $s_indirimlifiyat = $indirimlifiyat[$index];
    $s_urunsayisi = $urunsayisi[$index];
    $s_urunalani = $urunalani[$index];
    $sorgualani = "INSERT INTO indexsayfaurun (urun_ad, urun_ozellik, urun_kategori, urun_eskifiyat, 
                                              urun_yenifiyat, urun_indirimlifiyat, urun_sayisi, 
                                              urun_alani) VALUES ('s_name', 's_ozellik', 's_kategori', 
                                              's_eskifiyat', 's_yenifiyat', 's_indirimlifiyat', 
                                              's_urunsayisi', 's_urunalani')";
    $sorgu = mysqli_query($db, $sorgualani);

    if($sorgu) {
      echo "tamam";
    } else {
      echo "olmadı";

    }
  }
}
yazilimyolcusu
671 gün önce

Allah'ın bir kulu da şunu bana mysqli_query tarzında yapsın ya!. Üç yıldır yapamadım arkadaş ya!

codepacks
671 gün önce

Bir ürün için birden çok ekran görüntüsü kaydetmek için
PDO'da nasıl kullanabileceğinize bilgiler.

Öncelikle HTML sayfanızda, dosya yükleme işlemini gerçekleştirmek için
işlemlerde Dropzone kitaplığını kullandım.
Dropzone kitaplığını kullanmak istemiyorsanız Alternatif Olarak Verot Sınıfınıda kullanabilirsin
ancak verot ile kullanırsanız işlemler farklılık gösterebilir.

Örnek

<form action="upload.php" class="dropzone"></form> 

Ayrıca, uygun CSS ve JavaScript dosyalarına bağlayarak yapabileceğiniz
Dropzone kitaplığını HTML sayfanıza eklemeniz gerekir.

upload.php dosyasında, karşıya yüklenen dosyaları işlemeniz ve bunları
PDO kullanarak veritabanına eklemeniz gerekir.

Örnek

<?php

// Veritabanı Bağlantısı Yapın

// Ürün bilgilerini ürünler tablosuna girin
$query = $pdo->prepare('INSERT INTO ürünler (baslik, aciklama) VALUES (:baslik, :aciklama)');
$query->bindParam(':baslik', $_POST['baslik']);
$query->bindParam(':aciklama', $_POST['aciklama']);
$query->execute();

// Ürün için son ekleme kimliğini alın
$urun_id = $pdo->lastInsertId();

// Yüklenen dosyalar arasında sıralı bir şekilde ilerleme
foreach ($_FILES['file']['baslik'] as $i => $baslik) {
    if (strlen($_FILES['file']['baslik'][$i]) > 1) {
        if (move_uploaded_file($_FILES['file']['tmp_baslik'][$i], 'upload/resimlerim/' . $baslik)) {
            // Dosya bilgilerini, ürün kimliğiyle birlikte ayrı ekran görüntüleri tablosuna ekleyin
            $query = $pdo->prepare('INSERT INTO resimler (urun_id, baslik, parent) VALUES (:urun_id, :baslik, :parent)');
            $query->bindParam(':urun_id', $urun_id);
            $query->bindParam(':baslik', $baslik);
            $query->bindParam(':parent', 'upload/resimlerim/' . $baslik);
            $query->execute();
        }
    }
}

?>  

Ekran görüntülerini web sayfanızda görüntülemek için,
bir SELECT ifadesi kullanarak bunları ayrı ekran görüntüleri tablosundan
almanız ve ardından sonuçları yinelemek ve ekran görüntülerinin çıktısını almak için
foreach döngüsünü kullanmanız gerekir.

Örnek


<?php

// Ürün kimliğini url'den alın
$urun_id = $_GET['urun_id'];

// Ürünün ekran görüntülerini ayrı ekran görüntüleri tablosundan alın
$query = $pdo->prepare('SELECT * FROM resimler WHERE urun_id = :urun_id');
$query->bindParam(':urun_id', $urun_id);
$query->execute();
$resimlerim = $query->fetchAll();

// Resimler Çıktısı
foreach ($resimlerim as $resim) {
    echo '<img src="' . $resim['parent'] . '" alt="' . $resim['baslik'] . '" />';
}
?>  

Ekran görüntülerini web sayfanızda sıralı görüntülemek için css uyarlayıp veya hazır templatelerden yararlanabilirsin.

yazilimyolcusu
672 gün önce

Merhabalar. Şöyle anlatayım. Bir formum var. Bu formda "ürün adı", "ürün özellikleri", "select-option alanı" vs. var. Ben çoklu resim eklemek istiyorum. Bunu da galiba şöyle yapmam lazım.
"resim1.jpg, şortlar, deniz kıyafetleri"
"resim2.jpg, şortlar, deniz kıyafetleri"
"resim3.jpg, şortlar, deniz kıyafetleri"
şeklinde yapmam lazım galiba. Burada değişen sadece resimler olacak. Veritabanına bu şekilde kaydedilecek. Ben başka bir şekilde nasıl olur bilemiyorum. Yazdıklarınızdan birincisini anladım ama ikincisinde "cascade" i anlayamadım. Sizce json formatında mı kaydetmeliyim. Daha önemlisi, formdan gelen çoklu resim ve o resme ait diğer input bilgilerini veritabanına kaydedemedim. Bir örnek varsa koyabilir misiniz?

abdullahx
675 gün önce

Veritabanında resim adlarını nasıl bir mantıkla tutuyorsun. img sütun adı ile içerisinde ornek.jpg tarzı bir sistemin mi var. Ve diğer resimleri aynı sütuna nasıl entegre edeceğini mi bilemiyorsun.

Diyelim ki öyle. İki türlü şey önerebilirim. Ya bu resimleri tuttuğun sütunu longtext yani json türünde yap ve resim adlarını json formatında burada tut. Sorguda decode yapıp geri kullanabilirsin. İlk sıradaki yani 0 indisli resim varsayılan resim olur, yanına istediğin kadar daha eklersin. Döngü yapıp ekranda geri gösterebilirsin.
Veya resimler diye bir tablo oluştur, bu tabloya bir tane ürün_id sütunu koy ve bu sütun ürünler tablosundaki id sütununa foreign key ile bağla. Hatta bu bağlama türünü CASCADE yaparsan ürün silindiğinde bu ürün ile ilgili resimler de otomatik silinir ama bu gerçek resimler sunucuda kalmaya devam eder, neyse bu sana kalmış. İşte ürün eklediğin zaman da bu yeni resim tablosuna resimleri yine döngü ile eklersin. Önce ürünü kaydedersin, sonra lastInsertId ile son eklenen ürünün id sini alıp resim tablosundaki ürün_id kısmı için kullanırsın

yazilimyolcusu
675 gün önce

Ben dosyaları çoklu yükleme konusunda sıkıntı yaşamıyorum. Veritabanına çoklu kayıt yapamadım ben.

mubado
675 gün önce

dropzone kullanarak coklu resim ekletebilirsin.dropzone da ajax ile veritabanina ekleyebilirsin. cektigin kisimda ise foreach ile ilk resmi alabilir doger kalblari ise altta listeletebilirsin