可能重复:
嘿那里,我正在构建一个用于查询API并过滤一些搜索结果的表单。这些数据都不存储在文本文件或数据库中。
表单提交自然会刷新页面,表单值默认为我在编写HTML时指定的本机选定选项。我希望存储用户提交的值,并在页面重新加载和加载过滤的选择后将其作为表单中的选定选项。实现这一目标的最佳解决方案是什么?会话,或查询POST数组?
当然,我做过几次谷歌搜索,但所有与数据库或文本文件相关的内容都不适用。
我目前的表格代码:
<form method="post" action="">
<label>Year</label>
<select class="minYear" name="minimuimYearFilter">
<?php
$vehicleYear = date("Y") + 1;
for ($i = 1993; $i <= $vehicleYear; $i++) {
echo "<option value=".$i.">".$i."</option>";
}
?>
</select>
To:
<select class="maxYear" name="maximumYearFilter">
<?php
for ($i = 1993; $i <= $vehicleYear; $i++) {
if ($i == $vehicleYear) {
echo "<option value=".$i." selected>".$i."</option>";
} else {
echo "<option value=".$i.">".$i."</option>";
}
}
?>
</select>
<label for="priceFilter">Price</label>
<select class="priceFilter" name="priceFilter">
<?php
for ($i = 1000; $i <= 50000; $i=$i+1000) {
if ($i == 50000) {
echo "<option value=".$i.">$".$i."+</option>";
} elseif ($i == 20000) {
echo "<option value=".$i." selected>$".$i."</option>";
} else {
echo "<option value=".$i.">$".$i."</option>";
}
}
?>
</select>
<label for="mileageFilter">Mileage</label>
<select class="mileageFilter" name="mileageFilter">
<?php
for ($i = 5000; $i <= 100000; $i=$i+5000) {
if ($i == 100000) {
echo "<option value=".$i.">".$i."+</option>";
} elseif ($i == 75000) {
echo "<option value=".$i." selected>".$i."</option>";
} else {
echo "<option value=".$i.">".$i."</option>";
}
}
?>
</select>
<input type="submit" value="Submit">
</form>
嘿所有,开个会,然后在周末外面的wifi外面,将在周一赶上。感谢迄今为止所有出色的回复!等不及回去尝试这个。
答案 0 :(得分:2)
如果您的意思是在页面之间传递数据 - 您应该阅读此问题的最佳答案:
PHP Pass variable to next page
在此之后 - 阅读有关PHP中会话的更多信息。会话是“记住应用程序状态”的最佳机制。
答案 1 :(得分:1)
您使用选择框的事实使得这更难,但一般的想法是使用$_REQUEST
数组中每个选择框的值来决定哪个选项获得所选属性。
这些方面的东西:
for ($i = 1993; $i <= $vehicleYear; $i++) {
echo "<option value='".$i."'".(($_REQUEST['minimuimYearFilter']==$i)?"selected":"").">".$i."</option>";
}
我们的想法是,之前选择的选项会获得一个选定的属性,使其成为默认的选定值。
这应该是开箱即用的,至少在我的例子中,原因是如果没有选择任何值,它们都不会获得选定的属性,而前一个属性是默认值。如果您还想要“第一次”选择选项,只需检测$ _REQUEST ['whatever']是否返回了任何内容,如果没有将其值设置为您想要选择的选项。
答案 2 :(得分:1)
首页设置首页:
session_start();
例如,如果发送$ _POST而不是会话中设置:
if (isset($_POST['vehicle_selected']))
{
$_SESSION['vehicle_selected'] = $_POST['vehicle_selected'];
}
else
{
$_SESSION['vehicle_selected'] = '';
}
在HTML表单中添加以下值:
value="<?=$_SESSION['vehicle_selected']; ?>";
或完整示例:
<?php
session_start();
if (isset($_POST['vehicle_selected']))
{
$_SESSION['vehicle_selected'] = $_POST['vehicle_selected'];
}
else
{
$_SESSION['vehicle_selected'] = '';
}
?>
<form method="post" action="">
<label>Year</label>
<select class="minYear" name="minimuimYearFilter">
<?php
$vehicleYear = date("Y") + 1;
for ($i = 1993; $i <= $vehicleYear; $i++) {
echo "<option value=".$_SESSION['vehicle_selected'].">".$_SESSION['vehicle_selected']."</option>";
}
?>
</select>
....
另一个词(不是答案,但建议出于安全目的):
使用REQUEST方法可以比POST更简单,而不是REQUEST($ _GET,$ _ POST)只使用$ _GET。如果您想在Stackoverflow中更安全地探索PHP的CSRF保护。但这只是为了安全。
答案 3 :(得分:0)
使用cookies。 setcookies()
的PHP手册页非常不言自明:http://php.net/manual/en/function.setcookie.php
答案 4 :(得分:0)
我会使用POST数组。如果您未在多个页面中使用输入,则会话仅添加一个不必要的步骤。
$value = (isset($_POST['some_option']) ? $_POST['some_option'] : "";
?>
<select selected="<?php echo $value; ?>">
或
<input value="<?php echo $value; ?>"/>