Помогите понять почему не работает редактирование и добавление? В форму данные передаю, но потом не срабатывает имeнно update. Возможно логика неверно выстроена?
<body>
<?php
$host = 'localhost';
$user = 'root';
$pass = '';
$db_name = 'blog';
$link = mysqli_connect($host, $user, $pass, $db_name); // Соединяемся с базой
if (!$link) {
echo 'Не могу соединиться с БД. Код ошибки: ' . mysqli_connect_errno() . ', ошибка: ' . mysqli_connect_error();
exit;
}
//Если переменная передана
if (isset($_POST["title"])) {
//Если это запрос на обновление, то обновляем
if (isset($_GET['red_id'])) {
$sql = mysqli_query($link, "UPDATE `articles` SET `title` = '{$_POST['title']}',`content` = '{$_POST['content']}',`date` = '{$_POST['date']}' WHERE `ID`={$_GET['red_id']}");
} else {
//Иначе вставляем данные, подставляя их в запрос
$sql = mysqli_query($link, "INSERT INTO `articles` (`title`, `content`,`date`) VALUES ('{$_POST['title']}', '{$_POST['content']}','{$_POST['date']}')");
}
//Если вставка прошла успешно
if ($sql) {
echo '<p>Успешно!</p>';
} else {
echo '<p>Произошла ошибка: ' . mysqli_error($link) . '</p>';
}
}
if (isset($_GET['del_id'])) { //проверяем, есть ли переменная
//удаляем строку из таблицы
$sql = mysqli_query($link, "DELETE FROM `articles` WHERE `ID` = {$_GET['del_id']}");
if ($sql) {
echo "<p>строка удалена.</p>";
} else {
echo '<p>Произошла ошибка: ' . mysqli_error($link) . '</p>';
}
}
//Если передана переменная red_id, то надо обновлять данные
if (isset($_GET['red_id'])) {
$sql = mysqli_query($link, "SELECT `ID`, `title`, `content`,`date` FROM `articles` WHERE `ID`={$_GET['red_id']}");
$article = mysqli_fetch_array($sql);
}
?>
<form action="" method="post">
<table>
<tr>
<td>Наименование:</td>
<td><input type="text" name="Name" value="<?= isset($_GET['red_id']) ? $article['title'] : ''; ?>"></td>
</tr>
<tr>
<td>Текст:</td>
<td><input type="text" name="content" value="<?= isset($_GET['red_id']) ? $article['content'] : ''; ?>"> </td>
</tr>
<tr>
<td>Дата:</td>
<td><input type="date" name="date" value="<?= isset($_GET['red_id']) ? $article['date'] : ''; ?>"></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="OK"></td>
</tr>
</table>
</form>
<table border='1'>
<tr>
<td>Идентификатор</td>
<td>Заголовок</td>
<td>Текст</td>
<td>Дата</td>
<td>Удаление</td>
<td>Редактирование</td>
</tr>
<?php
$sql = mysqli_query($link, 'SELECT `ID`, `title`, `content`,`date` FROM `articles`');
while ($result = mysqli_fetch_array($sql)) {
echo '<tr>' .
"<td>{$result['ID']}</td>" .
"<td>{$result['title']}</td>" .
"<td>{$result['content']} </td>" .
"<td>{$result['date']} </td>" .
"<td><a href='?del_id={$result['ID']}'>Удалить</a></td>" .
"<td><a href='?red_id={$result['ID']}'>Изменить</a></td>" .
'</tr>';
}
?>
</table>
<p><a href="?add=new">Добавить новую </a></p>
У вас в форме не передаётся title. Вместо этого вы передаёте параметр Name в поле Наименование. Должно быть name="title"
.
Вставлять в запросы данные получаемые от пользователя без обработки это прямой путь к получению SQL инъекции.
Используйте bind_param
https://www.php.net/manual/ru/mysqli-stmt.bind-param.php
Пример кода с UPDATE:
$stmt = mysqli_prepare($link,"UPDATE `articles` SET `title` = '?',`content` = '?',`date` = '?' WHERE `ID`=?");
mysqli_stmt_bind_param($stmt, 'sssi', $_POST['title'], $_POST['content'], $_POST['date'], $_POST['red_id']);
mysqli_stmt_execute($stmt);
mysqli_stmt_close($stmt);
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Дали тестовое задание стажера без разъяснений сути задания по utm-меткам, а инфы мало в интернетеТ
Столкнулся с проблемой при использовании strtotime()Функция неправильно взаимодействует с точками