2016-10-14 7 views
0

私は配列であると想定されるデータを格納しましたが、最後にチェックされたチェックボックスだけがidSkillsに登録されています。これは、スキルは、ここでデータベースPHPは他のチェックされたチェックボックスを読み取ることができません

<?php 
    $i=0; 
    while ($row = mysqli_fetch_assoc($result)) { 
     $id=$row['id']; 
     $skillName=$row['skillName']; 
?> 
     <input type="checkbox" name="skills[]" value="<?php echo $id; ?>"><?php echo $skillName; ?><br> 
<?php 
     $i++; 
    } 
?> 

にクエリを介して表示されたコードの一部は、ループはそれが最善だろう選択チェックボックス

//QUERY TO INSERT 
$conn = new mysqli($config['servername'], $config['username'], $config['password'], $config['database']);  

$idSkills = $_GET['skills']; 
if(empty($idSkills)) 
{ 
    echo("You didn't select any buildings."); 
} 
else 
{ 
    $N = count($idSkills); 

    echo("You selected $N door(s): "); 
    echo("$idSkills[1] "); 
    for($i=0; $i < $N; $i++) { 
     echo "Skill ID: " 
     $sql = "INSERT INTO volunteer_skills (idskill,idVolunteer) 
       VALUES ('$idSkills[$i]','$idVolunteer')"; 
     $result = $conn->query($sql); 
    } 
} 
$conn->close(); 
+0

echo '$ sql'と表示され、エラーが表示されます。 "Array [0] ..."と言うかもしれません。また、クエリ内でGETパラメータを使用すると、ユーザはデータベース全体にアクセスできます。あなたは値をエスケープする必要があります。 SQL注入を参照してください – Ibu

+1

複数のチェックボックスを選択すると 'var_dump($ idSkills); @ibu OPはimhoをエスケープしないで、準備された文を使うべきです – DarkBee

+0

'for'の代わりに' foreach'ループを使うのはどうですか? – Barmar

答えて

0

のすべてを明らか一部ですSQLに変数を代入する代わりに、準備されたステートメントを使用してください。あなたは、このようにそれをやろうとしている場合しかし、あなたは正しい構文を使用する必要があります。

$sql = "INSERT INTO volunteer_skills (idskill,idVolunteer) 
      VALUES ('{$idSkills[$i]}','$idVolunteer')"; 

あなたは評価されるべきカッコ内の変数を取得するために、配列参照の周り{}を配置する必要があります。 複合語(中括弧)構文のPHP Stringsのマニュアルを参照してください。

+0

あなたはここで間違っているようです。[example](http://ideone.com/b4gRAP) – DarkBee

+0

うわー、そうです。私はいつも単純な構文ではインデックスを評価しないと思っていました。なぜなら、式をそこに置くことはできないからです。連想配列要素にアクセスするには引用符を省略しなければなりません。しかし、それは明らかにインデックス内の単一の変数を許可します。この詳細については、ドキュメントは完全に静かです。 – Barmar

関連する問題