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

Я работаю над таблицей флажков, представленные данные должны быть сохранены в базе данных mysql. В таблице есть два столбца: идентификатор автоинкремента и еще один для сохранения значений флажка.

В настоящее время он сохраняет только одно значение за раз, даже когда я выбираю несколько, сохраняется только последнее. Вот код:

report.php

<?php


$active = "report";
require_once 'pages/header.php';
require_once './functions/schema-functions.php';

$course = Schema::getCourse();
$objective = Schema::getObjective();
?>




<form id = "addReport" action ='./functions/report-functions.php' method = "post">

<table id = "table1" class = "table">
    <?php
    echo '<tr><th>Objectives</th>';
    for ($i = 0; $i < count($course); $i++) {
        echo '<th id = "rotate1">'. $course[$i]->commonName . '</th>';            
    }
    echo '</tr>';

    for ($y = 0; $y < count($objective); $y++) {
        echo '<tr><th class=row-header>'.$objective[$y]->objective.'</th>';

    for ($x = 0; $x < count($course); $x++) {

        echo "<td><input name='check[]' type=checkbox value=c".$course[$x]->courseId."-o".$objective[$y]->objectiveId." id=checked></td>";

        }
        echo '</tr>';
    }
    ?>

</table>
<input type = "submit" name= "submit" value= "Submit"/>

отчет-functions.php

<?php


 require_once 'db-connect.php';

if (isset($_POST['submit'])){
{


$conn = DatabaseConnection::getConnection();
    $conn->beginTransaction();
    if (isset($_POST['check'])){
   foreach($_POST['check'] as $value){
    $sql = $conn->prepare("INSERT INTO Report (ColRow) VALUES 
 ('$value')");
  }
    if ($sql->execute(array( ':checked' => $checked))) {
        $conn->commit();
        return true;
    } else {
        $conn->rollback();
        return false;
    }

   }
   }
   }
    ?>

Я хочу сохранить несколько выбранных флажков в разных строках базы данных, и после отправки я хочу снова отобразить таблицу с отмеченными флажками, и пользователь должен иметь возможность выполнять проверки и снова отправлять данные.

execute(array( ':checked' => $checked)) Вы не используете связанный параметр :checked и не определяете переменную $checked. Честно говоря, я не ожидал, что будут вставлены строки Любые. Кроме того, вы начинаете транзакцию вне цикла, но фиксируете внутри цикла. Такой вид побеждает цель проведения транзакции.
Patrick Q 08.04.2019 16:46

Он по-прежнему сохраняет одно значение, когда я выбираю несколько, сохраняется последнее

AAM 08.04.2019 17:01

«все еще» после внесения каких именно изменений?

Patrick Q 08.04.2019 17:11

Я имел в виду, что приведенный выше код сохраняет одну запись, даже с ошибками, о которых вы упомянули.

AAM 08.04.2019 17:14

Можете ли вы напечатать именно такой код? сохранить несколько значений в одной отправке?

AAM 08.04.2019 17:17
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
5
814
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Для сохранения записей вы можете попробовать следующее:

<?php

    if ( isset( $_POST['submit'], $_POST['check'] ) ){
        try{

            require_once 'db-connect.php';
            $conn = DatabaseConnection::getConnection();


            $sql='insert into `report`  ( `colrow` ) values ( :value )';
            $stmt = $conn->prepare( $sql );



            if ( $stmt ){

                $conn->beginTransaction();

                foreach( $_POST['check'] as $index => $value ) {
                    $result = $stmt->execute( [ ':value' => $value ] );
                    if ( !$result ) {
                        throw new Exception( sprintf( 'Failed to execute query %d for %s', $index, $value ) );
                    }
                }

                $conn->commit();
                exit();
            }
        }catch( Exception $e ){
            $conn->rollback();
            exit( $e->getMessage() );
        }
    }
?>

Можешь помочь и с другой частью?

AAM 08.04.2019 17:21

какая "другая часть"?

Professor Abronsius 08.04.2019 19:21

Возможность редактировать и удалять записи... теперь, когда пользователь отправляет таблицу, страница должна загружать ту же таблицу с отмеченными флажками и возможностью вносить изменения и повторно отправлять ее.

AAM 08.04.2019 19:57

Возможно, вам лучше задать новый вопрос с соответствующим кодом. «Другая часть», похоже, состоит из нескольких движущихся частей, все они довольно просты, но слишком широки, чтобы обновлять вышеизложенное и чтобы это все еще имело смысл в связи с первоначальным вопросом.

Professor Abronsius 08.04.2019 20:24

Привет, @RamRaider, не могли бы вы помочь с этим вопросом? - stackoverflow.com/questions/55579816/…

AAM 09.04.2019 16:19

с какой частью у тебя проблемы? В его нынешнем виде не существует никакого механизма для редактирования/удаления элементов, и код в новом вопросе такой же, как и выше. Объясните, как вы хотите выполнить выбор, а затем редактирование (или удаление) элементов - querystring, form???

Professor Abronsius 09.04.2019 16:28

Используя редактирование, обновление и удаление sql, я хотел бы продолжить. На данный момент это просто сохранение данных, но в следующий раз, когда я загружу страницу, таблица снова будет пустой. Используя запросы sql, я хочу, чтобы она отображала отмеченные поля для значений в базе данных, а затем с редактированием и обновлением он должен сохранить вносит дальнейшие изменения и удаляет записи в базе данных, когда пользователь снимает флажок, а затем снова отображает обновленную таблицу.

AAM 09.04.2019 16:37

Возможно, использование if и else в тех же функциях возможно? Если да, то как бы мы поместили это в тот же код.

AAM 09.04.2019 16:38

Давайте продолжить обсуждение в чате.

AAM 09.04.2019 21:48

Другие вопросы по теме