Как правильно использовать сеансы для динамических страниц

Это вторая часть моего вопроса отсюда:

Создание / редактирование динамической страницы php

Теперь я пытаюсь объединить код. Если вы не хотите взглянуть на первую часть моего вопроса, тогда вам расскажу, что я экспериментирую и создаю сайт, который позволяет пользователям публиковать события для определенного города. Сначала пользователь использует раскрывающееся меню для состояния selct, затем на следующей странице они используют раскрывающееся меню, чтобы выбрать город. Как только город выбран, они отправляются в city.php, где мы используем запросы в нашей базе данных, чтобы показывать события, которые люди отправили в этот конкретный город. В любом случае, я хочу расширить город и превратить city.php в индекс, где будут размещены ссылки на events.php, jobs.php или forsale.php. Когда пользователь нажимает на одну из этих ссылок, конкретный город будет по-прежнему запоминаться, и запрос будет сделан, чтобы вытащить эту информацию. У меня просто проблемы с кодированием:

Код из раскрывающегося меню города:

while($result = mysqli_fetch_array($doQuery)){ // $result contains id (cid) and name (cname) for each city // $result - current row // here we add HTML code for option "dynamically" echo "<option value='".$result["cid"]."'>".$result["cname"]."</option>"; session_start(); $_SESSION['cname'] = $city; 

код от city.php:

 session_start(); $_SESSION['cname'] = $city; // import dbconnect.php // we use require(not include) to stop the script if such file does not exist // we use "once" because we do not need to establish dbconnection if it already exists require_once("dbconnect.php"); // all data which we get from cityByState.php are stored in $_POST superglobal array // in our case we have only one field "city" so we can get city id from $_POST["city"] // also we use intval function for security purposes. It converts variable to integer. $cityId = intval($_REQUEST["city"]); // query which gets all info about required city $query = "select * from cities where id=$cityId"; // run the query and handle possible errors if(!($doQuery = mysqli_query($db, $query))){ echo "Can not get info about the city!"; exit(); } 

Я просто новичок и не могу понять, как правильно использовать сеансы, чтобы мой сайт работал правильно. Я также не уверен, что я буду использовать, чтобы гарантировать, что я могу делать правильные запросы на вспомогательных страницах city.php (события, задания, forsale).

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

Итак, этот массивный пост в основном говорит: «Как установить выбранный город в сеанс var и использовать его для получения результатов из базы данных?»

Итак, давайте начнем с формы выбора. Давайте изменим ваш код, разломив php и правильно назову хороший html. ВСЕГДА избегайте писать html в php (echo '<a href="">'... etc)

 <form id="city_select" action="" method="post"> <fieldset> <select name="city"> <?php while($result = mysqli_fetch_array($doQuery)): ?> <option value="<?php echo $result["cid"]; ?>" <?php echo ($result['cid'] == $_SESSION['city_id'] ? 'selected="selected"' : ''); ?>><?php echo $result["cname"]; ?></option> <?php endwhile; ?> </select> <input type="submit" name="submit" value="Submit"> </fieldset> </form> 

если вы не знаете, эта строка является тройным оператором. Вы можете увидеть пример по этой ссылке …

 <?php echo ($result['cid'] == $_SESSION['city_id'] ? 'selected="selected"' : ''); ?> 

Он просто говорит, что если id города строки равен идентификатору города сеанса, добавьте selected="selected" в html для этого параметра.

Теперь, в php – где ваш атрибут действия в форме указывает на, вы обрабатываете этот запрос …

 <?php session_start(); if(isset($_POST['city'])) { $_SESSION['city_id'] = $_POST['city']; //you can do other processing here, like redirecting to the last page viewed to prevent double posting and that annoying re-submit form popup, etc } ?> 

Теперь, по крайней мере, ваш раскрывающийся список должен помнить последний выбранный город. Следующим шагом является то, чтобы ваши результаты заботились об этом выборе. очевидно, вам нужно правильно избежать $ _SESSION ['city_id'], но для этого примера давайте предположим, что вы уже это делаете …

 $query = "select * from cities where id=".$_SESSION['city_id']; 

Есть так много способов улучшить это, что было бы опасно даже попытаться начать. Я исхожу из предположения, что вы используете процедурные навыки программирования, а не OOP, что вам известно об исключении пользовательского ввода и что у вас есть базовое понимание php. Если у вас есть какие-то конкретные вопросы, я могу обновить этот пост.