<button class="form-btn primary-default-btn transparent-btn">Add</button>
$stmt = pdo()->prepare("SELECT * FROM `shop` WHERE `id` = :id");
$stmt->execute();
$shop_id_inserted = $stmt;
$conn; // для соединения нужно ...
pdo(); // для соединения нужно назначить режим NO_AUTO_COMMIT, чтобы при каждом выполнении запроса не происходило фиксации транзакции, пока не будет выполнена вся цепочка запросов, чтобы соблюсти консистентность данных
$stmt = pdo()->prepare("INSERT INTO `faucets` (`name`, `url`,
--`category_id`, -- в таблицу faucets не вставляем категорию!
`time`) VALUES (:name, :url, :time)");
$stmt->execute([
'name' => $_POST['name'],
'url' => $_POST['url'],
'time' => $_POST['time'],
]);
$faucet_id_inserted = /*считать вставленный id записи из faucets, метод зависит от вида СУБД */;
// убеждаемся, что пост-параметр category_id существует, он массив, и в нем есть элементы
if(isset($_POST['category_id']) && is_array($_POST['category_id']) && count($_POST['category_id']) > 0)
{
foreach($_POST['category_id'] as $category_id)
{
// вставляем категории в промежуточную таблицу для хранения выбранных категорий
$stmt = pdo()->prepare("INSERT INTO `faucet_category` (`faucet_id`, `category_id`) VALUES (:faucet_id, :category_id)");
$stmt->execute([
'faucet_id' => $faucet_id_inserted,
'category_id' => $category_id]);
}
pdo()->query('commit'); // все категории вставили, консистентность данных достигнута, можно фиксировать транзакцию
}
else
{
pdo()->query('rollback'); //нет выделенных категорий, если они обязательны, то нужно откатить вставку записи в таблицу faucets. Если нет, то else нужно не использовать
// генерируем сообщение об ошибке, если нужно
}
Помимо штатных утилит в установщиках Linux и Windows есть утилиты отладки через командную строку (если вы бы имели опыт работы с такой утилитой, то вряд ли бы задавали вопрос).
Еще вариант, взять загрузочный диск Acronis Disk Director - он тоже покажет состояние разделов в удобном графическом виде, даже можно кое-чего подправить в загрузчике, но не все.