如何从HTML中选择多个
插入MySQL这是我的代码HTML:
<select name="domaine[]" id="domaine" class="validate[required]" multiple>
<option></option>
<option value="WEB">WEB</option>
<option value="Java2EE">Java2EE</option>
<option value="android">android</option>
<option value="VB.Net">VB.Net</option>
<option value="iOS">iOS</option>
<option value="C++">C++</option>
</select>
这是我的PHP代码:
try{
$cdb=new PDO('mysql:host=localhost;dbname=source', 'root','');
} catch (Exception $e){
die("erreur".$e->getMessage());
}
$cin=$_SESSION['cin'];
$rep=$cdb->prepare("insert into dev (cin,comp)values('$cin','".$_POST["domaine"]."')");
$rep->execute();
答案 0 :(得分:2)
您使用PDO非常好,但您的代码仍然容易受到攻击。 VALUES
需要多个参数。
if (isset($_POST['domaine']) && is_array($_POST['domaine'])) {
//(?,?),(?,?),(?,?) for 3 domaine
$values = implode(',', array_fill(0, count($_POST['domaine']), '(?,?)'));
$query = "INSERT INTO dev (cin, comp) VALUES $values";
$params = array();
foreach ($_POST['domaine'] as $d) {
array_push($params, $cin, $d);
}
$rep = $cdb->prepare($query);
$rep->execute($params);
}
您还可以prepare
一个INSERT
语句并循环遍历execute
,但我相信这会更有效。
答案 1 :(得分:0)
$_POST["domaine"]
是数组,因此将其“原样”放在数据库记录中会显示为“Array”。
您需要确定哪种类型的“array-&gt; string”方法最适合您的应用,并在插入数据库之前使用它。
最简单的方法是使用join($sep, $_POST['domaine'])
或serialize($_POST['domaine'])
。
答案 2 :(得分:-2)
foreach ( $_POST["domaine"] as $aSelectedOption){
$rep=$cdb->prepare("insert into dev (cin,comp)values('$cin','".$aSelectedOption."') ");
$rep->execute();
}
这将为每个选中的选项
插入一个条目你也可以使用json_encode和json_decode,虽然我不会建议它。