Php Kaç Tane Resim Ekle Butonu Olmalı mı?
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
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (11)
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?
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 }
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ı";
}
}
}
?>
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.
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ı";
}
}
}
Allah'ın bir kulu da şunu bana mysqli_query tarzında yapsın ya!. Üç yıldır yapamadım arkadaş ya!
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.
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?
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
Ben dosyaları çoklu yükleme konusunda sıkıntı yaşamıyorum. Veritabanına çoklu kayıt yapamadım ben.