Справочники, инструменты, документация

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

Нам понадобится таблица MySql со следующими полями:

Название таблицы products с полями ID, Name, Price и установленное соединение с MySql.

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

Для начала нам необходимо создать обычную форму, в которую мы будем записывать данные, и после отправки формы, они будут записываться в таблицу 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>

Теперь в блок после подключения к БД добавим 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>