• 05-05-2017, 13:02:37
    #1
    Merhaba arkadaşlar, aşağıdaki gibi checkboxlarım var. Bunları veritabanında tek bir alana kaydediyorum. Veritabanını kontrol ettiğimde örneğin içerisinde sayi1 ve sayi2 varsa checkboxlar seçili olarak gelmesi için ne yapabilirm?

    <form action="kontrol.php" method="post">
    <label><input type="checkbox" name="sayi[]" value="sayi1"/>Sayi 1</label><br>
    <label><input type="checkbox" name="sayi[]" value="sayi2"/>Sayi 2</label><br>
    <label><input type="checkbox" name="sayi[]" value="sayi3"/>Sayi 3</label><br>
    <label><input type="checkbox" name="sayi[]" value="sayi4"/>Sayi 4</label><br>
    <input type="submit" value="Tamam"/>
    </form>
    explode ile ayırdım, dizilerden çektim fakat değişiklik gösteriyor.

    $secili =  $b['sayilar'];
    
    $dizi = explode ('|',$secili);
    if($dizi[0]=="sayi1"){$s1='checked="checked"';} else {$s1="";}
    if($dizi[1]=="sayi2"){$s2='checked="checked"';} else {$s1="";}
    if($dizi[2]=="sayi3"){$s3='checked="checked"';} else {$s1="";}
    if($dizi[3]=="sayi4"){$s4='checked="checked"';} else {$s1="";}
    
    echo '<form action="kontrol.php" method="post">
    <label><input type="checkbox" name="sayi[]" value="sayi1" '.$s1.'/>Sayi 1</label><br>
    <label><input type="checkbox" name="sayi[]" value="sayi2" '.$s2.'/>Sayi 2</label><br>
    <label><input type="checkbox" name="sayi[]" value="sayi3" '.$s3.'/>Sayi 3</label><br>
    <label><input type="checkbox" name="sayi[]" value="sayi4" '.$s4.'/>Sayi 4</label><br>
    <input type="submit" value="Tamam"/>
    </form>';
    Böyle yapınca, sıraları kayıyor veritabanında. Çözüm yolu önerebilecek var mıdır?
  • 05-05-2017, 13:35:59
    #2
    veritabanına nasıl kaydediyorsunuz? format nedir?
  • 05-05-2017, 14:10:15
    #3
    chedmade adlı üyeden alıntı: mesajı görüntüle
    veritabanına nasıl kaydediyorsunuz? format nedir?
    Bu şekilde tek alanda tutuyorum.
  • 05-05-2017, 17:24:36
    #4
    melihozyurt adlı üyeden alıntı: mesajı görüntüle
    Bu şekilde tek alanda tutuyorum.
    Doğru anladıysam şu şekilde yapabilirsin.

    $secili =  $b['sayilar'];
     
    if(strstr($secili, "sayi1")) $s1='checked="checked"';
    if(strstr($secili, "sayi2")) $s2='checked="checked"';
    if(strstr($secili, "sayi3")) $s3='checked="checked"';
    if(strstr($secili, "sayi4")) $s4='checked="checked"';
     
    echo '<form action="kontrol.php" method="post">
    <label><input type="checkbox" name="sayi[]" value="sayi1" '.$s1.'/>Sayi 1</label><br>
    <label><input type="checkbox" name="sayi[]" value="sayi2" '.$s2.'/>Sayi 2</label><br>
    <label><input type="checkbox" name="sayi[]" value="sayi3" '.$s3.'/>Sayi 3</label><br>
    <label><input type="checkbox" name="sayi[]" value="sayi4" '.$s4.'/>Sayi 4</label><br>
    <input type="submit" value="Tamam"/>
    </form>';
    fakat sayi9'a kadar işler bu mantık. sayi10 checkbox u oluşturursan sayi1 de etkilenir. çünki değer içerisinde parçalama yapmadan sayi1 değerinin olup olmadığına bakarak işlem yapıyor.
  • 05-05-2017, 17:29:01
    #5
    explode ile parçaladıktan sonra in_array ile dizide o değerin olup olmadığını kontrol ettirebilirsiniz.
  • 09-05-2017, 14:50:13
    #6
    chedmade adlı üyeden alıntı: mesajı görüntüle
    Doğru anladıysam şu şekilde yapabilirsin.

    $secili =  $b['sayilar'];
     
    if(strstr($secili, "sayi1")) $s1='checked="checked"';
    if(strstr($secili, "sayi2")) $s2='checked="checked"';
    if(strstr($secili, "sayi3")) $s3='checked="checked"';
    if(strstr($secili, "sayi4")) $s4='checked="checked"';
     
    echo '<form action="kontrol.php" method="post">
    <label><input type="checkbox" name="sayi[]" value="sayi1" '.$s1.'/>Sayi 1</label><br>
    <label><input type="checkbox" name="sayi[]" value="sayi2" '.$s2.'/>Sayi 2</label><br>
    <label><input type="checkbox" name="sayi[]" value="sayi3" '.$s3.'/>Sayi 3</label><br>
    <label><input type="checkbox" name="sayi[]" value="sayi4" '.$s4.'/>Sayi 4</label><br>
    <input type="submit" value="Tamam"/>
    </form>';
    fakat sayi9'a kadar işler bu mantık. sayi10 checkbox u oluşturursan sayi1 de etkilenir. çünki değer içerisinde parçalama yapmadan sayi1 değerinin olup olmadığına bakarak işlem yapıyor.
    Teşekkür ederim, artık seçili getirebiliyorum. Bana mantığını anlatabilir misiniz bir satır üzerinden müsaitseniz?

    --R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 14:26:22 -->-> Daha önceki mesaj 14:25:32 --

    PsdBul adlı üyeden alıntı: mesajı görüntüle
    explode ile parçaladıktan sonra in_array ile dizide o değerin olup olmadığını kontrol ettirebilirsiniz.
    explode ile parçaladıktan sonra seçim yaptım fakat, diziler sabit kalmadığı için birbirini tutmuyor o yüzden farklı yöntem arıyordum. @chedmade çözümü yazmış sağolsun.

    --R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 14:50:13 -->-> Daha önceki mesaj 14:26:22 --

    $secili =  $b['sayilar'];
    
    $kes= explode('|',rtrim($secili,'|'));
    if(in_array('sayi1',$kes)){$s1='checked="checked"';}
    if(in_array('sayi2',$kes)){$s2='checked="checked"';}
    if(in_array('sayi3',$kes)){$s3='checked="checked"';}
    
    echo '<form action="kontrol.php" method="post"> 
    <label><input type="checkbox" name="sayi[]" value="sayi1" '.$s1.'/>Sayi 1</label><br> 
    <label><input type="checkbox" name="sayi[]" value="sayi2" '.$s2.'/>Sayi 2</label><br> 
    <label><input type="checkbox" name="sayi[]" value="sayi3" '.$s3.'/>Sayi 3</label><br>
    <input type="submit" value="Tamam"/> 
    </form>';
    in_array explode ile de yaptım. Paylaşayım dedim, sağolun