2014-03-01 33 views
0

在這裏,我有兩個表:tbl_checklist和tbl_stud_checklist。一旦我在tbl_checklist中添加新數據,該項目將成爲tbl_stud_checklist中的另一列。顯示數據字段爲複選框,保留檢查值和設置值爲1時檢查

tbl_checklist:

+---------------------------+ 
| id | Checklist  | 
+---------------------------+ 
| 1 | Medical Certificate |  
| 2 | Evaluation Form  | 
| 3 | Application Form | 
+---------------------------+ 

tbl_stud_checklist:

+----------------------------------------------------------------+ 
    | id | Medical Certificate | Evaluation Form | Application Form | 
    +----------------------------------------------------------------+ 
    | 1 |   0   |   0  |   0  | 
    +----------------------------------------------------------------+ 

,然後,我將檢索在tbl_stud_checklist爲複選框的所有數據字段,一旦有人檢查,檢查會保留並將其值改爲1.希望你能幫助我離開這裏。我搜索了很多,並嘗試了很多教程,仍然讓我錯了。

代碼:

<html> 
<form action='' method='post'> 
<?php 
$database = 'sample'; 
$table = 'tbl_stud_checklist'; 

$mysql = mysql_connect('localhost', 'root', '') or die(mysql_error()); 
mysql_select_db('sample', $mysql) or die(mysql_error($mysql)); // selecting db is not not necessary in this case 


$query = sprintf(" 
    SELECT 
     COLUMN_NAME, COLUMN_TYPE 
    FROM 
     INFORMATION_SCHEMA.COLUMNS 
    WHERE 
     TABLE_SCHEMA = '%s' 
     AND TABLE_NAME = '%s' 
", 
    mysql_real_escape_string($database), 
    mysql_real_escape_string($table) 
); 
$result = mysql_query($query, $mysql) or die(mysql_error($mysql)); 


while(false!=($row=mysql_fetch_array($result))) { 
    $name = htmlspecialchars($row['COLUMN_NAME']); 
    $type = htmlspecialchars($row['COLUMN_TYPE']); 
    printf("<input type=\"checkbox\" name=\"col[]\" value=\"%s\" />%s (%s)<br />\r\n", $name, $name, $type); 
} 
?> 
<tr><td colspan="2"><input type="submit" name="submit" value="Update Privileges" /></td></tr> 
</form> 
</html> 
+0

你從哪裏得到'$ type'?你也可以描述你提交後想要得到的是什麼?只有選中的複選框或所有選中的複選框已設置? –

+0

哦對不起,我忘記了,它必須是$ query = sprintf(「SELECT COLUMN NAME,COLUMN_TYPE ...)然後提交後,即使我重新加載頁面,選中的複選框也會保留,然後設置檢查的值複選框爲1.希望我向你明確。 – user249563

+0

我的意思是,顯示的複選框來自表列名稱,所以當用戶檢查它時,它的值必須是1在數據庫中.. – user249563

回答

0

不知道你的$type值,但試試這個,看看它是否適合你:

<html> 
<form action='' method='post'> 
<?php 
$database = 'sample'; 
$table = 'checklist_stud_columns'; 
// assuming user_id as 1, you may have to write up more code on 
// how you are fetching this value 
$user_id = 1; 
$mysql = mysql_connect('localhost', 'root', '') or die(mysql_error()); 
mysql_select_db('sample', $mysql) or die(mysql_error($mysql)); // selecting db is not not necessary in this case 

    $query = sprintf(" 
    SELECT 
     COLUMN_NAME, 
     COLUMN_TYPE 
    FROM 
     INFORMATION_SCHEMA.COLUMNS 
    WHERE 
     TABLE_SCHEMA = '%s' 
     AND TABLE_NAME = '%s' 
", 
    mysql_real_escape_string($database), 
    mysql_real_escape_string($table) 
); 
$result = mysql_query($query) or die(mysql_error()); 
$name = array(); 
$type = array(); 
while(false!=($row=mysql_fetch_array($result))) { 
    //saving the column name and type in array 
    //because it's used in multiple places 
    //and we don't want to run the same query again 
    if(htmlspecialchars($row['COLUMN_NAME'])!='checklist_id'){ 
    $name[] = htmlspecialchars($row['COLUMN_NAME']); 
    $type[] = htmlspecialchars($row['COLUMN_TYPE']); 
    } 
} 

if(isset($_POST['submit'])) { 

     //We need to check if the user id already exists 
     //in the table, if it does, we will UPDATE, 
     //else INSERT a new record 
     $action = ''; 
     $sql = mysql_query("SELECT * FROM {$table} WHERE checklist_id={$user_id}"); 
     //if record for the user id is found, update action 
     //should take place else insert 
     $action = (mysql_num_rows($sql)>0)?'update':'insert'; 

     if($action=='insert'){ 
      //INSERT INTO checklist_stud_columns(`id` 
      $query_insert = "INSERT INTO {$table}(`id`"; 

      //INSERT INTO checklist_stud_columns(`id`,`col1`,`col2` 
      foreach($_POST['col'] as $val){ 
       $query_insert .= ",`{$val}`"; 
      } 

      //INSERT INTO checklist_stud_columns(`id`,`col1`,`col2`) 
      //VALES(1 
      $query_insert .= ") VALUES ({$id}"; 

      //INSERT INTO checklist_stud_columns(`id`,`col1`,`col2`) 
      //VALES(1,1,1 
      foreach($_POST['col'] as $val){ 
       $query_insert .= ",1"; 
      } 

      //INSERT INTO checklist_stud_columns(`id`,`col1`,`col2`) 
      //VALES(1,1,1) 
      $query_insert .= ")"; 

      //we have the insert query ready, now executing it 
      $result = mysql_query($query_insert) or die(mysql_error()); 
     } 
     elseif($action=='update'){ 

      if(isset($_POST['col'])){ 
       //the reason I'm checking if the $_POST['col'] is set is because, 
       //you may have checked previously and updated but now you want to 
       //uncheck all the options, in that case it's necessary 

       foreach($_POST['col'] as $val){ 

        //updating the checked values for that $user_id 
        $result = mysql_query("UPDATE checklist_stud_columns SET `{$val}`=1 WHERE checklist_id={$user_id}") or die(mysql_error()); 

       } 

       //this foreach is to check if you have any unchecked values 
       //that you had previously checked 
       $array_unchecked = array_diff($name,$_POST['col']); 
       foreach($array_unchecked as $val){ 
        $result = mysql_query("UPDATE checklist_stud_columns SET `{$val}`=0 WHERE checklist_id={$user_id}") or die(mysql_error()); 
       } 
      } 
      else 
      { 
       foreach($name as $val){ 
        $result = mysql_query("UPDATE checklist_stud_columns SET `{$val}`=0 WHERE checklist_id={$user_id}") or die(mysql_error()); 
       } 
      } 
     } 

     if(isset($_POST['col'])){ 
      //if you had checked atleast one checkbox 
      //display with it 
      foreach($name as $i=>$n){ 
       //Displaying all the checkboxes 
       //setting checked value to 'checked' if it was checked 
       //else setting it to empty '' 
       $checked = in_array($n,$_POST['col'])?'checked':''; 
       echo "<input type=\"checkbox\" name=\"col[]\" value={$n} {$checked}/>{$n} $type[$i]<br />"; 
      } 
     } 
     else { 
      foreach($name as $i=>$n){ 
       echo "<input type=\"checkbox\" name=\"col[]\" value={$n} />{$n} $type[$i]<br />"; 
      } 
     } 

    } 
    else{ 
     foreach($name as $i=>$n){ 
      //Another query that would tell us the value 
      //of that column for that $user_id 
      $query2 = mysql_query("SELECT {$n} FROM {$table} WHERE checklist_id={$user_id}") or die(mysql_error()); 

      //$query2 = mysql_query("SELECT `{$n}` FROM {$table} WHERE checklist_id={$user_id}") or die(mysql_error()); 
      if(mysql_num_rows($query2)!=0){ 
       $row2 = mysql_fetch_array($query2); 
       //if the value of that column for that $user_id is 1, 
       //set 'checked' else 'empty' 
       $checked = ($row2[$n]==1)?'checked':''; 
      } 
      else 
      { 
       $checked = ''; 
      } 
      //display all the checkboxes with 
      //the $checked value 
      echo "<input type=\"checkbox\" name=\"col[]\" value={$n} {$checked}/>{$n} $type[$i]<br />"; 
     } 
    } 
?> 
<tr><td colspan="2"><input type="submit" name="submit" value="Update Privileges" /></td></tr> 
</form> 
</html> 

注:

Please, don't use mysql_* functions in new code。他們不再維護and are officially deprecated。請參閱red box?請改爲了解prepared statements,並使用PDOMySQLi - this article將幫助您決定哪個。如果您選擇PDO,here is a good tutorial

+0

嗨,我想我讓你感到困惑,這個id還沒有放在桌子上,它會在提交後加入,一起與選中的列。 – user249563

+0

@ user249563所以它不是'UPDATE'查詢,而是'INSERT'? –

+0

是........... – user249563