使用PHP存储和返回表单数据的最佳实践

时间:2012-10-19 20:48:47

标签: php html forms session post

可能重复:

嘿那里,我正在构建一个用于查询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外面,将在周一赶上。感谢迄今为止所有出色的回复!等不及回去尝试这个。

5 个答案:

答案 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; ?>"/>