İç içe for / foreach kullanarak mysql´e çoklu kayıt nasıl yapılır?.

FatihÖzenFatih ÖzenAvatar

Arkadaşlar merhaba. Sorunumu kısaca anlatmaya çalışayım.

3 Sayfamız var;

1 ve 2. sayfada müşteriler ve ürünler checkbox ile seçiliyor.

1- Müşteri listesi (musteri_id)

2- Ürün listesi (urun_id, urun_fiyat, urun_kdv) ürün fiyatı ve kdv oranını biz belirliyoruz.

3- ilk 2 sayfadan gelen verileri mysql´e kayıt eden sayfa

Mesela  ilk sayfadan 1 müşteri, ikinci sayfadan 1 ürün seçip ürün fiyatı ve kdv oranını kendimiz belirliyoruz. 3. sayfada seçilen her müşteri için db´e ürün bilgileriyle kayıt edilecek.

Şimdi sorun seçilen müşteri ve ürünlerin sayısı artınca oluyor.

Müşteri 1´in id´i > 1

Müşteri 2´in id´i > 2

ürün 1´in id´i > 1

ürün 1´in fiyatı > 10 TL

ürün 1´in kdvsi > 8

ürün 2´in id´i > 56

ürün 2´in fiyatı > 15 TL

ürün 2´in kdvsi > 18

ürün 3´ün id´i > 16

ürün 3´ün fiyatı > 190 TL

ürün 3´ün kdvsi > 8

Şimdi 2 müşteri için 3 ürün ve bilgisi mevcut. Her ürün için müşteri id´ini de tutacak şekilde nasıl kayıt yapabilirim. Müşteri ve ürün sayısı değişebilir. 3 gündür deli oldum. Bu sorunu çözebilecek arkadaşa şimdiden teşekkür ederim :D

"Bulunduğu toplum için fikir üretip de söylemeyen ya tembel ya bencil yada korkaktır." www.fatihozen.com
2010-02-10 18:43:32

ürün

Fatih naptın ya. o nasıl uzun bir kodlamadır smiley

üç tabloda çözülür:

1- Ürün tablosu. ID, fiyat , kdv

2- Müşteriler: ID , isim vs.

3- Alışveriş sepeti , ID , ürün_ID, müşter_iID, fiyat, zaman vs.

Esas işlem alışveriş sepeti tablosunda dönecek. kafanda kurduğun yapıyı bilemediğim için böyle bir sistem düşündüm.

Her programcı birgün Php yi tadacaktır
2010-02-10 19:00:05

Tablo

FatihÖzenFatih ÖzenAvatar

:D hocam yazdığım sistemin bu bölümü beni öyle bunaltı ki içimi olduğu gibi döktüm buraya :))) biraz karışık oldu sanırım. :)))

Şuan bu bölüm için yaptığım müşteri sayfasından müşteri id´lerini alıp ürün sayfasına taşımak, burdan da müşteri id´leriyle beraber ürün´ü(id,fiyat vs.) seçip kayıt bölümüne taşımak oldu. Buraya kadar sorun yok. Şimdilik elimde çalışan bir sistem olsun tek 3-5 sayfa olsun valla mesele değil :))

Tek sorun kayıt etmek. Sanırım burda matris konusuna baya bir hakimiyet gerekiyor. Aslında implode ile tek satırda kayıt edilip daha sonra explode vs. ile işlenebilir. Ama şimdilik bunu elimden geldiğince basit geçmem gerek.

Sayfalardan gelen veriler şöyle olsun.

musteriler.php
    Müşteri 1 id´i > 1
    Müşteri 2´id´i > 2

urunler.php
    ürün 1 id´i > 8  fiyatı > 10 TL  kdvsi > 8
    ürün 2 id´i > 13  fiyatı > 34 TL  kdvsi > 18
    ürün 3 id´i > 3  fiyatı > 14 TL  kdvsi > 18

Kafamda ki verilerin sql´de görünmesi gereken şekli şu.(tabi ki sql tablosunda kayit_id otomatik artacak)

Mysql tablomuz şöyle olsun

kayit_id (her kayıt için otomatik artacak)
musteri_id
urun_id
urun_fiyat
urun_kdv


kayit_id(1) musteri_id (1)  urun_id (8)  urun_fiyat (10 TL)  urun_kdv (8)
kayit_id(2) musteri_id (1)  urun_id (13)  urun_fiyat (34 TL)  urun_kdv (18)
kayit_id(3) musteri_id (1)  urun_id (3)  urun_fiyat (114 TL)  urun_kdv (18)

kayit_id(4) musteri_id (2)  urun_id (8)  urun_fiyat (10 TL)  urun_kdv (8)
kayit_id(5) musteri_id (2)  urun_id (13)  urun_fiyat (34 TL)  urun_kdv (18)
kayit_id(6) musteri_id (2)  urun_id (3)  urun_fiyat (114 TL)  urun_kdv (18)

Kayıt işini mecbur for veya foreach´le yapacaz. Benim burda yapamadığım iç içe for döngüsünü kurup insert edememek.İnşallah karışık olmamıştır hocam :D

"Bulunduğu toplum için fikir üretip de söylemeyen ya tembel ya bencil yada korkaktır." www.fatihozen.com
2010-02-11 01:29:17 Edit:2010-02-11 01:50:51

tablo

ben yine anlamadım. yukarda verdiğim gibi üç tablo yaptın mı ?

yoksa iki tabloda iş ibitirmeye mi uğraşıyorsun.

Her programcı birgün Php yi tadacaktır
2010-02-11 07:23:47

FatihÖzenFatih ÖzenAvatar

Yok hocam ben anlatamadım :)

Sql tablomuz tek. Manuel ekleme yaptım. Kayıttan sonra şöyle görünmeli. sql tablo kayıt sonrası

Mesela burdan veriyi musteri_id´e göre çekip sadece o id´e sahip müşteriye gösterecem. Kaydı resimdeki gibi yapabilirsem veriyi kolay çekerim orda sorun yok. Tek sorun kayıt.

"Bulunduğu toplum için fikir üretip de söylemeyen ya tembel ya bencil yada korkaktır." www.fatihozen.com
2010-02-11 15:08:54

kayıt

Tek tabloyla yapman imkansız. ürünleri nerde tutacaksın. seninki pratik olmaz. en azından sitede ürünleri listelerken zorlanırsın.

en kolay iki tablo: müşteri ürün satın aldığı sırada bir düğmeye tıklar. tıklanan ürünün özellikleri ürün tablosundan alınıp sepet tablosuna kaydedilir.senin yukarıda veridğin de sepet tablosu olur.

sanırım senin müşteriler aynı anda birkaç ürünü birden ekliyor öyle mi ?

Her programcı birgün Php yi tadacaktır
2010-02-11 15:23:50

FatihÖzenFatih ÖzenAvatar

Evet hocam aynı anda birkaç ürün ekleyecek.

"Bulunduğu toplum için fikir üretip de söylemeyen ya tembel ya bencil yada korkaktır." www.fatihozen.com
2010-02-11 15:31:13

dizi

FatihÖzenFatih ÖzenAvatar

<?php

$musteri_id = array(1,2);
$urun_id = array(44,77,99);
$fiyat = array(1200,800,55);
$kdv = array(8,18,8);

?>


Hocam burdaki dizilerin çıktısını şöyle alabilirsem kayıt imkanı olur sanırım.

Çıktı;

1 44 1200 8
1 77 800  18
1 99 55    8
2 44 1200 8
2 77 800  18
2 99 55    8

Mesela ilk 2 diziyi şöyle yazdırdım.

<?php

$musteri_id = array(1,2);
$urun_id = array(44,77,99);
$fiyat = array(1200,800,55);
$kdv = array(8,18,8);

foreach($musteri_id as $yaz1){
  foreach($urun_id as $yaz2){

  echo $yaz1." ".$yaz2."<br>";

  }
}

?>


Çıktı;

1 44
1 77
1 99
2 44
2 77
2 99

"Bulunduğu toplum için fikir üretip de söylemeyen ya tembel ya bencil yada korkaktır." www.fatihozen.com
2010-02-11 15:39:54 Edit:2010-02-11 16:55:11

sql

dizilerle o şekilde halledersin ama veritabanı olmadan yüzlerce ürünü kontrol edemezsin. iç içe SQL döngüsü kurarak halledilir. şimdi oradaki üç ürün yerine 100 ürün olduğunu düşün. içinden çıkılmaz olur. veritabanı şişer.

yukarıda senin yazdığın çalışır. eğer ürünler için veritabanı kullanırsan aşağıdaki gibi olabilir:

    $hangisi=implode(´,´,$urun_id);
    $bil=mysql_query("SELECT * FROM urunler WHERE id IN ($hangisi);");
    if($bil)
    {
        while ($urun = mysql_fetch_assoc($bil))
        {
            foreach($musteri_id as $m)
            {
                mysql_query("INSERT INTO sepet (`musteri_id`,`urun_id`,`urun_fiyat`,`urun_kdv`) VALUES(´$m´,´$urun[id]´,´$urun[fiyat]´,´$urun[kdv]´)");               
            }
        }
    }   

Her programcı birgün Php yi tadacaktır
2010-02-11 16:12:58 Edit:2010-02-11 16:13:21

kod

FatihÖzenFatih ÖzenAvatar

Hocam kod için teşekkürler. :)

Şimdi biraz kafam karıştı :D


mysql_query("INSERT INTO sepet (`musteri_id`,`urun_id`,`urun_fiyat`,`urun_kdv`) VALUES(´$m´,´$urun[id]´,´$urun[fiyat]´,´$urun[kdv]´)");

Burdaki $urun[id]´,´$urun[fiyat]´,´$urun[kdv] değerleri $bil sorgusundan mı geldi? Şöyle birşey var. Fiyat ve kdv oranları db´de tutulmuyor. Müşteri burda iki değeride kendisi belirleyecek.

en baştaki $hangisi=implode(´,´,$urun_id); gibi fiyat ve kdv oranlarınıda alıp kayıt edebilir miyiz?

"Bulunduğu toplum için fikir üretip de söylemeyen ya tembel ya bencil yada korkaktır." www.fatihozen.com
2010-02-11 16:50:39 Edit:2010-02-11 16:51:09

phpkodlari.com © 2009 Herkes Php öğrenecek
Eglence ve Oyun: Gamikro