У меня есть selected при выборе добавляет к записи id выбранного(ых) магазинов
country_id[]
.
<form class="sign-up-form form" action="do_addshop.php" method="post">
<label class="form-label-wrapper">
<p class="form-label">Faucet Category</p>
<select name="country_id[]" form="data" multiple>
<?php
// Получим данные категорий
$stmt = pdo()->prepare("SELECT * FROM `country`");
$stmt->execute();
foreach($stmt as $row){
echo "<option value=". $row["id"] . "selected>" . $row["name"] . "</option>";
}
?>
</select>
</label>
<label class="form-label-wrapper">
<p class="form-label">Name Shop</p>
<input class="form-input" type="text" placeholder="Enter name shop" id="name" name="name" required>
</label>
<label class="form-label-wrapper">
<p class="form-label">Image Url</p>
<input class="form-input" type="text" placeholder="Enter img url" id="img" name="img" required>
</label>
<button class="form-btn primary-default-btn transparent-btn">Add</button>
</form>
Добавление записи
<?php
require_once __DIR__.'/boot.php';
// Проверим, не занято ли название
$stmt = pdo()->prepare("SELECT * FROM `shop` WHERE `name` = :name");
$stmt->execute(['name' => $_POST['name']]);
if ($stmt->rowCount() > 0) {
flash('Этот магазин уже существует.');
header('Location: addshop.php'); // Возврат на форму регистрации
die; // Остановка выполнения скрипта
}
// Добавим магазин в базу
$stmt = pdo()->prepare("INSERT INTO `shop` (`name`, `img`) VALUES (:name, :img)");
$stmt->execute([
'name' => $_POST['name'],
'img' => $_POST['img'],
]);
$stmt = pdo()->lastInsertId();
$shop_id_inserted = $stmt; /*считать вставленный id записи из shop, метод зависит от вида СУБД */
// убеждаемся, что пост-параметр country_id существует, он массив, и в нем есть элементы
if(isset($_POST['country_id']) && is_array($_POST['country_id']) && count($_POST['country_id']) > 0)
{
foreach($_POST['country_id'] as $country_id)
{
// вставляем категории в промежуточную таблицу для хранения выбранных категорий
$stmt = pdo()->prepare("INSERT INTO `country_shop` (`country_id`, `shop_id`) VALUES (:country_id, :shop_id)");
$stmt->execute([
'country_id' => $country_id,
'shop_id' => $shop_id_inserted]);
}
pdo('commit'); // все категории вставили, консистентность данных достигнута, можно фиксировать транзакцию
}
else
{
pdo('rollback'); //нет выделенных категорий, если они обязательны, то нужно откатить вставку записи в таблицу faucets. Если нет, то else нужно не использовать
// генерируем сообщение об ошибке, если нужно
}
При проверке
var_dump($country_id);
мне приходит массив с значением
NULL
.
При проверке
var_dump($shop_id_inserted);
приходит
id
последней записи.
При проверке
var_dump(pdo()->errorInfo());
приходит
array(3) { [0]=> string(5) "00000" [1]=> NULL [2]=> NULL }