2013-03-11 2 views
0

У меня есть таблица с разными именами компетенций и другая, в которой у нас есть идентификатор компетенции и user_ID, обладающий этой компетенцией. У меня есть форма, в которой я передаю компетенции, которые применяются к определенному пользователю. Теперь я хочу получить эти полномочия и флажки, если они действительны. Я использую этот код, но он, похоже, не работает.Установите флажок, если элемент существует в базе данных

<?php 
include "db.php"; 
$employees=mysql_query("SELECT * FROM asiakas"); 

echo "<form method='post' action='' id='employeesselection'><select name='select_employee' id='select_employee'>"; 
while($row=mysql_fetch_array($employees)){ 
     $selected = ($row['Id'] == $_POST['select_employee'])?'selected="selected"':''; 
     echo '<option '.$selected.' value="'.$row['Id'].'">'.$row['Etunimi'].' - '. $row['Sukunimi'].'</option>'; 

    } 
echo "</select><input type='hidden' name='action' value='selectedemployee'> 
     <input type='submit' value ='submit' name='submit'><br/>"; 

if(isset($_POST['select_employee'])){ 
    $specific=mysql_query("SELECT Id, Sukunimi,Etunimi from asiakas WHERE Id=".$_POST['select_employee']); 
    $sp=mysql_fetch_array($specific); 
} 
if(isset($sp['Etunimi']) && isset($sp['Sukunimi'])){ 
     $comp=mysql_query("SELECT * FROM Competences"); 
     echo "<br/>select competences for: ". $sp['Etunimi']; 
     $id= $sp['Id']; 

     $result=mysql_query("SELECT distinct c_ID from User_Competence WHERE e_ID=".$id); 
     while($test=mysql_fetch_array($result)) 
     { 
      echo $test['c_ID']; 
     } 


     echo "<table><th>valid?</th><th>Competence description</th>"; 

     $counter=0; 
     $traverse=0; 

     while($compi=mysql_fetch_array($comp)){ 
      $checked=''; 
      if($test[$traverse]==$counter){ 
       $checked="checked"; 
       $traverse++; 
      } 
      $counter ++; 
      echo "<tr><td><input type='checkbox'" .$checked." name='c[]' value='".$compi['Competence_ID']."'></td><td>".$compi['Competence_Description']."</td></tr>"; 
      } 
      echo "</table>"; 
      echo "<input type='hidden' name='action' value='selectchecked'>"; 
      echo "<input type='submit' value='submit checks'>"; 
     } 

     if(isset($_POST) && !empty($_POST)){ 
      print_r($_POST); 
     } 
     if(isset($_POST['action']) && $_POST['action']='selectchecked'){ 

      if (isset($_POST['c'])){ 
       $s = $_POST['c']; 

       foreach ($s as $k => $v) { 

        if (is_array($v)) { 

         // array_push($s, implode('', array($v [$what]))); 

        } 
      }; 
       echo $abc= implode(',', $s); 

       for ($a=0;$a<count($s);$a++){   
        $ar=explode(',',$abc); 
        echo $var= $ar[$a]; 
        $q=mysql_query("INSERT INTO user_competence(c_ID, e_ID) VALUES ('".$var."','".$id."')"); 

       } 
      } 

     } 
     echo "</form>"; 
?> 
+0

[Пожалуйста, не используйте mysql_ * функции] (http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php) в новом коде. Они больше не поддерживаются [и официально устарели] (https://wiki.php.net/rfc/mysql_deprecation). См. [Красная рамка] (http://uk.php.net/manual/en/function.mysql-connect.php)? Узнайте о [_prepared statements_] (http://en.wikipedia.org/wiki/Prepared_statement) и используйте [PDO] (http://php.net/pdo) или [MySQLi] (http: // php. net/mysqli) - [эта статья] (http://php.net/manual/en/mysqlinfo.api.choosing.php) поможет вам решить, какой из них. – TNK

+0

Извините, но в вашем отредактированном вопросе я не уверен, как вы ожидаете, что люди прочитают и поймут такой плохо отформатированный код! – freefaller

+0

Я отредактировал его снова, с лучшим форматированием. – auicsc

ответ

0

Если поставить checked как атрибут на <input type="checkbox"> это будет проверяться, даже если оставить фактическое значение атрибута пустым.

Меняем следующие части из ...

$checked="checked"; 
... 
echo "<tr><td><input type='checkbox' checked='".$checked."' name='c[]' ... 

В ...

$checked="checked='checked'"; 
... 
echo "<tr><td><input type='checkbox' ".$checked." name='c[]' ... 

Что будет означать, если $test[$traverse$] верно, checked='checked' будет помещен в HTML, в противном случае будут исключены.

+0

Спасибо за ответ, но почему он проверяет только первый элемент? У меня есть, например, один сотрудник, у которого есть 7 компетенций, и он всегда проверяет только первый, для всех сотрудников. – auicsc

+0

У вас есть два возрастающих значения ('$ counter' и' $ traverse') ... однако они оба находятся в одном цикле while. Я не совсем уверен, что вы пытаетесь сделать, но это не кажется правильным – freefaller

+0

@auicsc - вы уверены, что хотите закрыть скобку ('}') * straight * после 'echo $ test [ 'c_ID']; '? Похоже, у вас должен быть весь код, запущенный в первом цикле 'while' – freefaller

Смежные вопросы