Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP存储和返回表单数据的最佳实践_Php_Html_Forms_Session_Post - Fatal编程技术网

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

使用PHP存储和返回表单数据的最佳实践,php,html,forms,session,post,Php,Html,Forms,Session,Post,可能重复: 嘿,我正在构建一个表单,用于查询API和过滤一些搜索结果。这些数据均未存储在文本文件或数据库中 当然,表单提交会刷新页面,表单值默认为我在编写HTML时指定的本机选择选项。我希望存储用户提交的值,并在页面重新加载和过滤选择加载后将这些值作为表单中的选定选项。实现这一目标的最佳解决方案是什么?会话,还是查询POST数组 当然,我做了几次谷歌搜索,但所有与数据库或文本文件相关的内容都不适用 我当前的表格代码: <form method="post" action="">

可能重复:

嘿,我正在构建一个表单,用于查询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之外出城,周一会尽快赶上。感谢到目前为止所有伟大的回应!迫不及待地想回来试试这个。

使用cookies。setcookies的PHP手册页非常简单:

使用cookies。setcookies的PHP手册页非常简单:

如果您的意思是在页面之间传递数据,您应该阅读这个问题的最佳答案:


在此之后-阅读有关PHP会话的更多信息。会话是记忆应用程序状态的最佳机制。

如果您是指在页面之间传递数据,您应该阅读此问题的最佳答案:


在此之后-阅读有关PHP会话的更多信息。会话是记住应用程序状态的最佳机制。

使用选择框这一事实使这一点更加困难,但一般的想法是使用$\u请求数组中每个选择框的值来决定哪个选项获得所选属性

大致如下:

for ($i = 1993; $i <= $vehicleYear; $i++) {
    echo "<option value='".$i."'".(($_REQUEST['minimuimYearFilter']==$i)?"selected":"").">".$i."</option>";
}
其思想是,先前选定的选项将获得选定属性,使其成为默认选定值


这应该是开箱即用的,至少在我的示例中是这样,原因是如果没有选择任何值,它们都不会获得选定的属性,而顶部的属性是默认属性。如果您还希望选择“第一次”选项,只需检测$\u REQUEST['whatever']是否返回了任何内容,如果未将其值设置为您希望选择的选项。

您使用的是选择框,这一事实使这一点更加困难,但是一般的想法是使用$\u请求数组中每个选择框的值来决定哪个选项获得所选属性

大致如下:

for ($i = 1993; $i <= $vehicleYear; $i++) {
    echo "<option value='".$i."'".(($_REQUEST['minimuimYearFilter']==$i)?"selected":"").">".$i."</option>";
}
其思想是,先前选定的选项将获得选定属性,使其成为默认选定值


这应该是开箱即用的,至少在我的示例中是这样,原因是如果没有选择任何值,它们都不会获得选定的属性,而顶部的属性是默认属性。如果您还希望选择“第一次”选项,只需检测$\u REQUEST['whatever']是否返回了任何内容,如果没有,则将其值设置为您希望选择的选项。

我将使用POST数组。会话只会添加一个步骤,如果您不在多个页面中使用输入,则该步骤是不必要的

$value = (isset($_POST['some_option']) ? $_POST['some_option'] : "";
?>

<select selected="<?php echo $value; ?>">


我会使用POST数组。会话只会添加一个步骤,如果您不在多个页面中使用输入,则该步骤是不必要的

$value = (isset($_POST['some_option']) ? $_POST['some_option'] : "";
?>

<select selected="<?php echo $value; ?>">


首页设置会话:

session_start();
例如,如果在会话中发送的$\u 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$\u GET,$\u POST只使用$\u GET。如果您想更安全,请在Stackoverflow中探索针对PHP的CSRF保护。但这只是出于安全考虑。

第一页设置会话:

session_start();
例如,如果在会话中发送的$\u 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$\u GET,$\u POST只使用$\u GET。如果您想更安全,请在Stackoverflow中探索针对PHP的CSRF保护。但这只是为了安全。

会话。当他移动到另一个页面时,帖子将丢失。但使用单独的echo-ed值,而不是。像徒劳地连接它们,只是一个接一个地输出它们。这是一个特殊的PHP echo gimmick.Session。当他移动到另一个页面时,帖子将丢失。但使用单独的echo-ed值,而不是。像徒劳地连接它们,只是一个接一个地输出它们。这是一个特殊的PHP回音噱头。对,我认为这是有道理的。特别是因为我正在动态地生成这些长选择选项,生成正确的选择元素以呼应所选内容似乎也是这个用例中最大的障碍之一……我用一个例子更新了我的问题,如果您需要更多详细信息,请告诉我。不,我真的很喜欢您这里的解决方案。我让它腌制,我可以试试

实施。在用户交互之前,您的代码片段在初始页面加载时会有什么特别的注意事项吗?或者您认为这会“开箱即用”吗?非常酷,我将首先尝试此解决方案,尽管我有一个会议,而且会在周一出城,所以可能必须等到那时才能测试和接受:。再次感谢!对,我认为这是有道理的。特别是因为我正在动态地生成这些长选择选项,生成正确的选择元素以呼应所选内容似乎也是这个用例中最大的障碍之一……我用一个例子更新了我的问题,如果您需要更多详细信息,请告诉我。不,我真的很喜欢您这里的解决方案。我让它腌制,我可以试试。在用户交互之前,您的代码片段在初始页面加载时会有什么特别的注意事项吗?或者您认为这会“开箱即用”吗?非常酷,我将首先尝试此解决方案,尽管我有一个会议,而且会在周一出城,所以可能必须等到那时才能测试和接受:。再次感谢!这是有道理的,尽管我试图避免实现会话,但这可能是我所采取的路线。谢谢会议并不可怕。你可能会想,它们更容易使用:哈哈,我以前对会话做过一些工作,我希望有另一种“更简单”的方法来实现会话,因为这是会话在我整个站点中应用的唯一文档。但我明白你的意思:再次感谢!这是有道理的,尽管我试图避免实现会话,但这可能是我所采取的路线。谢谢会议并不可怕。你可能会想,它们更容易使用:哈哈,我以前对会话做过一些工作,我希望有另一种“更简单”的方法来实现会话,因为这是会话在我整个站点中应用的唯一文档。但我明白你的意思:再次感谢$_COOKIE只能包含4kB的数据:对于小表单来说足够了,但是如果您有一个内容字段,您可以快速传递它。当您超过4kB的限制时,PHP不会真正给出错误,因此看起来cookies不工作,这非常令人沮丧。因此,我不建议使用cookies来存储表单数据,除非它类似于登录中的电子邮件form@Tessmore我同意,我觉得饼干是这个用例的延伸。感谢sgroves的回复。您有四个下拉列表,每个下拉列表可以默认为一个数值。您需要存储哪些超过4K的数据?也许我误解了你的问题,但看起来这正是你使用COOKIE的目的。$\u COOKIE只能包含4kB的数据:对于小表单来说足够了,但是如果你有一个内容字段,你可以快速传递它。当您超过4kB的限制时,PHP不会真正给出错误,因此看起来cookies不工作,这非常令人沮丧。因此,我不建议使用cookies来存储表单数据,除非它类似于登录中的电子邮件form@Tessmore我同意,我觉得饼干是这个用例的延伸。感谢sgroves的回复。您有四个下拉列表,每个下拉列表可以默认为一个数值。您需要存储哪些超过4K的数据?也许我误解了你的问题,但看起来这正是你使用cookies的目的。我感谢你的回答,我喜欢你提出的安全考虑。我今天可能没有足够的时间插入您的解决方案,但如果我今晚错过了,我将在周一尝试。干杯我很感激这里的回应,我喜欢你提出的安全考虑。我今天可能没有足够的时间插入您的解决方案,但如果我今晚错过了,我将在周一尝试。干杯