Не срабатывает запрос на обновление

125
01 января 2021, 02:50

Помогите понять почему не работает редактирование и добавление? В форму данные передаю, но потом не срабатывает им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>

Answer 1

У вас в форме не передаётся 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);
READ ALSO
Как работает эта функция?

Как работает эта функция?

В офдокументации PHP есть пример использования функции sort

129
UTM-метки скрипт на php

UTM-метки скрипт на php

Дали тестовое задание стажера без разъяснений сути задания по utm-меткам, а инфы мало в интернетеТ

130
Ajax, точка в url

Ajax, точка в url

Что означает точка в адресе url обработчика?

138
strtotime не работает с точками

strtotime не работает с точками

Столкнулся с проблемой при использовании strtotime()Функция неправильно взаимодействует с точками

113