и таблицу с 2 столбцами name (varchar) и description(text).
сделал html страницу с названием стран, хочу чтоб при нажатии на страну появлялось её описание из БД.
<!DOCTYPE html>
<html>
<head>
<title>Список стран</title>
<style>
.country-block {
border: 1px solid #ccc;
padding: 10px;
margin-bottom: 10px;
}
.country-link {
cursor: pointer;
color: blue;
text-decoration: underline;
}
</style>
</head>
<body>
<div class="country-block">
<h2>Страны:</h2>
<ul>
<li><a href="#" onclick="loadCountryDescription('Дания')">Дания</a></li>
<li><a href="#" onclick="loadCountryDescription('Норвегия')">Норвегия</a></li>
<li><a href="#" onclick="loadCountryDescription('Швеция')">Швеция</a></li>
<li><a href="#" onclick="loadCountryDescription('Австрия')">Австрия</a></li>
<li><a href="#" onclick="loadCountryDescription('Германия')">Германия</a></li>
</ul>
</div>
...
php
<?php
// Подключение к базе данных
$servername = "localhost";
$username = "root";
$password = "qwerty";
$dbname = "openair";
$conn = new mysqli($servername, $username, $password, $dbname);
// Проверка соединения
if ($conn->connect_error) {
die("Ошибка подключения: " . $conn->connect_error);
}
// Получение имени страны из параметра запроса
$countryName = $_GET['country'];
//$countryName = 'Норвегия';
// Подготовка и выполнение запроса к базе данных
$sql = "SELECT description FROM countries WHERE name = '$countryName'";
$result = $conn->query($sql);
// Вывод результата запроса для проверки
if ($result) {
if ($result->num_rows > 0) {
$row = $result->fetch_assoc();
echo "Описание страны из базы данных: " . $row['description'];
} else {
echo "Описание не найдено 1";
}
} else {
echo "Ошибка выполнения запроса: " . $conn->error;
}
// Проверка результатов запроса и вывод описания страны
if ($result->num_rows > 0) {
$row = $result->fetch_assoc();
echo $row['description'];
} else {
echo "Описание не найдено 2";
}
$conn->close();
?>
При нажатии на странице по названию страны выводит : Описание не найдено 1 Описание не найдено 2
Подскажите как сделать такой функционал?
Дело имею с php и БД первый раз, возможно не учел какие-то нюансы.
1. используй bind параметров запроса. читай про sql инъекции. 2. если у тебя ошибка - наверное надо останавливать выполнение. у тебя просто идем дальше. 3. смотри какой запрос уходит в базу и балуйся.
та у него такой запрос и уходит в бд SELECT description FROM countries WHERE name = '$countryName'
😑 И что? Как это тебя избавляет он инъекции через переданные данные в переменую, вставленной напрямую в sql запрос?
так я и не сказал что инъекций не будет) просто уточнил что запрос и так ясно какой уходит)
а вот то, что структура таблицы очень странная и вообще подход это да)) видимо человек не понимает, что лучше добавить поле id и делать выборку по нему... ну то такое)
Причём тут id? Это автоинкремент, для чего он тебе в запросах? Он нужен для вставок данных просто. А на то что ты пишешь в WHERE как значение выборки, тебе на этот столбец надо вешать ключ индексации
1. с какой это радости id обязательно инкремент? 2. поиск по int работает гораздо быстрее и менее затратно чем по varchar .. isn't it?
id не нормально использовать вообще для своей какой-то информации, если не понимаешь, я спорить не собираюсь
т.е.? правильно ли я понимаю, что правильно делать выборку по полю типа varchar? с индексом все хорошо будет?) может тогда вообще фултекст зафигачить? а чё?)
ставю ключ индексации и всё и сравнивай по целому значению, без всяких sbustring и прочего
Обсуждают сегодня