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

FatihÖzen Fatih Özen Avatar

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
10-02-2010 18:43

    ü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
    10-02-2010 19:00

      Tablo

      FatihÖzen Fatih Özen Avatar

      :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
      11-02-2010 01:29 Edit:11-02-2010 01:50

        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
        11-02-2010 07:23

          FatihÖzen Fatih Özen Avatar

          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
          11-02-2010 15:08

            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
            11-02-2010 15:23

              FatihÖzen Fatih Özen Avatar

              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
              11-02-2010 15:31

                dizi

                FatihÖzen Fatih Özen Avatar

                <?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
                11-02-2010 15:39 Edit:11-02-2010 16:55

                  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
                  11-02-2010 16:12 Edit:11-02-2010 16:13

                    kod

                    FatihÖzen Fatih Özen Avatar

                    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
                    11-02-2010 16:50 Edit:11-02-2010 16:51

                      www.Phpkodlari.com © 2009 Herkes Php öğrenecek
                      Web tasarım ve eğitim kaynağınız.