• 17-01-2014, 23:36:58
    #1
    Reveloper
    Merhaba,

    Arkadaşlar bi ürün sistemim var ürün ek seçeneklerini

    {Beden:Small|Medium|Large}{Renk:Kırmızı|Siyah|L acivert}

    diye ayırıyorum basarken:

    <?
    function als($nerdens, $nereyes, $Veris){
    	preg_match_all('|'.$nerdens.'(.*?)'.$nereyes.'|si', $Veris, $asds);
    	$sonucs=$asds[1][0];
    	return $sonucs;
    }                                
    
    function bir($nerdens){
    	$pp=explode('|', $nerdens);
    	$da="";
    	foreach($pp as $be){
    		$da.='<option value="'.$be.'">'.$be.'</option>
    		';
    	}
    	return $da; 
    }
    
    function Cevir($veri){
    	$sonuc="";
    	preg_match_all('|{(.*?)}|si', $veri, $eee);
    	$say=count($eee[1]);
    	for($i=0; $i < $say; $i++){
    		$rr=$eee[0][$i];
    		$ll=als('{', ':', $rr);
    		$ll2=als(':', '}', $rr);
    		$pp=bir($ll2);
    $sonuc.=<<<HTML
    <select name="$ll" id="">
          $pp
    </select>
    HTML;
    	}
    	return $sonuc;
    }
    
    $veri='{Renk:Siyah|Yeşil|Kırmızı}{Beden:S|M|L|XL}{Degisken:a|b|c}';
    echo Cevir($veri);
    bu şekilde basıyorum bana:
    <select name="Renk">
       <option>Siyah</option>
       <option>Yeşil</option>
       <option>Kırmızı</option>
    </select>
     
    <select name="Beden">
       <option>S</option>
       <option>M</option>
       <option>L</option>
       <option>XL</option>
    </select>
     
    <select name="Degisken">
       <option>a</option>
       <option>b</option>
       <option>c</option>
    </select>
    bunu veriyor.


    ANCAK !:

    Veritabanımda gelen sipariş ise şöyle geliyor:

    Siyah|Small|abc

    bunuda

    <select name="renk">
    <option>Siyah</option>

    olarak en başında basması lazım verinin explode ile bölüp yolluyorum çünkü bunu fonksiyona nasıl geçireceğimi bulamadım


    biraz daha basit anlatayım:

    <?
    function als($nerdens, $nereyes, $Veris){
       preg_match_all('|'.$nerdens.'(.*?)'.$nereyes.'|si', $Veris, $asds);
       $sonucs=$asds[1][0];
       return $sonucs;
    }                                
     
    function bir($nerdens){
       $pp=explode('|', $nerdens);
       $da="";
       foreach($pp as $be){
          $da.='<option value="'.$be.'">'.$be.'</option>
          ';
       }
       return $da; 
    }
     
    function Cevir($veri){
       $sonuc="";
       preg_match_all('|{(.*?)}|si', $veri, $eee);
       $say=count($eee[1]);
       for($i=0; $i < $say; $i++){
          $rr=$eee[0][$i];
          $ll=als('{', ':', $rr);
          $ll2=als(':', '}', $rr);
          $pp=bir($ll2);
    $sonuc.=<<<HTML
    <select name="$ll" id="">
          $pp
    </select>
    HTML;
       }
       return $sonuc;
    }
     
    $veri='{Renk:Siyah|Yeşil|Kırmızı}{Beden:S|M|L|XL}{Degisken:a|b|c}';
    
    $icindeolsun='Yeşil|L|b';
    echo Cevir($veri,$icindeolsun);
    $icindeolsun='Yeşil|L|b';
    echo Cevir($veri,$icindeolsun);

    bunu böyle yolladığım zaman bana gene $veri degiskenini isleyip yazsın ama select'in başında $icindeolsun içeriğide olsun?
  • 18-01-2014, 00:17:39
    #2
    öncelikle "Cevir($veri,$icindeolsun);" şu kullanım hata verecektir. Senin oluşturduğun fonksiyonda sadece 1 veri aliyorsun function Cevir($veri) burada "Cevir($veri,$icindeolsun);" 2 veri yollamaya çalişmişsin.

    Bir de köşeli parantezler yerine arraylar kullanirsan gereksiz hata ve kod kalabaliğindan kurtulursun.

    İçinde olsun olayı için bir if koyup selected basitçe halledebilirsin sanirim.

    --R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 00:17:39 -->-> Daha önceki mesaj 00:07:49 --

    Doğru anladiysam şu şekilde yaptim
    <?php
    
    /**
     * @author Ahmet
     * @copyright 2014
     */
    
    function abc($veri, $ek = 0) {
        foreach($veri as $bir => $iki) {
            echo '<select name="'.$bir.'">';
                foreach ($iki as $uc) {
                    if ($ek != 0) {
                        if ($ek[$bir] == $uc) {
                            echo '<option value="'.$uc.'" selected>'.$uc.'</option>'; 
                        }
                        else {
                            echo '<option value="'.$uc.'">'.$uc.'</option>'; 
                        }
                    }
                    else {
                        echo '<option value="'.$uc.'">'.$uc.'</option>'; 
                    }
                }
            echo '</select>';
        }
    }
    
    
    $veri = array(
        "renk" => array("siyah","yesil","sari"),
        "beden" => array("S","M","L","XL"),
        "degisken" => array("a","b","c")
    );
    $icindeolsun = array(
        "renk" => "yesil", 
        "beden" => "M", 
        "degisken" => "c"
    );
    abc($veri,$icindeolsun);
    ?>
  • 18-01-2014, 03:28:25
    #3
    Reveloper
    LaCReMeL adlı üyeden alıntı: mesajı görüntüle
    öncelikle "Cevir($veri,$icindeolsun);" şu kullanım hata verecektir. Senin oluşturduğun fonksiyonda sadece 1 veri aliyorsun function Cevir($veri) burada "Cevir($veri,$icindeolsun);" 2 veri yollamaya çalişmişsin.

    Bir de köşeli parantezler yerine arraylar kullanirsan gereksiz hata ve kod kalabaliğindan kurtulursun.

    İçinde olsun olayı için bir if koyup selected basitçe halledebilirsin sanirim.

    --R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 00:17:39 -->-> Daha önceki mesaj 00:07:49 --

    Doğru anladiysam şu şekilde yaptim
    <?php
    
    /**
     * @author Ahmet
     * @copyright 2014
     */
    
    function abc($veri, $ek = 0) {
        foreach($veri as $bir => $iki) {
            echo '<select name="'.$bir.'">';
                foreach ($iki as $uc) {
                    if ($ek != 0) {
                        if ($ek[$bir] == $uc) {
                            echo '<option value="'.$uc.'" selected>'.$uc.'</option>'; 
                        }
                        else {
                            echo '<option value="'.$uc.'">'.$uc.'</option>'; 
                        }
                    }
                    else {
                        echo '<option value="'.$uc.'">'.$uc.'</option>'; 
                    }
                }
            echo '</select>';
        }
    }
    
    
    $veri = array(
        "renk" => array("siyah","yesil","sari"),
        "beden" => array("S","M","L","XL"),
        "degisken" => array("a","b","c")
    );
    $icindeolsun = array(
        "renk" => "yesil", 
        "beden" => "M", 
        "degisken" => "c"
    );
    abc($veri,$icindeolsun);
    ?>
    kod için teşekkür ederim doğru kullanım. lakin veritabanından çektiğim için array atamasını nasıl yapıcam? explode tek formülüm

    --R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 03:18:58 -->-> Daha önceki mesaj 02:49:11 --

    @LaCReMeL

    bişey buldum ve şu an beni kurtaran kod oldu bu ))

     function string2KeyedArray($string, $delimiter = ',', $kv = '=>') {
      if ($a = explode($delimiter, $string)) { // create parts
        foreach ($a as $s) { // each part
          if ($s) {
            if ($pos = strpos($s, $kv)) { // key/value delimiter
              $ka[trim(substr($s, 0, $pos))] = trim(substr($s, $pos + strlen($kv)));
            } else { // key delimiter not found
              $ka[] = trim($s);
            }
          }
        }
        return $ka;
      }
    } // string2KeyedArray
    
    $veri = array(
        "renk" => array("siyah","yesil","sari"),
        "beden" => array("S","M","L","XL"),
        "degisken" => array("a","b","c"),
        "degiskenss" => array("ass","bss","css")
    );
    
    $ar1='renk=>yesil,beden=>M,degisken=>c,degiskenss=>css';
    $icindeolsun = string2KeyedArray($ar1);


    --R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 03:28:25 -->-> Daha önceki mesaj 03:18:58 --

    ama

    $veri = array(
    "renk" => array("siyah","yesil","sari"),
    "beden" => array("S","M","L","XL"),
    "degisken" => array("a","b","c"),
    "degiskenss" => array("ass","bss","css")
    );

    içindeki array ı nasıl çekecem veritabanından çoklu array çünkü :/
  • 18-01-2014, 11:13:32
    #4
    Üyeliği durduruldu
    Burti adlı üyeden alıntı: mesajı görüntüle
    kod için teşekkür ederim doğru kullanım. lakin veritabanından çektiğim için array atamasını nasıl yapıcam? explode tek formülüm

    --R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 03:18:58 -->-> Daha önceki mesaj 02:49:11 --

    @LaCReMeL

    bişey buldum ve şu an beni kurtaran kod oldu bu ))

     function string2KeyedArray($string, $delimiter = ',', $kv = '=>') {
      if ($a = explode($delimiter, $string)) { // create parts
        foreach ($a as $s) { // each part
          if ($s) {
            if ($pos = strpos($s, $kv)) { // key/value delimiter
              $ka[trim(substr($s, 0, $pos))] = trim(substr($s, $pos + strlen($kv)));
            } else { // key delimiter not found
              $ka[] = trim($s);
            }
          }
        }
        return $ka;
      }
    } // string2KeyedArray
    
    $veri = array(
        "renk" => array("siyah","yesil","sari"),
        "beden" => array("S","M","L","XL"),
        "degisken" => array("a","b","c"),
        "degiskenss" => array("ass","bss","css")
    );
    
    $ar1='renk=>yesil,beden=>M,degisken=>c,degiskenss=>css';
    $icindeolsun = string2KeyedArray($ar1);


    --R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 03:28:25 -->-> Daha önceki mesaj 03:18:58 --

    ama

    $veri = array(
    "renk" => array("siyah","yesil","sari"),
    "beden" => array("S","M","L","XL"),
    "degisken" => array("a","b","c"),
    "degiskenss" => array("ass","bss","css")
    );

    içindeki array ı nasıl çekecem veritabanından çoklu array çünkü :/
    $veri["renk"][1] mavi
    foreach($veri["renk"] as $renk){
    echo $renk.'<br/>';
    }

    tun renkleri yazdirir.
  • 18-01-2014, 13:25:41
    #5
    Reveloper
    WapZap adlı üyeden alıntı: mesajı görüntüle
    $veri["renk"][1] mavi
    foreach($veri["renk"] as $renk){
    echo $renk.'<br/>';
    }

    tun renkleri yazdirir.
    ben anlatamadım heralde hocam

    benim dediğim:

    veritabanına ne yazacamki bana çıktısını böyle versin:
    $veri = array(
    "renk" => array("siyah","yesil","sari"),
    "beden" => array("S","M","L","XL"),
    "degisken" => array("a","b","c")
    );
  • 18-01-2014, 14:16:25
    #6
    @Burti;

    Yanlış anlamayın da, neden json kullanmıyorsunuz?

    Boşu boşuna parçalama işlemi yapmamış olursunuz.
  • 18-01-2014, 14:55:11
    #7
    Reveloper
    soulmy adlı üyeden alıntı: mesajı görüntüle
    @Burti;

    Yanlış anlamayın da, neden json kullanmıyorsunuz?

    Boşu boşuna parçalama işlemi yapmamış olursunuz.
    Estağfurullah önerilere tabiki açığım ancak firmanın benden önceki yazılımcısı farklı bir taban kullandığı için 7000 tanede veritabanında sipariş olduğu için elimden gelen ancak veritabanı üzerinden işlem görmek
  • 18-01-2014, 15:56:36
    #8
    Vallahi sorununu hala anlayamadığım için çözüm sunamiyorum. Çoklu arrayı veritabanına kaydedip, veritabanından almak kolay. json_encode ile çok rahat yapabilirsin ama senin sorununu bu çözer mi bilmiyorum.

    Burti adlı üyeden alıntı: mesajı görüntüle
    kod için teşekkür ederim doğru kullanım. lakin veritabanından çektiğim için array atamasını nasıl yapıcam? explode tek formülüm

    --R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 03:18:58 -->-> Daha önceki mesaj 02:49:11 --

    @LaCReMeL

    bişey buldum ve şu an beni kurtaran kod oldu bu ))

     function string2KeyedArray($string, $delimiter = ',', $kv = '=>') {
      if ($a = explode($delimiter, $string)) { // create parts
        foreach ($a as $s) { // each part
          if ($s) {
            if ($pos = strpos($s, $kv)) { // key/value delimiter
              $ka[trim(substr($s, 0, $pos))] = trim(substr($s, $pos + strlen($kv)));
            } else { // key delimiter not found
              $ka[] = trim($s);
            }
          }
        }
        return $ka;
      }
    } // string2KeyedArray
    
    $veri = array(
        "renk" => array("siyah","yesil","sari"),
        "beden" => array("S","M","L","XL"),
        "degisken" => array("a","b","c"),
        "degiskenss" => array("ass","bss","css")
    );
    
    $ar1='renk=>yesil,beden=>M,degisken=>c,degiskenss=>css';
    $icindeolsun = string2KeyedArray($ar1);


    --R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 03:28:25 -->-> Daha önceki mesaj 03:18:58 --

    ama

    $veri = array(
    "renk" => array("siyah","yesil","sari"),
    "beden" => array("S","M","L","XL"),
    "degisken" => array("a","b","c"),
    "degiskenss" => array("ass","bss","css")
    );

    içindeki array ı nasıl çekecem veritabanından çoklu array çünkü :/


    --R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 15:56:36 -->-> Daha önceki mesaj 15:44:27 --

    Sıkıntını anladım sanırım, o array'ı veri tabanına kaydetmek istiyorsun o yüzden string2KeyedArray fonksiyonunu kullanmaya çalişmişsin. Gerek yok ona yukarda da dediğim gibi json_encode ve json_decode ile işini rahatça halledebilirsin.

    veri tabanına kaydetmeden önce json_encode yaparsın.
    veritabanından çektikten sonra json_decode ile tekrar arraya dönüştürürsün.
  • 18-01-2014, 16:22:46
    #9
    Reveloper
    daha güzel bi çözüm buldum arkadaşlar:

    serialize diye bir şey buldum mükemmel derecede işimi görüyor şu anda sizede tavsiye ederim