-2

HTML select multiple から 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'])またはを使用すること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 に答える