Обновление флажка в базе данных MySQL

0

Как обновить значение флажка в базе данных

$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 |
+-----+------------+-----------+
  • 0
    $_POST["id"] это массив идентификаторов или одного идентификатора также удалить? ' Кавычки переменной в запросе , как это: - $sql = "UPDATE enrollments SET courseid=$fmc WHERE eid = $eid"; (сменить eid на eid в WHERE CLAUSE)
  • 0
    один идентификатор Студенческий билет.
Показать ещё 14 комментариев
Теги:
mysqli

2 ответа

1
Лучший ответ

Приведенный ниже код проверяет, используя функцию 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;
    }
  • 0
    Я не пробовал Подготовленное заявление до сих пор. Попробую твое.
  • 0
    Кажется, что запись обновляется в базе данных, как мне удалить значение из базы данных. Если пользователь снимает флажок с опции, он должен удалить строку.
Показать ещё 6 комментариев
0

Вам необходимо обновить свою запись в соответствии с eid не как student_fk

Вам также нужен eid. Поскольку ваше значение student_fk повторяется. Он всегда обновляет последнее значение

Таким образом, ваше, where состояния есть проблемы. Вам нужно добавить eid вместо student_fk Также убедитесь, что $eid - разница для каждой строки.

$sql = "UPDATE enrollments SET course_fk ='$fmc' WHERE eid = '$eid'";

Также ваш код открыт для SQL-инъекции. Чтобы предотвратить это использование ПОДГОТОВЛЕННЫЕ ЗАЯВЛЕНИЯ

  • 0
    Я обновил код eid .
  • 0
    Если eid отличается, то как вы обновите course_fk, используя student_fk. Скажем, я смотрю на eid 2, разве это не обновит ТОЛЬКО строку?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню