Запись данных в MySql на PHP
TimeWeb

Запись данных в MySql на PHP

Назад к списку уроков

Подготовка таблицы

Данный урок выполняется на основе (после выполнения) уроков "Создание базы данных и таблицы с товарами"> и "Вывод данных из MySql на PHP">. А именно, из этих уроков нам понадобится:

Создание формы для добавления записей

Для начала нам необходимо создать обычную форму, в которую мы будем записывать данные, и после отправки формы, они будут записываться в таблицу MySql.

Создадим новую страницу, к примеру "product_admin.php" с установленным соединением с БД:

<!doctype html>
<html lang="ru">
<head>
  <title>Админ-панель</title>
</head>
<body>
  <?php
    $host = 'localhost';  // Хост, у нас все локально
    $user = 'user_bd';    // Имя созданного вами пользователя
    $pass = '1q2w3e4r5t'; // Установленный вами пароль пользователю
    $db_name = 'my_db';   // Имя базы данных
    $link = mysqli_connect($host, $user, $pass, $db_name); // Соединяемся с базой

    // Ругаемся, если соединение установить не удалось
    if (!$link) {
      echo 'Не могу соединиться с БД. Код ошибки: ' . mysqli_connect_errno() . ', ошибка: ' . mysqli_connect_error();
      exit;
    }
  ?>
</body>
</html>

Теперь в блок <body></body> после подключения к БД добавим HTML форму:

<form action="" method="post">
  <table>
    <tr>
      <td>Наименование:</td>
      <td><input type="text" name="Name"></td>
    </tr>
    <tr>
      <td>Цена:</td>
      <td><input type="text" name="Price" size="3"> руб.</td>
    </tr>
    <tr>
      <td colspan="2"><input type="submit" value="OK"></td>
    </tr>
  </table>
</form>

Обработка (вставка) полученных из формы данных

После того, как данные из формы будут отправлены, их надо принять и записать в таблицу БД.

Давайте првоерим, переданы ли данные и, если переданы, то сохраним их. Этот код лучше вставить перед формой, но после подключения к БД:

<?php
  //Если переменная Name передана
  if (isset($_POST["Name"])) {
    //Вставляем данные, подставляя их в запрос
    $sql = mysqli_query($link, "INSERT INTO `products` (`Name`, `Price`) VALUES ('{$_POST['Name']}', '{$_POST['Price']}')");
    //Если вставка прошла успешно
    if ($sql) {
      echo '<p>Данные успешно добавлены в таблицу.</p>';
    } else {
      echo '<p>Произошла ошибка: ' . mysqli_error($link) . '</p>';
    }
  }
?>

Теперь после отправки формы в таблице у вас должна появиться новая срока - новый товар.

Никогда без проверок принятых переменных не вставляйте данные напрямую в базу данных. В этом случае вас будет очень легко взломать. Подробнее об этом в google: о sql инъекциях. Но поскольку мы только учимся, и усложнять все незачем, то мы будем делать так :)

Удаление строк из Mysql

Давайте попробуем вывести все товары, а рядом с каждым товаром кнопку удалить (код вставляем в самый низ страницы перед тегом </body>):

<?php
  //Получаем данные
  $sql = mysqli_query($link, 'SELECT `ID`, `Name` FROM `products`');
  while ($result = mysqli_fetch_array($sql)) {
      echo "{$result['ID']}) {$result['Name']} - <a href='?del={$result['ID']}'>Удалить</a><br>";
  }
?>

Теперь перед выводом товаров нам следует проверить, а не была ли передана переменная на их удаление, и если была, то удалить товар:

<?php
  //Удаляем, если что
  if (isset($_GET['del'])) {
    $sql = mysqli_query($link, "DELETE FROM `products` WHERE `ID` = {$_GET['del']}");
    if ($sql) {
      echo "<p>Товар удален.</p>";
    } else {
      echo '<p>Произошла ошибка: ' . mysqli_error($link) . '</p>';
    }
  }
?>

Попробуйте доработать данный пример и сделать самим редактирование данных о товаре. Путей решения много. Один из них: рядом со ссылкой "Удалить" добавляем "Редактировать", при клике по которой передаем переменную "red". Перед отрисовкой формы проверяем, а нет ли этой переменной, и если есть, то извлекаем и подставляем данные в форму. Перед новой вставкой, если все еще есть "red", то делаем UPDATE, а не INSERT. Дерзайте ;)

Ну и для самых лентяев! Готовый код с редактирвоанием данных в таблице ниже.

Полный листинг кода

<!doctype html>
<html lang="ru">
<head>
  <title>Админ-панель</title>
</head>
<body>
  <?php
    $host = 'localhost';  // Хост, у нас все локально
    $user = 'user_bd';    // Имя созданного вами пользователя
    $pass = '1q2w3e4r5t'; // Установленный вами пароль пользователю
    $db_name = 'my_db';   // Имя базы данных
    $link = mysqli_connect($host, $user, $pass, $db_name); // Соединяемся с базой

    // Ругаемся, если соединение установить не удалось
    if (!$link) {
      echo 'Не могу соединиться с БД. Код ошибки: ' . mysqli_connect_errno() . ', ошибка: ' . mysqli_connect_error();
      exit;
    }

    //Если переменная Name передана
    if (isset($_POST["Name"])) {
      //Если это запрос на обновление, то обновляем
      if (isset($_GET['red'])) {
        $sql = mysqli_query($link, "UPDATE `products` SET `Name` = '{$_POST['Name']}',`Price` = '{$_POST['Price']}' WHERE `ID`={$_GET['red']}");
      } else {
        //Иначе вставляем данные, подставляя их в запрос
        $sql = mysqli_query($link, "INSERT INTO `products` (`Name`, `Price`) VALUES ('{$_POST['Name']}', '{$_POST['Price']}')");
      }

      //Если вставка прошла успешно
      if ($sql) {
        echo '<p>Успешно!</p>';
      } else {
        echo '<p>Произошла ошибка: ' . mysqli_error($link) . '</p>';
      }
    }

    //Удаляем, если что
    if (isset($_GET['del'])) {
      $sql = mysqli_query($link, "DELETE FROM `products` WHERE `ID` = {$_GET['del']}");
      if ($sql) {
        echo "<p>Товар удален.</p>";
      } else {
        echo '<p>Произошла ошибка: ' . mysqli_error($link) . '</p>';
      }
    }

    //Если передана переменная red, то надо обновлять данные. Для начала достанем их из БД
    if (isset($_GET['red'])) {
      $sql = mysqli_query($link, "SELECT `ID`, `Name`, `Price` FROM `products` WHERE `ID`={$_GET['red']}");
      $product = mysqli_fetch_array($sql);
    }
  ?>
  <form action="" method="post">
    <table>
      <tr>
        <td>Наименование:</td>
        <td><input type="text" name="Name" value="<?= isset($_GET['red']) ? $product['Name'] : ''; ?>"></td>
      </tr>
      <tr>
        <td>Цена:</td>
        <td><input type="text" name="Price" size="3" value="<?= isset($_GET['red']) ? $product['Price'] : ''; ?>"> руб.</td>
      </tr>
      <tr>
        <td colspan="2"><input type="submit" value="OK"></td>
      </tr>
    </table>
  </form>
  <?php
  //Получаем данные
  $sql = mysqli_query($link, 'SELECT `ID`, `Name`, `Price` FROM `products`');
  while ($result = mysqli_fetch_array($sql)) {
    echo "<p>{$result['ID']}) {$result['Name']} - {$result['Price']} ₽ - <a href='?del={$result['ID']}'>Удалить</a> - <a href='?red={$result['ID']}'>Редактировать</a></p>";
  }
  ?>
  <p><a href="?add=new">Добавить новый товар</a></p>
</body>
</html>

<- Вывод данных из MySql на PHP Редактирование данных в MySql с помощью PHP (админ-панель) ->