Полный цикл в digital

Фильтрация данных MySQLi

Подобно тому, как мы получаем все данные из таблицы, мы можем применять фильтрацию выбирать данные по определенному критерию. Для фильтрации команде SELECT передается выражение WHERE, которая принимает названия столбцов их значения в качестве критерия фильтрации. Например, получение всех данные из таблицы Users, где id = 1:

SELECT * FROM Users WHERE id = 1

Однако если данные для фильтрации приходят извне, нам необходимо учитывать их потенциальную опасность. Рассмотрим получение данных на примере таблицы Users, созданной в прошлых, которая имеет следующее определение:

CREATE TABLE Users (id INTEGER AUTO_INCREMENT PRIMARY KEY, name VARCHAR(30), age INTEGER)

Объектно-ориентированный стиль

Например, мы хотим получать в GET-запросе значение для id и по нему получать из базы данных нужные данные. Определим для этого следующий скрипт user.php:

<!DOCTYPE html>
<html>
<head>
<title>hmarketing.ru</title>
<meta charset="utf-8" />
</head>
<body>
<?php
if(isset($_GET["id"])) {
$conn = new mysqli("localhost", "root", "mypassword", "testdb2");
if($conn->connect_error) {
die("Ошибка: " . $conn->connect_error);
}
$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 "<div>
<h3>Информация о пользователе</h3>
<p>Имя: $username</p>
<p>Возраст: $userage</p>
</div>";
}
}
else {
echo "<div>Пользователь не найден</div>";
}
$result->free();
} else {
echo "Ошибка: " . $conn->error;
}
$conn->close();
}
?>
</body>
</html>

Здесь через запрос GET получаем параметр id - идентификатор пользователя, который надо получить из базы данных. Однако поскольку это значение приходит извне, к нему применяется метод real_escape_string(), который экранирует спецсимволы:

$userid = $conn->real_escape_string($_GET["id"]);

Для упрощения обращения к скрипту определим скрипт index.php, который будет выводить список пользователей с ссылкой на скрипт user.php:

<!DOCTYPE html>
<html>
<head>
<title>hmarketing.ru</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 id, name FROM Users";
if($result = $conn->query($sql)) {
echo "<table><tr><th>Имя</th><th></th></tr>";
foreach($result as $row) {
echo "<tr>";
echo "<td>" . $row["name"] . "</td>";
echo "<td><a href='user.php?id=" . $row["id"] . "'>Подробнее</a></td>";
echo "</tr>";
}
$result->free();
} else {
echo "Ошибка: " . $conn->error;
}
$conn->close();
echo "</table>";
?>
</body>
</html>

Таким образом, при обращении к скрипту index.php браузер отобразит список пользователей, а нажав на ссылку рядом с каждым пользователем, мы перейдем к подробному описанию:

Процедурный стиль

Скрипт user.php:

<!DOCTYPE html>
<html>
<head>
<title>hmarketing.ru</title>
<meta charset="utf-8" />
</head>
<body>
<?php
if(isset($_GET["id"])) {
$conn = mysqli_connect("localhost", "root", "mypassword", "testdb3");
if (!$conn) {
die("Ошибка: " . mysqli_connect_error());
}
$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 "<div>
<h3>Информация о пользователе</h3>
<p>Имя: $username</p>
<p>Возраст: $userage</p>
</div>";
}
}
else {
echo "<div>Пользователь не найден</div>";
}
mysqli_free_result($result);
} else {
echo "Ошибка: " . mysqli_error($conn);
}
mysqli_close($conn);
}
?>
</body>
</html>

Скрипт index.php:

<!DOCTYPE html>
<html>
<head>
<title>hmarketing.ru</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 id, name FROM Users";
if($result = mysqli_query($conn, $sql)) {
echo "<table><tr><th>Имя</th><th></th></tr>";
foreach($result as $row) {
echo "<tr>";
echo "<td>" . $row["name"] . "</td>";
echo "<td><a href='user.php?id=" . $row["id"] . "'>Подробнее</a></td>";
echo "</tr>";
}
echo "</table>";
mysqli_free_result($result);
} else {
echo "Ошибка: " . mysqli_error($conn);
}
mysqli_close($conn);
?>
</body>
</html>
Заполните форму уже сегодня!
Для начала сотрудничества необходимо заполнить заявку или заказать обратный звонок. В ответ получите коммерческое предложение, которое будет содержать индивидуальную стратегию с учетом требований и поставленных задач
Работаем по будням с 9:00 до 18:00. Заявки, отправленные в выходные, обрабатываем в первый рабочий день до 12:00.
Спасибо, ваш запрос принят и будет обработан!
Эйч Маркетинг