-2

如何从 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();
4

3 回答 3

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,但我相信这更有效。

于 2013-03-29T13:40:04.037 回答
0

$_POST["domaine"]是一个数组,因此将其“按原样”放置将导致数据库记录中的“数组”。您需要确定哪种类型的“array->string”方法最适合您的应用程序并在插入数据库之前使用它。

最简单的方法是使用join($sep, $_POST['domaine'])or serialize($_POST['domaine'])

于 2013-03-29T13:50:04.237 回答
-2
foreach ( $_POST["domaine"] as $aSelectedOption){
$rep=$cdb->prepare("insert into dev (cin,comp)values('$cin','".$aSelectedOption."') ");
$rep->execute();
}

这将为每个选中的选项插入一个条目

你也可以使用 json_encode 和 json_decode 虽然我不建议这样做。

于 2013-03-29T13:31:31.713 回答