• 24-12-2009, 12:29:39
    #1
    Resimdeki sistemi hangi mantıkda yapıyorlar?
    -mysql a ne kadar özellik varsa ayrı kolon mu açıyorlar 70 özellik 70 kolon.
    Diyelim böyle yapıldı çağırırlarken if else yada empty ilemi çağırıp yazdırıyorlar?
    70 özelliğin her biri için de ayrı ayrı kod çöplüğü olmaz mı ?
    <?php
    // kolona direk çocuk yazdırıp
     if (empty($ozallik1)) { 
    echo "var".$ozallik1; } 
    else { echo "yok".$ozallik1;}
    ?>
    
    // yada sql a id atıp if else ile çağırma
    <?
    if ($ozellik1=="1") echo "çocuk var";
    else echo  echo "çocuk yok";
    ?>
    her özellik için bunların tekrarı saçma geliyor.

  • 24-12-2009, 12:36:59
    #2
    Aklıma gelen en mantıklı yontem şu.

    ozellik diye bır alan acılıp checkbox sayısı kadar deger atanır. Ornegın toplam checkbox sayısı 50 diyelim. Her birisinin bir numarası oldunu farzedersek; mysql deki alanımızda şöyle yazılar cıkar

    Ozellik
    ------
    1,2,5,8,18,24,37,41

    Yani aktif olanların numarası yazılarak yapılabilir. Verileri cekerkende , sildirilerek aktif olan check degerleri alınabilir.
  • 24-12-2009, 12:42:56
    #3
    ertuk tek bir kolona 1,2,5,8,18,24,37,41 yazdır sonra explode ilede çek mi diyorsun? ÜSteki resim gibi olmaz ozmn sadece checkbox la çekilenler gözükür. Diğerleri soluk gözükmez.
  • 24-12-2009, 12:50:23
    #4
    Aynen o sekilde dıyorum. Hayır bu sekilde gosterebilirsin dostum. En nihayetınde check sayın sabit olacak sanırım ?

    1 - 50 arasında butun checkler i yerleştirirsin (döngüylede yapabilirsin). veri tabanındaki numaralara denk gelen checkler secili olur digerleri pasif durur.
    Bunun ıcınde if kontrolu yapabilirsin.

    Şu ana kadar uretebildiğim mantık bu kadar kahvaltı yapayım. sende bıraz ugras. eger olmazsa bırlıkte bırseyler yazarız.
  • 24-12-2009, 14:08:23
    #5
    Saol. Şuan lazım bbirşey değil sadece aklıma takılıyordu sorayım dedim Bana bırakırsan pek yazacağımı sanmam örnek verip sen yazarsan iyi olur. 4 lü yapalım misal
    1 ise : oyun
    2 ise : gezi
    3 ise : ev
    4 ise : aile

    1,2,3,4 ü explode iler bu şekilde nasıl parçalarız?
  • 24-12-2009, 15:00:45
    #6
    alana 1,2,3,4 diye kaydettiğini varsayalım;

    $alan  = "1,2,3,4";
    $parcala = explode(",", $alan);
    echo $parcala[0]; // 1
    echo $parcala[1]; // 2
    sonra bunları if ile isimlendirebilirsin.
    Benimde aklıma bu geldi başka yolu vardır mutlaka sadece bir örnek
  • 24-12-2009, 15:08:24
    #7
    101010101001100 mantığında tutabilirsin. yani 50 tane özellik varsa, varchar 50 olarak bir alan oluşturursun mysql de. sonra bunu php de çekip string üzerinden index kullanarak tek tek tüm alanlara erişirsin. explode a göre hem veritabanını, hem de php yi daha az yoracaktır .

    aslında 50 adet için 6 bitlik bir alan tüm varyasyonları tutmaya yeter de artar bile ama bunun kodlaması php + mysql de yapılamaz herhalde.
  • 24-12-2009, 15:14:51
    #8
    sql örnek vererek açıklasaydın keşke.
  • 24-12-2009, 15:31:53
    #9
    <?php 
    
    $ozelliklerDbAlani = "";
    
    //+++ post işleme. db ye kaydedilen alanın oluşturulması
    if (isset($_POST['ok'])):
    for ($i = 0; $i < 50; $i++){
        if (isset($_POST[$i])){
            $ozelliklerDbAlani .= '1';
        } else $ozelliklerDbAlani .= '0';
    }
    //--- post işleme sonu
    
    //+++ oluşturulan stringden değerlerin alınması, gerektiğinde kullanılması
    echo $ozelliklerDbAlani. '<br />-------- <br />';
    for ($i = 0; $i < strlen($ozelliklerDbAlani); $i++){
        if ($ozelliklerDbAlani[$i] == 0){
            echo $i. '. alan ticksiz';
        }else echo $i. '. alan tickli';
        echo '<br />';
    }endif;
    //--- değerlerin alınması sonu
    
    ?><html><head><title>checkbox db field</title></head>
    
    <body><form method="POST" action="<?php echo $_SERVER['PHP_SELF']; ?>">
    <?php for ($i = 0; $i < 50; $i++) :?>
    <input type="checkbox" name="<?php echo $i;?>"></input><?php echo 'alan '. $i; ?>
    <? endfor; ?>
    <input type="submit" name="ok" value="ok">
    </form></body></html>
    aslında daha kısa bir stringde de tutulabilir ama bunun da performans açısından çok sorun yaşatacağını sanmıyorum.