2016-04-08 25 views
0

İki tablom var. Beceri, tüm mevcut becerileri içerir. Kullanıcının sahip olduğu becerileri içeren ve user_skills. Tüm mevcut becerileri çıkarmam gerekiyor ve kullanıcının sahip olduğu beceriler (bunu session['username'] ile seçiyorum) işaretlenecektir (işaretli onay kutusu).İki tablodan farklı verileri karşılaştırın ve gösterin

$get_all_skills = mysqli_query($conn, "SELECT * FROM skills"); 
$web_design = array(); 
$web_develop = array(); 
$automation = array(); 
$security = array(); 
while($show_row = mysqli_fetch_array($get_all_skills)){ 
    switch($show_row['skill_type']){ 
     case '1': 
      array_push($web_design, $show_row['skill_name']); 
      break; 
     case '4': 
      array_push($web_develop, $show_row['skill_name']); 
      break; 
     case '3': 
      array_push($automation, $show_row['skill_name']); 
      break; 
     case '2': 
      array_push($security, $show_row['skill_name']); 
      break; 
    } 
} 

Bu işi nasıl yapabilirim? html Bölüm geçerli:

<div class=""> 
           <ul class="to_do"> 
            <?php 
            for($i=0;$i<count($web_develop);$i++){ 

            ?> 
            <li> 
            <p> 
             <input type="checkbox" class="flat"> <?php echo $web_develop[$i];?> </p> 
            </li> 
            <?php } ?> 
           </ul> 
           </div> 

cevap

0

Bir user_skills dizisi ($ user_skills_array) sahip düşünüldüğünde beyan ve veri aşağıdaki şu, açıklama denemek aşağıdaki html kodunu

<div class=""> 
    <ul class="to_do"> 
    <?php 
    for($i=0;$i<count($web_develop);$i++){ 
     // check the global skill is available in the user skill set 
     $checked = (in_array($web_develop[$i], $user_skills_array)) ? 'checked="checked"': ''; 
    ?> 
    <li> 
     <p> 
     <input type="checkbox" class="flat" <?php echo $checked;?>> <?php echo $web_develop[$i];?> </p> 
    </li> 
    <?php } ?> 
    </ul> 
</div> 
0

kullanmak var.

<?php 
$get_all_skills = mysqli_query($conn, "SELECT * FROM skills"); 

$availableSkills = []; 
$skillTypes = [ 
    1 => 'Webdesign', 
    2 => 'Security', 
    3 => 'Automation', 
    4 => 'Web Development', 
]; 

while($show_row = mysqli_fetch_array($get_all_skills)){ 
    $skill = [ 
     'id' => $show_row['id']; 
     'name' => $show_row['name']; 
    ]; 
    $skillType = $show_row['skill_type']; 

    $availableSkills[$skillType][] = $skill; 
} 

// assuming user_skills: 
$userSkills = [ 
    1, 
    2, 
    5, 
    8 
]; 

?> 

    <ul class="to_do"> 
     <?php foreach ($availableSkills as $type => $skillsForType) : ?> 
     <li> 
      <?= $skillTypes[$type] ?> 
      <ul> 
       <?php foreach ($skillsForType as $skill) : ?> 
        <li> 
         <input 
          type="checkbox" 
          class="flat" 
          name="skill[<?= $type ?>]" 
          value="<?= $skill['id'] ?>" 
          <?= in_array($skill['id'], $userSkills) ? 'checked="checked"' : '' 
         > <?= $skill['name'] ?> 
        </li> 
       <?php endforeach; ?> 
      </ul> 
     </li> 
     <?php endforeach; ?> 
    </ul> 

Önceden yaptığınız gibi, önce tüm becerileri toplarsınız. Sonraki Farklı beceri dizilerinizi bir ve listelenen tüm beceri türlerine göre optimize ettim.

Kullanılabilir beceriler, tür kimlikleriyle indekslenir (bkz. $ SkillTypes).

Sonraki Kullanıcı-beceri koleksiyonunuzun gösterildiği gibi olabileceğini varsaydım.

HTML bölümünde her yetenek türünde yinelemiyorum ve iç içe geçmiş bir foreach içinde tüm ilgili becerileri yankılamıyorum. Geçerli yinelemenin yetenek kimliği, kullanıcı-beceri ilişkisi içindeyken "kontrol" özniteliği ayarlanır.

Netleştirmek için Bu örnekte kısa sözdizimi kullandım.

[] --> array() 
<?= --> <?php echo 

foreach() : endforeach; 
İlgili konular