2016-04-08 11 views
0

私は2つのテーブルを持っています。スキル、利用可能なすべてのスキルが含まれています。 とuser_skillsは、どのスキルのユーザーが含まれています。 利用可能なすべてのスキルを出力する必要があり、ユーザーが持っているスキル(session['username']で選択)がマークされます(チェックボックスをオンにします)。2つのテーブルの異なるデータを比較して表示する

$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; 
    } 
} 

どうすればこの作品を作成できますか? HTMLの 一部は次のとおりです。

<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> 

答えて

0

あなたはuser_skills配列($ user_skills_array)を宣言しているとのデータを持って考えると、以下のHTMLコードを使用

<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

以下以下、説明をしてみてください。

<?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> 

まず、既に行ったように、すべてのスキルを集めます。 次へ私はあなたのスキルアレイを1つに最適化し、すべてのスキルタイプをリストアップしました。

利用可能なスキルは、そのタイプID($ skillTypesを参照)によってインデックスされます。

次のように、自分のユーザースキルのコレクションが表示されていると仮定しました。

HTMLセクションでは、すべてのスキルタイプを反復処理し、ネストされたforeachでは対応するすべてのスキルをエコーし​​ます。 現在の反復のスキルIDがuser-skill-relationのin_arrayである場合、 "checked"属性が設定されます。

この例では、わかりやすいように短い構文を使用しました。

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

foreach() : endforeach; 
関連する問題