dbcenterというデータベースがあり、Coursesテーブルがあります。複数のコース名を同時に挿入するフォームがあります。しかし、送信するときは、空の行を1つだけ挿入します。これは私の入力フォームです:
<form action="COURSE.php" method="POST" enctype='multipart/form-data'>
<input type="text" name="listName[]" value="course 1">
<input type="text" name="listName[]" value="course 2">
<input type="text" name="listName[]" value="course 3">
<input type="submit" name="submit" value="insert">
</form>
そして私のPHPコード:
if(isset(filter_input_array(INPUT_POST)['submit'])){
$names[] = filter_input(INPUT_POST,'listName');
if(is_array($names)){
foreach ($names AS $key => $item){
$insertCourse = $con->prepare("INSERT INTO `courses`(`course_Name`)
VALUES ('$item')");
}
$insertCourse->execute();
if($insertCourse){
echo 'added';
}
}
else {
echo 'not array';
}
}
入力名listName []から[]を削除しようとしましたが、データは挿入されますが、最後のテキストボックスのみが挿入されます。誰でもこれで私を助けることができますか?
入力のフィルタリングにエラーがあります。
execute()
foreachループ内にある必要があります。
また、ユーザー入力を信頼しないでください。パラメーター化されたクエリを使用するか、でエスケープしてmysqli::real_escape_string()
、ユーザー入力が適切にエスケープされるようにしてください。
if(isset(filter_input_array(INPUT_POST)['submit'])){
$names = filter_input_array(INPUT_POST)['listName'];
if(is_array($names)){
$insertCourse = $con->prepare("INSERT INTO `courses`(`course_Name`)
VALUES (?)");
$insertCourse->bind_param("s", $item);
foreach ($names AS $key => $item){
$res = $insertCourse->execute();
if($res){
echo 'added<br>';
}
}
$insertCourse->close();
}
else {
echo 'not array';
}
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加