这是我问题的第二部分:
Creating/editing a php dynamic page
我现在正试图将代码放在一起。 如果您不想查看我问题的第一部分,那么就告诉您我正在尝试并建立一个允许用户发布特定城市活动的网站。首先,用户使用下拉菜单选择状态,然后在下一页上使用下拉菜单选择城市。选择城市后,他们将被带到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)的子页面上进行正确的查询。
答案 0 :(得分:0)
首先,你应该在开始的php标签下开始你的会话。至少为了后来其他人看到这段代码。
所以这篇庞大的文章基本上说“我如何将一个选定的城市设置为会话var并使用它来从数据库中获取结果?”
好的,让我们从选择表单开始吧。让我们通过突破php并以正确的方式编写好的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>
如果您不知道,此行是ternary运算符。你可以在那个链接上看到一个例子......
<?php echo ($result['cid'] == $_SESSION['city_id'] ? 'selected="selected"' : ''); ?>
它只是说如果行城市ID等于会话城市ID,请将selected="selected"
添加到该选项的html。
现在,在php中 - 表单中的action属性指向的位置,您处理此请求...
<?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有基本的了解。如果您有任何具体问题,我可以更新这篇文章。