Каким способ лучше всего передавать переменные между страницами?
Каким способ лучше всего передавать переменные между страницами?
Искал в интернете, многие советуют с помощью SESSION-переменных, удобно ли это? Может лучше делать это с помощью js? Или может существую какие-то еще способы? (Про POST переменные знаю)
$_SESSION хранится на сервере, пользователь не может его подделать
$_GET передается через адресную строку, пользователь может его подделать
$_POST передается через формы, пользователь может его подделать
The_XXI, опять же, что значит следующей? Вы можете использовать localStorage, Cookies, Session Data, Get параметры, Post Data,... Куча способов. Вы пока не ответили что точно вы собираетесь делать и для чего. Как будто это великая тайна и ноу-хау)
irishmann, Иван Шумов, это не тайна, сайт - что-то типо библиотеки, текст книги предается строкой и каждая глава отделена текстом "[supsys]", главы открываются get переменной: /read?id=(id книги)&chapter=(номер главы), при открытии следующей предыдущей главы я буду проверять, пришли ли строки с текстом с предыдущей страницы, если пришли. то работать с ними, если нет, то вызвать их из БД
Иван Шумов, чтоб сократить кол-во запросов в БД, ведь они вызывают нагрузку, до этого каждая глава была отдельно в таблице глав и приходилось каждый раз делать два запроса, вытащить данные главы и общие данные о книге
Иван Шумов, почему? когда будет много пользователей, то каждое открытие новой шлавы - новый запрос, а так сделал запрос один раз и работаешь с этими данными, пока юзер на выйдет с книги. Ведь каждый запрос будет давать нагрузку.
The_XXI,
Первый вариант:
одним запросом вытащить все, записать в сессию, и при переходе по страницам показывать нужную главу.
Второй вариант: разделяй и властвуй.
2 таблицы, 1 табл. информация о книге, 2 табл. главы, вторичным ключом ссылка на первую табл,
Показывать информацию о книге в одной странице. Там поставить кнопочку читать, открывается другая страница, по гет читает номер книги, номер первой главы, запрашивает. Нужную информацию. Переход на другоую главу, гет номер книги, номер главы
The_XXI, одно дело когда у вас запросы берут маленькие данные, типа значение одного поля, другое дело, когда вы вытаскиваете большие данные. Во втором случае у вас нагрузка больше.
Иван Шумов, если я все правильно понял, то надо главы вернуть обратно в отдельную таблицу, но общую инфу о книге то ведь надо передавать со страницы одной главы на другую, это делать session-переменными?
The_XXI, а это как хотите. Вы, кажется, пробуете зачем-то все сделать на клиенте, а вопрос у вас про php. Да делайте хоть на каждой странице запрос к базе за этими данными. В чем проблема? Вы думаете сейчас про оптимизацию, а преждевременная оптимизация мешает только и вредит
Иван Шумов, как оптимизация может вредить? допустим у меня список из 10 книг на странице, надо делать или 10 запросов или мульти-запрос, чтоб вывести инфу о каждой, и вдруг понадобилось выводить еще и кол-во глав, если данных об эом нет в таблице с основной информацией, то придется увеличить кол-во запросв в несколько раз, это сразу увеличить нагрузку. И вопрос у меня не только про php, а еще и про web-разработку.
The_XXI, вредит тем что вы бы уже что-то сделали, получили данные, запустили проект, посмотрели на реальную загрузку, определили есть или нет болтнеки, решили бы их точечно и получили быстро быстрый сервис а вместо этого вы паритесь по поводу проблем которых у вас нет и неизвестно будут или нет. Может вы сейчас потратите кучу времени на оптимизацию, а потом выяснится что хратить лучше по другому и вся эта оптимизация коту под хвост.
Оптимизировать надо когда у вас есть проблема и цифры профайлинга. Или опыт десятка таких проектов (на продакшене и под настоящей нагрузкой) из которого вы уже знаете где скорее всего будут проблемы.
За исключением ситуаций когда нужно что-то иное)) но я так понимаю что вы пока об этом не знаете)) значит таки сессии)) в обшем лопату в-руки и gogogo!))) Это-совсем не кусается)))
А чем то же js хуже? Сессия будет доступна на всем протяжении времени, которое юзер проводит на сайте, а мне нужна эта переменная только на определенных страницах.