2016-03-02 132 views
2

在我的應用程序中,我有用於輸入將在辦公室舉行的培訓會議的詳細信息的表單。所以我將所有的細節存儲在'訓練'表中。但是,在那裏,一列作爲'受訓者',因爲我必須填寫多個名稱。我在html中使用了多個選擇選項,並且即時獲取數組中的所有名稱。然後我將它保存在數據庫中。 Im將這個數組排列並存儲在那裏。但只是我想存儲名稱。 Furthur,我必須得到任何特定學員的報告,所以我必須在其他一些頁面再次獲得學員名單。就在下面,我用我的表格結構和php編碼。將數組值存儲在單列MySQL數據庫中

CREATE TABLE `training` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `type` varchar(45) DEFAULT NULL, 
    `category` varchar(45) DEFAULT NULL, 
    `course` varchar(45) DEFAULT NULL, 
    `trainee` varchar(45) DEFAULT NULL, 
    `trainer` varchar(45) DEFAULT NULL, 
    `startdate` date DEFAULT NULL, 
    `enddate` varchar(45) DEFAULT NULL, 
    `venue` varchar(45) DEFAULT NULL, 
    `status` varchar(45) DEFAULT NULL, 
    `comments` varchar(100) DEFAULT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1; 

窗體控件選擇多個學員:

<div class="form-group"> 
    <label for="tr" class="control-label col-md-2">Trainee</label>  
    <div class="col-md-4"> 
      <select multiple="multiple" id="trainee" name="tr[]" > 
      <?php foreach($empresult as $row){ ?> 
      <option><?php echo $row['first_name']?></option> 
      <?php } ?> 
     </select>  
    </div> 
</div> 

數據庫代碼:

 $data= $_POST['tr']; 
     $trainees= serialize($data); 

     $cat=$_REQUEST['cat']; 
     $course=$_REQUEST['course']; 
     $venue=trim($_REQUEST['venue']);    
     $ins=$_REQUEST['ins']; 
     $start=$_REQUEST['startdt']; 
     $end=$_REQUEST['enddt'];    
     $typ=$_REQUEST['type']; 
     $stat=$_REQUEST['stat']; 
     $cmt=$_REQUEST['cmt'];  

    $sql = "INSERT INTO training(type,category,course,trainee,trainer,startdate,enddate,venue,status,comments) VALUES " . "(:type,:category,:course,:trainee,:trainer,:startdate,:enddate,:venue,:status,:comments)";  
    try {    
      $stmt = $DB->prepare($sql);   
      // bind the values 
      $stmt->bindValue(":type", $typ); 
      $stmt->bindValue(":category", $cat); 
      $stmt->bindValue(":course", $course); 
      $stmt->bindValue(":trainee", $trainees);  
      $stmt->bindValue(":trainer", $ins); 
      $stmt->bindValue(":startdate", $start); 
      $stmt->bindValue(":enddate", $end); 
      $stmt->bindValue(":venue", $venue); 
      $stmt->bindValue(":status", $stat); 
      $stmt->bindValue(":comments", $cmt);  
      $stmt->execute(); 
      } 
     } 
     catch (Exception $ex) 
     {   
      $_SESSION["errorMsg"] = $ex->getMessage();    
     } 

在數據庫中得到它保存爲:

a:4:{i:0;s:7:"Anu1234";i:1;s:11:"UmaSri12345" 

我選擇了四款學員,因爲我設置了trainee-varchar(45),所以列表的一半被存儲在表格中。

只是害怕這是否是正確的方法來做到這一點?並只存儲字符串(名稱)我能做什麼?

+0

我建議將'serialize()'改爲'json_encode()'以便在數據庫中可讀。 – aldrin27

+2

你的數據庫沒有被標準化 – Ceeee

+2

將培訓對象的詳細信息保存在一個單獨的表中將是一個好主意。這將幫助您查詢和獲取與受訓者相關的數據 –

回答

1

我認爲將學員數據保存在不同的表中並在訓練表中使用該學員ID會很好。 Google for Database Normalization。它會讓你知道如何構建數據庫。