以下のすべてのエラーのリストを表示したいのですが、一度に 1 つのエラーしか表示されません。コードにエラーのリストが表示されない理由を知っている人はいますか? 以下は、エラーを格納する配列を表示するコード、エラーがない場合に何が起こるかを示すコード、およびエラーがある場合に何が起こるかを示すコードです。
<?php
$getcourseid = (isset($_POST['courseid'])) ? $_POST['courseid'] : '';
$getcoursename = (isset($_POST['coursename'])) ? $_POST['coursename'] : '';
$getduration = (isset($_POST['duration'])) ? $_POST['duration'] : '';
$errors = array();
if (!$getcourseid){
$errors[] = "You must enter in Course's ID";
}else if (!$getcoursename){
$errors[] = "You must enter in Course's Name";
}else if (!$getduration){
$errors[] = "You must select Course's Duration";
}
if(!$errors) {
$insertsql = "
INSERT INTO Course
(CourseNo, CourseName, Duration)
VALUES
(?, ?, ?)
";
if (!$insert = $mysqli->prepare($insertsql)) {
// Handle errors with prepare operation here
}
$insert->bind_param("sss", $getcourseid, $getcoursename, $getduration);
$insert->execute();
if ($insert->errno) {
// Handle query error here
}
$insert->close();
// don't use $mysqli->prepare here
$query = "SELECT CourseNo FROM Course WHERE CourseNo = ?";
// prepare query
$stmt=$mysqli->prepare($query);
// You only need to call bind_param once
$stmt->bind_param("s",$getcourseid);
// execute query
$stmt->execute();
// get result and assign variables (prefix with db)
$stmt->bind_result($dbCourseId);
//get number of rows
$stmt->store_result();
$numrows = $stmt->num_rows();
}
if(empty($errors)) {
if ($numrows == 1){
$errormsg = "<span style='color: green'>Course " . $getcourseid . " - " . $getcoursename . " has been Created</span>";
$getcourseid = "";
$getcoursename = "";
$getduration = "";
}else{
$errormsg = "An error has occured, Course has not been Created";
}
} else {
if (count($errors) > 0)
{
foreach ($errors AS $Errors)
{
$errormsg = "{$Errors} <br>";
}
}
}
?>
**ADDITIONAL QUESTION:**
$form = "
<form action='" . htmlentities($_SERVER["PHP_SELF"]) . "' method='post'>
<table>
<tr>
<td></td>
<td id='errormsg'>$errormsg</td>
</tr>
<tr>
<td>Course ID:</td>
<td><input type='text' name='courseid' value='$getcourseid' /></td>
</tr>
<tr>
<td>Course Name:</td>
<td><input type='text' id='nameofcourse' name='coursename' value='$getcoursename' /></td>
</tr>
<tr>
<td>Duration (Years):</td>
<td>{$durationHTML}</td>
</tr>
<tr>
<td></td>
<td><input type='submit' value='Create Course' name='createbtn' /></td>
</tr>
</table>
</form>";
echo $form;
上記のフォームは、この質問の上部にある php コードの下にあります。今起こっていることは、検証エラーのリストがすべてフォームの上部に表示されていることです。しかし、私が本当に望んでいるのは、各検証エラーが参照しているフォーム機能の下にあることです。
たとえば、コース ID のテキスト入力を入力していない場合、コース ID のテキスト入力の"You must enter in Course's ID"
下に検証エラーを表示する必要があります。
コース名のテキスト入力を入力していない場合は、検証エラー"You must enter in Course's Name"
をコース名のテキスト入力の下に表示する必要があります。
これを行うには、コードで何を変更する必要がありますか?