Как сделать ссылку внутри цикла на нужный элемент в массиве

NeoWolf

Всем привет. Я начинающий программист и поэтому сталкиваюсь с проблемами на первый взгляд возможно пустяковыми. Возможно в описании написал не понятно, тут объясню подробнее. Что я имею — таблицу в бд в которой к примеру имеется 3 строки. Что я хочу — мне необходимо сделать ссылки на каждую строку в таблице, чтобы ссылка вела на одну и туже страницу но в зависимости от строки в таблице на ней были данные именно этой строки, на ссылку которой нажал пользователь. Надеюсь понятно изложил. Пример: имеется 3 строки с пользователями.
вася 27 лет город москва ( тут должна быть ссылка на его профиль)
петя 40 лет город волгоград ( тут должна быть ссылка на его профиль)
максим 30 лет астрахань ( тут должна быть ссылка на его профиль)

 

mkramer

Ну у Васи, Пети и максима в базе должен быть id. В ссылке на профиль передаётся этот айди тем или иным способом, через массив $_GET получается внутри скрипта. А дальше подставляется в запрос через подготовленные выражения.

https://www.php.net/manual/ru/mysqli.quickstart.prepared-statements.php
https://www.php.net/manual/ru/pdo.prepared-statements.php

Запрос select может содержать часть where, ограничивающий выборку. Т.е. можно из базы запросить ровно те данные, которые нужны

 

miketomlin

Идентификатор не обязательно передавать в GET-параметре: https://gency.ru/comment/125 (по этой ссылке есть демка по ссылке /users/1).

И подготовленный запрос для SELECT’а по id – это избыточно.
— Добавлено —
P.S. Но лучше так, чем как попало, т.е чем вообще без валидации и т.п.
— Добавлено —

Не, это будут разные страницы. Просто (файл-)обработчик общий.

 

mkramer

Ну лучше сначала научиться всё правильно делать, а потом уже будешь знать, где можно отступить и просто в int преобразовать. Если привыкнуть только преобразовывать/руками экранировать, будут потом запросы как в опенкарте, на 1000 символов каждый

 

miketomlin

Не уверен, что для SELECT’а по id это правильно. Мне другое говорили.

По-моему, это как раз вариант для школоты.

Заметь, я на первое место поставил валидацию, а не экранирование ;)

 

mkramer

Ну тут да, разные точки зрения. Мне глубоко фиолетово, что в базу уйдёт запрос, который гарантировано ничего не вернёт, и я спокойненько отдам 404. Может на сверхбольшой нагрузке это и не желательно, но не сильно мешает. Главное, что SQL-инъекция не пройдёт

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *