Kodları lütfen aşağıdaki butonları kullanarak renklendirin. Örnek: <php> echo "Selam Dünya"; </php>
Yardım
karakter kaldı

explode retrieve dynamic checkbox data update

Selam,

databasede bulunan bir satırdaki renkler içinde chekboxtan implode ettiğimizi explode ile alıp update etmek istediğimizde karşıma gelen veri değişkenlik gösteriyor 4 renkin 3 rengini seçmiş sonra 4 rengi tekrar checkboxtan gönderecek ,

$row =explode(",","$renkler");

foreach ($row as $colors)

{

echo '<input type=checkbox value="color[]" CHECKED>' .$colors.'<br/>';
}
else

{
echo '<input type=checkbox value="color[]" >' .$colors.'<br/>';
}

peki burda sadece check olanları yani explode ile gelenleri döküyor
yani 3 rengi ve 3 chekbox kutucuğunu , 4 üncü renk databasede yok ve 4. renk hangisi ki onu uncheck etsin ve ekrana 4. check box kutucuğunu bassın?

Teşekkürler.
+0
-0
Cevaba KatılıyorumKatılmıyorum
Cevap Yaz Yorum Yaz Arşivime Ekle Takip Et

Doğru Cevap

  • Hasan adlı üyenin fotoğrafı
    11 yıl önce yazılmış
    63 cevap - 0 soru
    Foreach sonrasına else kullanamazsın. Ekrana 4.cü kutucuğu bastırmanın farklı yolları var.

    Örneğin :


    $db_deki_renkler = 'mavi, sarı, yeşil';
    
    $row =explode(",",$db_deki_renkler);
    
    foreach ($row as $colors){
    	echo '<input type=checkbox value="color[]" CHECKED>' .$colors.'<br/>';
    }
    
    //Else yok.. döngüden sonra hangi renk kutucuğu olmasını istiyorsan manuel eklemelisin.
    echo '<input type=checkbox value="color[]" >kızıl<br/>';
    
    



    Bir diğer yöntem ise explode ettikten sonra yeni bir array daha atarsın ve döngüde olmasını sağlayabilirsin.



    
    $db_deki_renkler = 'mavi, sarı, yeşil';
    
    $row =explode(",",$db_deki_renkler);
    
    array_push($row, 'kızıl');
    
    foreach ($row as $colors){
    	echo '<input type=checkbox value="color[]" CHECKED>' .$colors.'<br/>';
    }
    


    Bunların check uncheck işlemlerini foreach içerisinden if ile kontrol edebilirsin.

    Son olarak value="color[]" bu kullanım ile verileri almak istediğinde sana sorun çıkartır. Value zaten checkbox'larda kullanılmaz. Bunu name="color[]" olarak değiştirmeni tavsiye ediyorum. Kayıt işlemlerinde $_REQUEST['colors'] olarak alıp implode ederek tekrar db'ye kaydedebilirsin.
    • murad766 adlı üyenin fotoğrafı murad766
      $db_deki_renkler = 'mavi, sarı, yeşil';

      $row =explode(",",$db_deki_renkler);

      buradaki aldığımız veriler sabit , olmayan veriyi bildiğimiz için onuda array_push la eklemekte bir sorun yok ,

      fakat sorduğum soru gelen verilen değişken olması yani database'e ne yazıldı bilmiyoruz

      $db_deki_renkler = 'mavi, sarı, yeşil'; de olabilir
      $db_deki_renkler = 'mavi, kızıl,sarı,yeşil'; de olabilir(ki bunda sorun yok dörtünü biliyoruz hepsini check yaptırabiliriz)
      $db_deki_renkler = 'yeşil,'; de olabilir v.s
      gelen verinin ne olduğunu bilmiyoruz o yüzden eksik olanıda bilmiyoruz, geleni check ederiz sorun yok ;
      peki ya eksik olan hangisi ki biz onuda ekrana yazdırabilelim?
      11 yıl önce yazılmış
    • Hasan adlı üyenin fotoğrafı Hasan
      Bu durumda senin belli bir sayıda elemanların olmalı ve bunları db'den gelene göre match etmen gerekiyor.

      Örneğin: Bir formun vardır ve bu formda Mavi, sarı, yeşil, kırmızı, siyah diye 5 adet checkbox listen vardır. Kullanıcı bunlardan seçer ve bunları db'ye kaydedersin.

      Sonra bunları düzenletirken db'den gelen değişkenleri checkbox listende bularak olanları checked yaparsın. Kaç tane checkbox var onuda bilmiyorum diyorsan eğer, ben de sana sen ne yapmak istiyorsun tam olarak kafandaki nedir diye sorarım.
      11 yıl önce yazılmış
    • murad766 adlı üyenin fotoğrafı murad766
      Baştan alalım öyleyse olmazsa sayfa şeklinde göndereceğim.

      Soru şu ;

      aşağıdaki renklerden hangisini seviyorsunuz.(herkesin kendi idsi var)

      4 adet kutucuk ve 4 adet renk var;sarı,kırmızı,mavi,yeşil
      ben sarı,kırmızı yı severim deyip gönderdim implode ile alıp database'e yazdım sonra aradan zaman geçti
      ben burda maviyi seviyorum onuda ekleyim dedim,

      sonra explode ile aldım gelen sayfada bana sen daha önce sarı,kırmızı sevdiğini belirtmişsin ve bende sana check olarak veriyorum diyor sonra diğerleri mavi ve yeşili uncheck veriyor bana ,(benim yapabildiğim sadece sarı ve kırmızıy bastırabilmek diğer iki boş kutucuğu değerleriyle getirememek) bende maviyi check ediyor ve update ediyorum.

      sizin verdiğiniz örnekte sabitti değerler ;başka biri gelip oda kendi $id 'isinde sarıyı işaretler başka bi gün gelir o da update etmek ister.herkes kendi id sinde belli zamanlarda güncellemek isteyebilir.
      11 yıl önce yazılmış
    • Hasan adlı üyenin fotoğrafı Hasan
      Evet aslında benimde anlatmak istediğim tam bu şekilde. Herkesin bir id'si var profillerinde sevdiği renkler diye bir bölüm olduğunu varsayıyorum. Bu kişilerde kayıt olurken, profillerini güncellerken bu renkleri seçebilecekler.

      4 Adet checkbox var bunlar sabit renkler, kullanıcı profilini düzenlemeye girdiğinde seninm bir formun var sonuçta ve bu renklerinde bu form içinde renkler...

      $renk_list = array('Sarı','Kırmızı','Mavi','Yeşil'); //formdaki sabit renkler
      
      $kullanici_renkleri = explode(',',$user_colors); //Db'den kullanıcın seçtiği renkler diziye atadık.
      
       
      //standart renkleri döngü içinde yazalım. 
      foreach ($renk_list as $colors){
      	
      	$checked = (in_array($colors,$kullanici_renkleri)) ? ' checked ' : ''; //Eğer kullanıcı renklerinden biri bu standart renklerde varsa checked olarak işaretle yoksa geç.
      	
      	echo '<input type="checkbox" name="colors[]" value="'.$colors.'" '.$checked.'>' .$colors.'<br/>';
      }
      



      Kodun içindeki $user_colors değişkenine kullanıcının daha önce işaretlediği renkler gelicek. Mavi,Sarı olabilir, Kırmızı,Yeşil,Mavi olabilir artık herneyse.

      Biz sabit renklerimizi dönderip, kullanıcının renkleri eğer bu renklerden biriyse checked yaptık (in_array).
      11 yıl önce yazılmış
    • siyahbeyaz adlı üyenin fotoğrafı siyahbeyaz
      ah murad kardesim ne demek istedigini bir anlasam hemen yapistircam kodu. ama oyle bir karisik anlatmisin ki yada ben cok uykusuz kalmisim ki seni anlamakta cok zorluk cekiyorum. sunu birde grafiksel anlatmaya calisirmisin.
      11 yıl önce yazılmış
    • murad766 adlı üyenin fotoğrafı murad766
      Bumudur Budur!!!

      eline sağlık dostum.

      bu mantığı bir türlü yakalayamamıştım.

      10 üzerinden 10 puan tebrikler.
      11 yıl önce yazılmış
    • Hasan adlı üyenin fotoğrafı Hasan
      Teşekkürler,

      Fakat doğru olan cevap olarak en son yazdığımı işaretle istersen o daha açıklamalı diğer arkadaşlar içinde yardımcı olmuş oluruz.
      11 yıl önce yazılmış
    • murad766 adlı üyenin fotoğrafı murad766
      peki bişey daha bunları html koda dökerken
      foreach döngüsünde kaldığı için echo komutuyla yazdırırken css lerde çok zor oluyor,

      peki bunları tek tek echo ile dökebilirmiz mesela
      echo '<input type="checkbox" name="colors[]" value="'.$colors.'"'.$checked.'>' .$colors.'<br/>';
      derken $colors[0] v.b. gibi..
      11 yıl önce yazılmış
    • Hasan adlı üyenin fotoğrafı Hasan
      Zor olan nedir? ne yapmak istiyorsun?

      Benim için döngü ile normal tek echo aynı şey. Sen yapmak istediğini söyle bi oturup düşünelim döngü içinde çözümünü buluruz diye düşünüyorum.
      11 yıl önce yazılmış
    • murad766 adlı üyenin fotoğrafı murad766
      
      foreach ($renk_list as $colors ){
       $checked = (in_array($colors,$kullanici_renkleri)) ? ' checked ' : '';
      
      echo "<table><td>";
      echo '<input type="checkbox" name="colors[]" value="'.$colors.'"'.$checked.'>' .$colors.'<br/>';
      echo "</td>";
      echo '<td width="206" align="left" style="height: 22px"><font color="yellow" face="Calibri">Sarı</font></td>';
      echo "</td><td>";
      echo '<input type="checkbox" name="colors[]" value="'.$colors.'"'.$checked.'>' .$colors.'<br/>';
      echo "</td>";
      echo '<td width="206" align="left" style="height: 22px"><font color="blue" face="Calibri">Mavi</font></td>';
      }
      

      yani tabloda her sutüne ayrı bir css style tanımlamak gibi.böyle olunca döngü içinde aynı şeyleri tekrar tekrar döndürüp duruyor haliyle.
      11 yıl önce yazılmış
    • Hasan adlı üyenin fotoğrafı Hasan
      Ok kolay, öncelikle tablonu döngü içerisinde aşağıdaki gibi yapmalısın. Her bir renk bir tr satırı olacak şekilde.

      $class_list diye yeni bir değişken içine renklerin isimlerinde eleman atayıp değerlerini ise türkçe karakter css için uygun isimler verdik.

      Eğer renk listesinde bu array içindeki eleman varsa ona tanımladığımız renk class'i gelicek, yoksa default olarak black class'ini tanımlayacak.

      Çözümü bu:

      
      $class_list = array('Sarı'=>'yellow', 'Kırmızı'=>'red', 'Mavi'=>'blue', 'Yeşil'=>'green');
      
      echo "<table>";
      foreach ($renk_list as $colors ){
       $checked = (in_array($colors,$kullanici_renkleri)) ? ' checked ' : '';
       
       $class = (array_key_exists($colors,$class_list)) ? $class_list[$colors] : 'black';
       
      	echo '<tr><td class="'.$class.'">';
      	echo '<input type="checkbox" name="colors[]" value="'.$colors.'"'.$checked.'>' . $colors;
      	echo '</td></tr>';
      }
      echo '</table>';
      
      
      11 yıl önce yazılmış
    • murad766 adlı üyenin fotoğrafı murad766
      Aslında bu cevap benin sorumun cevabı değildi , ama iyikide sen öyle anlayıp başka bir zaman karşılaşacağım başka bir sorunun cevabı olmuş iyikide öyle anlayıp bu cevabı vermişsin, on numara bir cevap olmuş.
      11 yıl önce yazılmış
    • Hasan adlı üyenin fotoğrafı Hasan
      hmm o zaman anlamamışım ben soruyu detaylı anlat istersen kargaşa yaşıyoruz :)
      11 yıl önce yazılmış

Cevaplar

Hiç cevap bulunamadı.