В MySQL для обновления применяется sql-команда UPDATE:
UPDATE Таблица SET столбец1 = значение1, столбец2 = значение2,... WHERE столбец = значение
Для примера возьмем использованную в прошлых темах таблицу Users со следующим определением:
CREATE TABLE Users (id INTEGER AUTO_INCREMENT PRIMARY KEY, name VARCHAR(30), age INTEGER)
Сначала определим файл index.php, который будет выводить список пользователей с ссылками на их обновление:
<!DOCTYPE html> <html> <head> <title>METANIT.COM</title> <meta charset="utf-8" /> </head> <body> <h2>Список пользователей</h2> <?php $conn = new mysqli("localhost", "root", "mypassword", "testdb2"); if($conn->connect_error){ die("Ошибка: " . $conn->connect_error); } $sql = "SELECT * FROM Users"; if($result = $conn->query($sql)){ echo "<table><tr><th>Имя</th><th>Возраст</th><th></th></tr>"; foreach($result as $row){ echo "<tr>"; echo "<td>" . $row["name"] . "</td>"; echo "<td>" . $row["age"] . "</td>"; echo "<td><a href='update.php?id=" . $row["id"] . "'>Изменить</a></td>"; echo "</tr>"; } echo "</table>"; $result->free(); } else{ echo "Ошибка: " . $conn->error; } $conn->close(); ?> </body> </html>
Здесь используется команда SELECT, которая получает всех пользователей из таблицы Users. В таблице третий столбец хранит ссылку на скрипт update.php, который мы далее создадим и которому передается параметр id с идентификатором пользователя, которого надо изменить.
Для обновления данных определим скрипт update.php:
<?php $conn = new mysqli("localhost", "root", "mypassword", "testdb2"); if($conn->connect_error){ die("Ошибка: " . $conn->connect_error); } ?> <!DOCTYPE html> <html> <head> <title>METANIT.COM</title> <meta charset="utf-8" /> </head> <body> <?php // если запрос GET if($_SERVER["REQUEST_METHOD"] === "GET" && isset($_GET["id"])) { $userid = $conn->real_escape_string($_GET["id"]); $sql = "SELECT * FROM Users WHERE id = '$userid'"; if($result = $conn->query($sql)){ if($result->num_rows > 0){ foreach($result as $row){ $username = $row["name"]; $userage = $row["age"]; } echo "<h3>Обновление пользователя</h3> <form method='post'> <input type='hidden' name='id' value='$userid' /> <p>Имя: <input type='text' name='name' value='$username' /></p> <p>Возраст: <input type='number' name='age' value='$userage' /></p> <input type='submit' value='Сохранить'> </form>"; } else{ echo "<div>Пользователь не найден</div>"; } $result->free(); } else{ echo "Ошибка: " . $conn->error; } } elseif (isset($_POST["id"]) && isset($_POST["name"]) && isset($_POST["age"])) { $userid = $conn->real_escape_string($_POST["id"]); $username = $conn->real_escape_string($_POST["name"]); $userage = $conn->real_escape_string($_POST["age"]); $sql = "UPDATE Users SET name = '$username', age = '$userage' WHERE id = '$userid'"; if($result = $conn->query($sql)){ header("Location: index.php"); } else{ echo "Ошибка: " . $conn->error; } } else{ echo "Некорректные данные"; } $conn->close(); ?> </body> </html>
Весь код обновления структурно делится на две части. В первой части мы обрабатываем запрос GET. Когда пользователь нажимает на ссылку "Обновить" на странице index.php, то отправляется запрос GET, в котором передается id редактируемого пользователя.
if($_SERVER["REQUEST_METHOD"] === "GET" && isset($_GET["id"]))
И если это запрос GET, то нам надо вывести данные редактируемого пользователя в поля формы. Для этого получаем из базы данных объект по переданному id
$userid = $conn->real_escape_string($_GET["id"]); $sql = "SELECT * FROM Users WHERE id = '$userid'"; if($result = $conn->query($sql)){
Далее получаем полученные данные и, если они имеются, выводим их в поля формы. Таким образом, пользователь увидит на форме данные обновляемого объекта.
Вторая часть скрипта представляет обработку POST-запроса - когда пользователь нажимает на кнопку на форме, то будет отправляться POST-запрос с отправленными данными. Мы получаем эти данные и отправляем базе данных команду UPDATE с этими данными, используя при этом параметризацию запроса:
$userid = $conn->real_escape_string($_POST["id"]); $username = $conn->real_escape_string($_POST["name"]); $userage = $conn->real_escape_string($_POST["age"]); $sql = "UPDATE Users SET name = '$username', age = '$userage' WHERE id = '$userid'"; if($result = $conn->query($sql)){
После выполнения запроса к БД перенаправляем пользователя на скрипт index.php с помощью функции
header("Location: index.php");
Таким образом, пользователь обращается к скрипту index.php, видит таблицу с данными и нажимает на ссылку "Обновить" в одной из строк.
После нажатия его перебрасывает на скрипт update.php, который выводит данные редактируемого объекта. Пользователь изменяет данные и нажимает на кнопку.
Данные в запросе POST отправляются этому же скрипту update.php, который сохраняет данные и перенаправляет пользователя обратно на index.php.
Скрипт index.php:
<!DOCTYPE html> <html> <head> <title>METANIT.COM</title> <meta charset="utf-8" /> </head> <body> <h2>Список пользователей</h2> <?php $conn = mysqli_connect("localhost", "root", "mypassword", "testdb3"); if (!$conn) { die("Ошибка: " . mysqli_connect_error()); } $sql = "SELECT * FROM Users"; if($result = mysqli_query($conn, $sql)){ echo "<table><tr><th>Имя</th><th>Возраст</th><th></th></tr>"; foreach($result as $row){ echo "<tr>"; echo "<td>" . $row["name"] . "</td>"; echo "<td>" . $row["age"] . "</td>"; echo "<td><a href='update.php?id=" . $row["id"] . "'>Изменить</a></td>"; echo "</tr>"; } echo "</table>"; mysqli_free_result($result); } else{ echo "Ошибка: " . mysqli_error($conn); } mysqli_close($conn); ?> </body> </html>
Скрипт update.php:
<?php $conn = mysqli_connect("localhost", "root", "_mypassword", "testdb3"); if (!$conn) { die("Ошибка: " . mysqli_connect_error()); } ?> <!DOCTYPE html> <html> <head> <title>METANIT.COM</title> <meta charset="utf-8" /> </head> <body> <?php // если запрос GET if($_SERVER["REQUEST_METHOD"] === "GET" && isset($_GET["id"])) { $userid = mysqli_real_escape_string($conn, $_GET["id"]); $sql = "SELECT * FROM Users WHERE id = '$userid'"; if($result = mysqli_query($conn, $sql)){ if(mysqli_num_rows($result) > 0){ foreach($result as $row){ $username = $row["name"]; $userage = $row["age"]; } echo "<h3>Обновление пользователя</h3> <form method='post'> <input type='hidden' name='id' value='$userid' /> <p>Имя: <input type='text' name='name' value='$username' /></p> <p>Возраст: <input type='number' name='age' value='$userage' /></p> <input type='submit' value='Сохранить'> </form>"; } else{ echo "<div>Пользователь не найден</div>"; } mysqli_free_result($result); } else{ echo "Ошибка: " . mysqli_error($conn); } } elseif (isset($_POST["id"]) && isset($_POST["name"]) && isset($_POST["age"])) { $userid = mysqli_real_escape_string($conn, $_POST["id"]); $username = mysqli_real_escape_string($conn, $_POST["name"]); $userage = mysqli_real_escape_string($conn, $_POST["age"]); $sql = "UPDATE Users SET name = '$username', age = '$userage' WHERE id = '$userid'"; if($result = mysqli_query($conn, $sql)){ header("Location: index.php"); } else{ echo "Ошибка: " . mysqli_error($conn); } } else{ echo "Некорректные данные"; } mysqli_close($conn); ?> </body> </html>