Я работаю над таблицей флажков, представленные данные должны быть сохранены в базе данных 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;
}
}
}
}
?>
Я хочу сохранить несколько выбранных флажков в разных строках базы данных, и после отправки я хочу снова отобразить таблицу с отмеченными флажками, и пользователь должен иметь возможность выполнять проверки и снова отправлять данные.
Он по-прежнему сохраняет одно значение, когда я выбираю несколько, сохраняется последнее
«все еще» после внесения каких именно изменений?
Я имел в виду, что приведенный выше код сохраняет одну запись, даже с ошибками, о которых вы упомянули.
Можете ли вы напечатать именно такой код? сохранить несколько значений в одной отправке?
Для сохранения записей вы можете попробовать следующее:
<?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() );
}
}
?>
Можешь помочь и с другой частью?
какая "другая часть"?
Возможность редактировать и удалять записи... теперь, когда пользователь отправляет таблицу, страница должна загружать ту же таблицу с отмеченными флажками и возможностью вносить изменения и повторно отправлять ее.
Возможно, вам лучше задать новый вопрос с соответствующим кодом. «Другая часть», похоже, состоит из нескольких движущихся частей, все они довольно просты, но слишком широки, чтобы обновлять вышеизложенное и чтобы это все еще имело смысл в связи с первоначальным вопросом.
Привет, @RamRaider, не могли бы вы помочь с этим вопросом? - stackoverflow.com/questions/55579816/…
с какой частью у тебя проблемы? В его нынешнем виде не существует никакого механизма для редактирования/удаления элементов, и код в новом вопросе такой же, как и выше. Объясните, как вы хотите выполнить выбор, а затем редактирование (или удаление) элементов - querystring, form???
Используя редактирование, обновление и удаление sql, я хотел бы продолжить. На данный момент это просто сохранение данных, но в следующий раз, когда я загружу страницу, таблица снова будет пустой. Используя запросы sql, я хочу, чтобы она отображала отмеченные поля для значений в базе данных, а затем с редактированием и обновлением он должен сохранить вносит дальнейшие изменения и удаляет записи в базе данных, когда пользователь снимает флажок, а затем снова отображает обновленную таблицу.
Возможно, использование if и else в тех же функциях возможно? Если да, то как бы мы поместили это в тот же код.
Давайте продолжить обсуждение в чате.
execute(array( ':checked' => $checked))
Вы не используете связанный параметр:checked
и не определяете переменную$checked
. Честно говоря, я не ожидал, что будут вставлены строки Любые. Кроме того, вы начинаете транзакцию вне цикла, но фиксируете внутри цикла. Такой вид побеждает цель проведения транзакции.