Как обновить значение флажка в базе данных
$fmcourse = $_POST['fm_courses'];
foreach($fmcourse as $fmc) {
$studentid = mysqli_real_escape_string($con, $_POST["id"]);
$sql = "UPDATE enrollments SET course_fk='$fmc' WHERE student_fk = '$studentid'";
}
var_dump(fmc)
выводит это
string(2) "18" string(2) "20" string(2) "22" string(2) "24" string(2) "26"
Когда я обновляю course_fk, повторяется один и тот же идентификатор во всех строках
+-----+------------+-----------+
| eid | student_fk | course_fk |
+-----+------------+-----------+
| 1 | 1 | 17 |
| 2 | 1 | 17 |
| 3 | 1 | 17 |
+-----+------------+-----------+
Я ищу это
+-----+------------+-----------+
| eid | student_fk | course_fk |
+-----+------------+-----------+
| 1 | 1 | 17 |
| 2 | 1 | 20 |
| 3 | 1 | 22 |
+-----+------------+-----------+
Приведенный ниже код проверяет, используя функцию record_exists(), если запись имеет дубликаты в таблице зачисления, если она есть, то код просто обновляет дубликаты соответственно. Если нет дубликатов, то он создает новую регистрационную запись для учащегося.
Обновленный код.
$fmcourse = $_POST['fm_courses'];
$student_id = $_POST["id"];
$batch_id = $_POST["name"];
delete_enrollments( $student_id, $batch_id );
foreach($fmcourse as $fmc) {
$course_id = $fmc;
if( record_exists( $student_id, $course_id, $batch_id ) == FALSE ) {
$stmt = mysqli_prepare($conn, "INSERT INTO enrollments (enrollment_id, student_id, course_id, batch_id, is_deleted, joining_date) VALUES( NULL, ?, ?, ?, 0, NOW() );");
$is_binded = mysqli_stmt_bind_param($stmt, "iii", $student_id, $course_id, $batch_id);
$is_exec = mysqli_stmt_execute($stmt);
mysqli_stmt_close($stmt);
}
else {
undelete_enrollment($student_id, $course_id, $batch_id);
}
}
function undelete_enrollment($student_id, $course_id, $batch_id) {
global $conn;
$stmt = mysqli_prepare($conn, "UPDATE enrollments SET is_deleted = 0, joining_date = NOW() WHERE student_id= ? AND course_id = ? AND batch_id = ?");
$is_binded = mysqli_stmt_bind_param($stmt, "iii", $student_id, $course_id,$batch_id);
$is_exec = mysqli_stmt_execute($stmt);
mysqli_stmt_close($stmt);
return $is_exec;
}
function record_exists( $student_id, $course_id, $batch_id ) {
global $conn;
$stmt = mysqli_prepare($conn, "SELECT COUNT(enrollment_id) as total FROM enrollments WHERE student_id= ? AND course_id = ? AND batch_id = ?");
$is_binded = mysqli_stmt_bind_param($stmt, "iii", $student_id, $course_id, $batch_id);
$is_exec = mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt);
$record = mysqli_fetch_assoc($result);
mysqli_stmt_close($stmt);
return ( isset( $record['total'] ) AND $record['total'] > 0 );
}
function delete_enrollments( $student_id, $batch_id ) {
global $conn;
$stmt = mysqli_prepare($conn, "UPDATE enrollments SET is_deleted = 1 WHERE student_id = ? AND batch_id =?;");
$is_binded = mysqli_stmt_bind_param($stmt, "ii", $student_id, $batch_id);
$is_exec = mysqli_stmt_execute($stmt);
mysqli_stmt_close($stmt);
return $is_exec;
}
Вам необходимо обновить свою запись в соответствии с eid
не как student_fk
Вам также нужен eid
. Поскольку ваше значение student_fk
повторяется. Он всегда обновляет последнее значение
Таким образом, ваше, where
состояния есть проблемы. Вам нужно добавить eid
вместо student_fk
Также убедитесь, что $eid
- разница для каждой строки.
$sql = "UPDATE enrollments SET course_fk ='$fmc' WHERE eid = '$eid'";
Также ваш код открыт для SQL-инъекции. Чтобы предотвратить это использование ПОДГОТОВЛЕННЫЕ ЗАЯВЛЕНИЯ
eid
.
eid
2, разве это не обновит ТОЛЬКО строку?
$_POST["id"]
это массив идентификаторов или одного идентификатора также удалить?'
Кавычки переменной в запросе , как это: -$sql = "UPDATE enrollments SET courseid=$fmc WHERE eid = $eid";
(сменитьeid
наeid
в WHERE CLAUSE)