Всем привет.
Есть две таблицы
Таблица press
+-------+----------+------------+--------------+
| id | text | category |category_id |
+-------+----------+------------+--------------+
| | | | |
+-------+----------+------------+--------------+
Таблица category
+-------+----------+------------+
| id| name| img |
+-------+----------+------------+
| 12 | facebook| icon.png |
+-------+----------+------------+
| 13 | football | ball.png |
+-------+----------+------------+
Используя foreign key я связал ячейку category_id
таблицы press
с идентификатором (id
) другой таблицы (category
) чтобы при удалении категории также удалялась информация из другой таблицы press (сделал это я через phpmyadmin поставив on delete cascade
)
Вроде все сделал правильно ну вот никак не могу взять id
из таблицы category
чтобы добавить в другую таблицу press
в категорию category_id
if(isset($_POST["submit"])){ //при нажатии на кнопку submit
$press_text_area = $_POST["presstextarea"];
$category_select = $_POST["categoryselect"];
if(empty($press_text_area)){
$_SESSION["ErrorMessage"] = "all fields must be field up";
redirect_to("press.php");
exit;
} else if(strlen($press_text_area) < 5){ //name of category can't be 100 symbols cause in DB have a config
$_SESSION["ErrorMessage"] = "Press info should be at least 5 character's";
redirect_to("press.php");
exit;
} else {
global $db;
// тут мои несчастные попытки вязть идентификатор из таблицы и засунуть в переменную $post_id_from_url
$post_id_from_url = $_GET["id"];
// $category_id = $db->query("SELECT 'id' FROM `category` WHERE id='$post_id_from_url'");
$db = $db->execute("INSERT INTO `press` (text , category, category_id) VALUES('{$press_text}',
'{$category_select}','{$post_id_from_url}'");
if($db){
$_SESSION["SuccessMessage"] = "Press added succesfully";
redirect_to("press.php");
} else {
$_SESSION["ErrorMessage"] = "Something went wrong";
redirect_to("press.php");
}
}
}
Чтобы не у кого не было вопроса насчет этих $db
переменных я покажу файл DB.php
там все эти подключения
Class Database {
private $link;
public function __construct() {
$this->connect();
}
private function connect(){
$config = require_once "config.php";
$dsn = "mysql:host=".$config["host"].";dbname=".$config["db_name"].";";
$this->link = new PDO($dsn, $config["username"], $config["password"]);
return $this;
}
public function execute($sql){
$sth = $this->link->prepare($sql);
return $sth->execute();
}
public function query($sql){
$sth = $this->link->prepare($sql);
$sth->execute();
$result = $sth->fetchAll(PDO::FETCH_ASSOC);
if($result === false){
return [];
}
return $result;
}
}
$db = new Database();
Все в коде работает отлично .Только вот проблема у меня как получить идентификатор
Мои попытки
1.Как и наверху я пыталсья писать так.
$post_id_from_url = $_GET["id"];
// $category_id = $db->query("SELECT 'id' FROM `category` WHERE id='$post_id_from_url'");
2.Пыталсья извлечь напрямую таким образом
$category_id = $db->query("SELECT 'id' FROM `category`);
потом эту же переменную добавить как значения для ячейки category_id
3.пыталсья писать так
$category_id = $db->execute("SELECT 'id' FROM `category`);
И еще внизу страницы я получаю все данные из таблицы category включая id (но его не использую )и помещаю в тег select option чтобы выбрать категорию через селект и добавить контент.
после дня серфинга
Такой вывод
$rows = $db->query("SELECT id FROM `category`");
print_r($rows);
Показывает ассоциативный (всех id) массив полученный из БД но как добавить это как значение ?
И форма из которой должна добавлятсья информация .ВНутри select option-а выводитсья все информация из БД соответственно он берет имя каждой категории и идентификатор (которое мы не используем)
<form action="press.php" method="POST">
<fieldset>
<label for="categoryselect">Press Category:</label>
<select class="selectpicker" id="categoryselect" name="categoryselect">
<?php
global $db;
$rows = $db->query("SELECT * FROM `category`");
foreach ($rows as $row) {
$name = $row["name"];
$id = $row["id"];
?>
<option><?php echo $name; ?></option>
<?php } ?>
</select>
<label for="presstextarea">Press Text:</label>
<input class="pulse" type="text" name="presstextarea" id="presstextarea" placeholder="Press Text">
<button type="submit" name="submit">Add Press</button>
</fieldset>
</form>
Вы так и не смогли объяснить нам, что вы хотите, но тем не менее.
Как я вижу из формы, у вас есть select
с именем categoryselect
. При сабмите формы значение выбранной опции из этого селекта будет доступно в переменной $_POST["categoryselect"]
.
Так как у вас наполнение селекта происходит без указания аттрибута value
для каждого option
, естественно вам в качестве значения $_POST["categoryselect"]
возвращается что-то, отличное от ИД категории. Ну так измените вывод селекта, добавьте аттрибут value
:
<select class="selectpicker" id="categoryselect" name="categoryselect">
<?php
global $db;
$rows = $db->query("SELECT * FROM `category`");
foreach ($rows as $row) {
$name = $row["name"];
$id = $row["id"];
?>
<option value="<?php echo $id; ?>"><?php echo $name; ?></option>
<?php } ?>
</select>
Теперь, если вы в момент сабмита выведете $_POST["categoryselect"]
, то он будет содержать выбранное в селекте значение, которое заинсертится в таблицу.
Надеюсь, это вам поможет. А что такое $post_id_from_url = $_GET["id"];
так и осталось загадкой.
Дополнение: во-первых, вы должны понимать что сообщение Something went wrong
ни о чем вам не говорит. Требуется использовать функции для получения текстов ошибок. В PDO
это errorInfo
. Это поможет вам понимать что конкретно не так.
Далее, ваш запрос на вставку:
INSERT INTO `press` (text , category, category_id)
VALUES(
'{$press_text}',
'{$category_select}',
'{$post_id_from_url}'
)
Зачем вы ввели поле (привыкайте к терминологии, ячейки оставьте в Экселе) category
? У вас есть поле category_id
, его достаточно, поле category
можно удалить из таблицы press
. Запрос на вставку должен быть таким:
INSERT INTO `press` (`text`, category_id)
VALUES(
'{$press_text}',
'{$category_select}'
)
Замечания:
text
, так как в mysql есть тип данных с таким названием. Не допускайте чтобы служебные, а тем более зарезервированные слова mysql пересекались с вашими запросами.category
. Оно не требуется в таблице press
совсем.$press_text
будет содержаться кавычка '
, то в запросе обнаружится синтаксическая ошибка. Чтобы такого не было - начните сразу пользоваться подготовленными выражениями.Виртуальный выделенный сервер (VDS) становится отличным выбором
Я новичок в PHP и JSПишу некоторый скрипт, который передает запросы на два api