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),所以列表的一半被存儲在表格中。
只是害怕這是否是正確的方法來做到這一點?並只存儲字符串(名稱)我能做什麼?
我建議將'serialize()'改爲'json_encode()'以便在數據庫中可讀。 – aldrin27
你的數據庫沒有被標準化 – Ceeee
將培訓對象的詳細信息保存在一個單獨的表中將是一個好主意。這將幫助您查詢和獲取與受訓者相關的數據 –