在我的申请表中,我有表格输入将要在办公室举行的培训课程的详细信息。因此,我将所有细节存储在“培训”中。表。但是,在那一栏中,作为'实习生',我必须填写多个名字。我在html中使用了多个选择选项,我在数组中获取所有名称。然后我将其保存在数据库中。我将该阵列分类并存储在那里。但只是我想存储名称。我必须得到任何特定受训者的报告,所以我必须在其他一些页面再次获得实习生名单。就在下面我展示了我的表结构和php编码。
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 :(得分:1)
我认为将受训者数据保存在不同的表中并在训练表中使用该受训者ID会很好。 Google for Database Normalization。它将为您提供如何构建数据库的想法。