Как отобразить флажок из базы данных в php? - PullRequest
0 голосов
/ 28 июня 2019

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

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

Вот код для вставки данных.

$active = "CourseReport";
require_once 'pages/header.php';
require_once './functions/schema-functions.php';
require_once './functions/report-functions.php';
$course = Schema::getCourseReport();
$objective = Schema::getObjective();
$goals = Schema::getGoals();
$mainobj = Schema::getMainObjectives();
$subobj = Schema::getSubObjectives();
 ?>

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

<table id="table1" class="table table-hover">

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

    <?php
    for ($y = 0; $y < count($goals); $y++) {           
        echo '<tr class="clickable"><th class="toggle">Goal#'.$goals[$y]['GoalId'].':'." " .' '.$goals[$y]['Goals'].'</th>

        </tr>';           
   ?>

    <?php
    for( $z = 0; $z < count($mainobj); $z++){
  if($mainobj[$z]['GoalId'] == $goals[$y]['GoalId']) {
        echo '<tr class="expander"><th class=row-header>Objective#'.$mainobj[$z]['MainObjId'].':'." ".' '.$mainobj[$z]['MainObjectives'].'</th>

    </tr>';
     ?>

    <?php

    for ($j = 0; $j< count($subobj); $j++) {
       if($mainobj[$z]['MainObjId'] == $subobj[$j]['MainObjId']){
       echo '<tr class="expander"><td class=row-header>'.$subobj[$j]['SubObjId'].' ) '.$subobj[$j]['SubObjectives'].' </td>';

   for ($x = 0; $x < count($course); $x++) {
      echo "<td><input name='check[]' type=checkbox value=c".$course[$x]->courseId."-o".$subobj[$j]['SubObjId']." id=checked></td>";
        }
        echo '</tr>';
    }
   }
  }
 }
}       
    ?>       
        </tbody>       
</table>
<button class="button" name= "submit" value= "Submit">Submit</button>

</form>

report-functions.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 ) {
                   echo '
        <script>
           alert("Error, please try submitting again. Error code 1");
           window.history.back();
        </script>';
                }
            }
            $conn->commit();
          echo '<script>
            alert("Report was submitted successfully.");
            window.location = ".../";
        </script>';
      }
    } catch( Exception $e ){
       $conn->rollback();
        exit( $e->getMessage() );
    }

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

Пожалуйста, прокомментируйте, если мне нужно предоставить какую-либо дополнительную информацию.

1 Ответ

1 голос
/ 28 июня 2019

Когда вы отображаете свою страницу (в своем первом разделе кода), в какой-то момент вы делаете это:

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

Значение установлено на:

value=c"c.$course[$x]->courseId."-o".$subobj[$j]['SubObjId']";

Это значениегде вы получаете проверенное или нет значение, которое вы упомянули в комментариях (например, c1-o1.1).

Верно.Поэтому, прежде чем сделать это echo, добавьте новое условие if.

$value = "c$course[$x]->courseId" . "-o$subobj[$j]['SubObjId']";
if (verify_checked($value)) {
    $checked_code = "checked=\"checked\"";
}
else {
    $checked_code = "";
}
echo "<td><input name='check[]' type=checkbox value=$value id=checked $checked_code ></td>";

Функция verify_checked(value) делает (из того, что я понимаю в вашей базе данных, вы сохраняете «расположение сетки» отмеченных элементов):

function verify_checked($value)
{
    // Connect to the database if needed
    // Perform: SELECT count($value) FROM Report
    // If the result is >0, return TRUE
    // Else return FALSE
}
  • Идеяздесь запрос к базе данных каждый раз, когда вы собираетесь повторить элемент <input>.
  • Примечание: для конкатенации текста я считаю более разборчивым ставить пробелы вокруг ., чтобы четко разделить то, что является частью текста и точкой конкатенации.
  • Как упоминалось ранее,отступ важен для понимания различных контекстов.Пока я не отступил в ваш код, я не понимал, как разные циклы работают по отношению к другим.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...