Не выводятся данные из БД в форму
Представьте, что у меня есть страница, в левой части которой выводится список данных из БД, а справа имеется форма. У каждой строки этого списка есть кнопка "редактировать". При нажатии на нее данные этой строки должны выводиться в форму. У формы также есть кнопка "сохранить". Я могу изменить данные формы и при нажатии этой кнопки перезаписать их. Проблема в том, что при нажатии кнопки "редактировать" данные строки не выводятся в форму. Хотя если я прописываю в форме какие-то данные и нажимаю кнопку "сохранить", данные в БД действительно перезаписываются.
Вот код:
<?
$database = mysqli_connect('localhost', 'root', '', 'portfolio');
function get_articles($database) {
$sql2 = "SELECT * FROM articles";
$result2 = mysqli_query($database, $sql2);
$articles = mysqli_fetch_all($result2, MYSQLI_ASSOC);
return $articles; // подключаю бд
}
if (isset($_POST["slogan"])) {
if (isset($_GET['red'])) {
$sql = mysqli_query($database, "UPDATE `articles` SET `article` = '{$_POST['words']}',`head` = '{$_POST['slogan']}', `link` = '{$_POST['silka']}' WHERE `id`={$_GET['red']}");
} else {
$sql = mysqli_query($database, "INSERT INTO `articles` (`article`, `head`, `link`) VALUES ('{$_POST['words']}', '{$_POST['slogan']}', '{$_POST['silka']}')");
header('location: '.$_SERVER['HTTP_REFERER']);
exit;
}
} // если это режим редактирования, данные заменяются, если нет, то записываются в новую строку
if (isset($_GET['del'])) {
$sql = mysqli_query($database, "DELETE FROM `articles` WHERE `id` = {$_GET['del']}");
header('location: '.$_SERVER['HTTP_REFERER']);
exit; // код удаления
}
?>
<div class="fields">
<div class="edit-left">
<? foreach ($articles as $items): ?>
<div class="art">
<h3><?=$items['head'];?></h3>
<div class="buttons">
<? echo "<a href='?del={$items['id']}'>Удалить</a>"?>
<? echo "<a href='?red={$items['id']}'>Редактировать</a>"?>
</div>
</div>
<? endforeach; ?> // список строк из БД
</div>
<div class="edit-right">
<form id="sendwords" method="post"> // форма
<input tabindex="0" type="text" value="<?= isset($_GET['red']) ? $articles['head'] : ''; ?>" placeholder="Название статьи" id="slogan" name="slogan" autocomplete="off" class="slogan">
<textarea tabindex="0" rows="7" value="<?= isset($_GET['red']) ? $articles['article'] : ''; ?>" cols="50" type="text" id="words" autocomplete="off" name="words" class="words" autocomplete="off" placeholder="Текст статьи"></textarea>
<input tabindex="0" type="text" value="<?= isset($_GET['red']) ? $articles['link'] : ''; ?>" placeholder="Ссылка на источник" id="silka" name="silka" autocomplete="off" class="silka">
<div class="buttons">
<a href="?add=new">Режим создания</a>
<input tabindex="0" class="sohr" type="submit" id="redact" name="redact" value="Сохранить">
</div>
</form>
</div>
</div>
// если нажимаю "редактировать", собираются данные той строки, на которую на нажал
if (isset($_GET['red'])) {
$sql = mysqli_query($database, "SELECT `id`, `article`, `head`, `link` FROM `articles` WHERE `id`={$_GET['red']}");
$articles = mysqli_fetch_array($sql);
}
Ответы (1 шт):
У вас данные не будут попадать в форму потому что вы их нигде не не получаете. Там где у вас проверка if (isset($_GET['red'])) нужно получить данные статьи по ее id (SELECT * FROM ... WHERE id = $_GET['red']). Полученные данные записать в переменную $article. Далее где у вас html форма подставить нужные значения из переменной. Только исправьте $articles на $article в ваше форме. А в кнопке input type="submit" исправьте имя на name="save". Далее вставьте в нужном месте проверку на isset($_POST['save']) для выполнения обновления записи в БД. Но лучше редактирование записей сделать на отдельной странице (по другому урлу, например: http://mysite/articles/edit.php)