Dediğiniz şekilde yaptım ancak aşağıdaki hatayı veriyor.
TypeError: 'dictionary' is an invalid keyword argument for cursor()
@admin dediğiniz işlem nasıl yapılıyor?
Tekrar Merhaba.
Cevabından şunu anladım. Umarım doğru anlamışımdır.
Stok kodu farklıysa bu ürünler ayrı ayrı satırlara kaydedilsin ancak sipariş veren kişi aynı ve temel bilgileri aynı.
Eğer istediğin buysa aşağıdaki kodu hazırladım.
Not:
- Kodda eğer bir ürün seçilmişse bir ürün kaydediyor. Daha fazla seçiliyse seçli olanlar kaydediliyor.
- Şehir isimleri Sayı olarak kaydediliyor kendine göre düzenlersin.
- Soruna gelecek olursak bence urunler, uyeler ve uye_siparisleri diye bir tablo olmalı. uye_siparisler tablosunda üye_id'si ve üye'nin sipariş ettiği ürün_id'si tutulmalı. Mysql sorgusunda Inner Joın kullanarak üyenin sipariş ettiği ürünlere daha kolay ulaşabilirsin diye düşünüyorum. Bu konuda tecrübeli arkadaşlar daha fazla yardımcı olabilir.
kablosuzkedi'nin Youtube kanalında "Alışveriş Sepeti" ile ilgili bir eğitim serisi var. Bakmak isterseniz:
kablosuzkedi - PHP ile Alışveriş Sepeti Yapımı
index.php
// Bağlantı dosyanızı include etmeyi unutmayın.
<form action="tamamlanansiparisler.php" method="POST">
<div class="row d-flex justify-content-center pt-5 mb-5">
<?php
$sepeturunlerigoster = $db->query("SELECT * FROM sepeteeklenenurunler");
while ($urunekle = $sepeturunlerigoster->fetch()) {
?>
<div class="col-lg-3">
<div class="card box-shadow mb-4">
<img class="card-img-top img-thumbnail border-white" src="assets/images/resim.jpg">
<div class="card-body">
<h5 class="card-title display-4" style="font-size: 24px">
<b><?php echo $urunekle["urun_adi"]; ?></b>
</h5>
<p class="card-text border-bottom text-muted pb-3">
Stok Sayısı : <?php echo $urunekle["urun_stoksayisi"]; ?>
</p>
<div class="d-flex justify-content-between align-items-center">
<small class="text-muted">
Stok Kodu : <?php echo $urunekle["urun_stokkodu"]; ?>
</small>
<div class="form-group form-check">
<input type="checkbox" class="form-check-input" name="urununstokkodu[]" value="<?php echo $urunekle['urun_stokkodu']."|".$urunekle["urun_stoksayisi"]; ?>" checked>
</div>
</div>
</div>
</div>
</div>
<?php } ?>
<div class="col">
<div class="card box-shadow mb-4">
<div class="card-body">
<div class="form-group">
<label>Alıcı Adı Soyadı</label>
<input type="text" class="form-control" name="aliciadisoyadi">
</div>
<div class="form-group">
<label>E-posta Adresiniz</label>
<input type="text" class="form-control" name="alicieposta">
</div>
<div class="form-group">
<label>Firma Adı</label>
<input type="text" class="form-control" name="alicifirma">
</div>
<div class="form-group">
<label>Şehir</label>
<select class="form-control" name="sehir">
<option value="0">- Şehir Seçiniz -</option>
<option value="1">Adana</option>
<option value="2">Adıyaman</option>
<option value="3">Afyonkarahisar</option>
<option value="4">Ağrı</option>
<option value="5">Amasya</option>
</select>
</div>
<div class="form-group">
<label>İlçe / Semt</label>
<input type="text" class="form-control" name="aliciilce">
</div>
<div class="form-group">
<label>Sipariş Notunuz</label>
<textarea class="form-control" rows="3" name="siparisnotlari"></textarea>
</div>
<button type="submit" class="btn btn-info w-100 mt-1">Siparişi Tamamla</button>
</div>
</div>
</div>
</div>
</form>
tamamlanansiparisler.php
<?php
// Bağlantı dosyanızı include etmeyi unutmayın.
if ($_POST){
foreach($_POST["urununstokkodu"] as $stokkodu):
// urununstokkodu inputuyla hem stok kodunu hem de stok sayısını alıyorum. | işaretiyle form kısmında birleştirdim .
//Burada | işaretiyle parçalıyorum.
$parcala = explode("|", $stokkodu);
$stokKodu = $parcala[0];
$stokSayisi = $parcala[1];
$siparisitamamla = $db->prepare("INSERT INTO sepetonaylanan SET
sepetonaylanan_adisoyadi = :adisoyadi,
sepetonaylanan_firmaadi = :firmaadi,
sepetonaylanan_eposta = :eposta,
sepetonaylanan_sehiradi = :sehiradi,
sepetonaylanan_ilcesemt = :ilcesemt,
sepetonaylanan_urun_stokkodu = :stokkodu,
sepetonaylanan_urun_stoksayisi = :stoksayisi,
sepetonaylanan_siparisnotlari = :siparisnotlari
");
$siparisitamamla->execute([
":adisoyadi" => $_POST['aliciadisoyadi'],
":firmaadi" => $_POST['alicifirma'],
":eposta" => $_POST['alicieposta'],
":sehiradi" => $_POST['sehir'],
":ilcesemt" => $_POST['aliciilce'],
":stokkodu" => $stokKodu,
":stoksayisi" => $stokSayisi,
":siparisnotlari" => $_POST['siparisnotlari']
]);
endforeach;
if($siparisitamamla){
echo "İşlem Başarılı";
}else{
echo "İşlem Başarısız";
}
}
Merhaba.
Aşağıdaki kod bende istediğiniz gibi çalışıyor.
Not: Aşağıdaki tablo sütun isimlerini burada taşma yaptığından dolayı kısa yazdım.
tablo
id (int) | adisoyadi (varchar) | eposta (varchar) | firmaadi (varchar) | sehiradi (varchar) | ilcesemt (varchar) | stokkodu (varchar) | urun_stoksayisi (varchar) | siparisnotlari (varchar) |
---|---|---|---|---|---|---|---|---|
1 | Ahmet | [email protected] | A Firması A.Ş | İstanbul | Fatih | 5 | 20 | Ürün Açıklamasıdır |
2 | Ahmet | [email protected] | A Firması A.Ş | İstanbul | Fatih | 9 | 30 | Ürün Açıklamasıdır |
index.php
<form action="sipariskaydet.php" method="POST">
<input type="text" name="aliciadisoyadi[]" placeholder="Alıcı Adı Soyadı">
<input type="text" name="alicifirma[]" placeholder="Alıcı Firma">
<input type="text" name="alicieposta[]" placeholder="Alıcı Eposta">
<input type="text" name="sehir[]" placeholder="Şehir">
<input type="text" name="aliciilce[]" placeholder="Alıcı İlçe">
<input type="text" name="urununstokkodu[]" placeholder="Ürün Stok Kodu">
<input type="text" name="urununstoksayisi[]" placeholder="Ürün Stok Sayısı">
<input type="text" name="siparisnotlari[]" placeholder="Sipariş Notları"><br><br>
<input type="text" name="aliciadisoyadi[]" placeholder="Alıcı Adı Soyadı">
<input type="text" name="alicifirma[]" placeholder="Alıcı Firma">
<input type="text" name="alicieposta[]" placeholder="Alıcı Eposta">
<input type="text" name="sehir[]" placeholder="Şehir">
<input type="text" name="aliciilce[]" placeholder="Alıcı İlçe">
<input type="text" name="urununstokkodu[]" placeholder="Ürün Stok Kodu">
<input type="text" name="urununstoksayisi[]" placeholder="Ürün Stok Sayısı">
<input type="text" name="siparisnotlari[]" placeholder="Sipariş Notları">
<input type="submit" value="kaydet">
</form>
sipariskaydet.php
if ($_POST){
$sorgulistele = $db->query("SELECT * FROM sepeteeklenenurunler");
if($sorgulistele){
$say = $sorgulistele->rowCount();
if($say > 0) {
$sayi = 0;
while($sayi < $say) {
$siparisitamamla = $db->prepare('INSERT INTO sepetonaylanan SET
sepetonaylanan_adisoyadi = :adisoyadi,
sepetonaylanan_firmaadi = :firmaadi,
sepetonaylanan_eposta = :eposta,
sepetonaylanan_sehiradi = :sehiradi,
sepetonaylanan_ilcesemt = :ilcesemt,
sepetonaylanan_urun_stokkodu = :stokkodu,
sepetonaylanan_urun_stoksayisi = :stoksayisi,
sepetonaylanan_siparisnotlari = :siparisnotlari'
);
$siparisitamamla->execute([
":adisoyadi" => $_POST['aliciadisoyadi'][$sayi],
":firmaadi" => $_POST['alicifirma'][$sayi],
":eposta" => $_POST['alicieposta'][$sayi],
":sehiradi" => $_POST['sehir'][$sayi],
":ilcesemt" => $_POST['aliciilce'][$sayi],
":stokkodu" => $_POST['urununstokkodu'][$sayi],
":stoksayisi" => $_POST['urununstoksayisi'][$sayi],
":siparisnotlari" => $_POST['siparisnotlari'][$sayi]
]);
$sayi++;
}
if($siparisitamamla){
echo "İşlem Başarılı";
}else{
echo "İşlem Başarısız";
}
}
}
}
Php ile çalışıyorsanız sitenize css'i dahil ettiğiniz kodu aşağıdaki gibi yapabilirsiniz.
<link rel="stylesheet" type="text/css" href="css/style.css?v=<?php echo time(); ?>">
Merhaba.
Şu şekilde deneyin.
Eksik olanları kendiniz ekleyin.
<?php
if (isset($_POST)){
$sorgulistele = $db->query("SELECT * FROM sepeteeklenenurunler");
if($sorgulistele){
$say = $sorgulistele->rowCount();
if($say > 0) {
$sayi = 0;
while($sayi < $say) {
$siparisitamamla = $db->prepare('INSERT INTO sepetonaylanan SET
sepetonaylanan_adisoyadi = :adisoyadi,
sepetonaylanan_firmaadi = :firmaadi,
sepetonaylanan_sehiradi = :sehiradi,
sepetonaylanan_ilcesemt = :ilcesemt'
);
$siparisitamamla->execute([
":adisoyadi" => $_POST['aliciadisoyadi'][$sayi],
":firmaadi" => $_POST['alicifirma'][$sayi],
":sehiradi" => $_POST['sehir'][$sayi],
":ilcesemt" => $_POST['aliciilce'][$sayi]
]);
$sayi++;
}
if($siparisitamamla){
echo "İşlem Başarılı";
}else{
echo "İşlem Başarısız";
}
}
}
}
?>
Bunu index.php dosyasının başına yazıp deneyin.
<?php
session_start();
// Oturum açılmışsa panel.php'ye yönlendir.
if(isset($_SESSION['user_name'])){
header("Location: panel.php");
}else{
// Oturum açılmadıysa login.php'ye yönlendir.
header("Location: login.php");
}
?>
Merhaba.
index.php sayfasının başına şu kodu ekleyip deneyin.
<?php if(isset($_SESSION['user_name'])){ header("Location: panel.php"); } ?>
Öneri
Soru sorma editöründe küçük bir menü bar olabilir. Menüde Kod, Resim, Tablo oluştur vb. gibi seçenekler olsun.
Bu seçeneklere tıkladığımız zaman Markdown yapısında seçilen menüye göre o yapı editör içerisine yazılsın.