Мне нужно вставить много значений из флажка, но только последнее значение вставляется в базу данных.
HTML-код:
<?php
$conn = mysqli_connect("localhost", "root", "", "fix_in_time");
$result = mysqli_query($conn, "SELECT * FROM `material` WHERE id > 0");
while($row = mysqli_fetch_assoc($result)):?>
<input type = "checkbox" value = "<?php echo $row['tipo'];?>" name = "Tipo" id = "Tipo"><label><?php echo $row['tipo'];?></label><br>
<?php endwhile;?>
Есть PHP-КОД:
$Sala = mysqli_real_escape_string($conn, $_POST['Sala']);
$Descricao = mysqli_real_escape_string($conn, $_POST['Descricao']);
$Tipo = mysqli_real_escape_string($conn, $_POST['Tipo']);
$Data = date("d-m-Y H:i:s", strtotime('-1 hour'));
if (empty($_POST['Sala']) || empty($_POST['Descricao'])||
empty($_POST['Tipo'])){
echo"<script language='javascript' type='text/javascript'>alert('Por favor
preencha os campos!');window.location.href='../index.php';</script>";
exit();
}
if (isset($_POST['submit'])){
if (!empty($_POST['Tipo'])) {
foreach ((array)$Tipo as $Tipo) {
$query = "INSERT INTO `relatorios` (Data, Sala, Descricao, Tipo) VALUES ('$Data', '$Sala', '$Descricao', '$Tipo')";
mysqli_query($conn, $query);
}
}
}
Я немного нуб, только учусь xD
все еще вставляет только последнее значение
Измените атрибут имени вашего ввода с name = "Tipo" на name = "Tipo[]"
теперь ошибка: $Tipo = mysqli_real_escape_string($conn, $_POST['Tipo']);
Можете ли вы отредактировать свой вопрос и пропустить весь код PHP?
да, я сделаю это
есть редактирование кода






В вашем HTML-коде измените тег ввода на:
<input type = "checkbox" value = "<?php echo $row['tipo'];?>" name = "Tipo[]">.
Если вы добавите имя тега с [], то эта переменная сообщения в php будет массивом. Я удалил идентификатор тега, потому что он должен быть уникальным, не уверен, что он вам нужен, но если вы это сделаете, сделайте его уникальным.
И ваш php-код должен выглядеть примерно так:
if (isset($_POST['submit'])) {
if (!empty($_POST['Tipo']) && is_array($_POST['Tipo'])) {
foreach ($_POST['Tipo'] as $Tipo) {
$TipoEscaped = mysqli_real_escape_string($conn, $Tipo);
$query = "INSERT INTO `relatorios` (Tipo) VALUES ('$TipoEscaped')";
$success = mysqli_query($conn, $query);
if (!$success) {
//handle mysql error
}
}
}
}
Это работает, но нормально ли, что значения вставляются в разные строки, например, можно ли заставить их вставляться в одну строку?
Да, это возможно. Зависит от того, как вы хотите хранить Tipo в своей базе данных. Например, вы можете сохранить его как строку в кодировке json, вот так mysqli_real_escape_string($conn, json_encode($Tipo)). Или у вас может быть несколько столбцов для каждого значения Tipo, например. INSERT INTO `relatorios` (Data, Sala, Descricao, Tipo_01, Tipo_02, ...) VALUES ...
не работать с json_encode и использовать (Tipo_01,...) не очень хорошо для меня, потому что я выбираю из базы данных значения «типо», чтобы показать их на флажке! я нуб поправьте меня если я не прав
Если вы хотите использовать json_encode, вам не нужно перебирать значения Tipo, просто кодируйте весь массив. if (!empty($_POST['Tipo']) && is_array($_POST['Tipo'])) { $TipoEscaped = mysqli_real_escape_string($conn, json_encode($_POST['Tipo'])); $query = "INSERT INTO `relatorios` (Tipo) VALUES ('$TipoEscaped')"; }
Вы правы в том, что использование нескольких столбцов не будет работать, если эти значения извлекаются из базы данных и записываются туда динамически. Но если они являются статическими, известными значениями, вы можете сохранить их и в php, и это может работать.
Вы должны выполнять свой запрос в каждом цикле.