如何在多个页面加载上存储变量值

时间:2011-11-01 10:05:49

标签: php

我正在创建一个php脚本,它根据php文件中表单的输入数据存储3个数组:$images$urls$titles

我想在页面的第一部分打印这些数组的值,然后使用数组的值预先填充表单的输入字段。此外,当用户修改输入字段并单击“保存”时,页面应该使用修改后的版本重新加载。

我的问题是,在浏览器中每次调用php文件时,变量的值都会被删除。有没有办法存储数组的值,以便表单始终预先填充最后保存的值?

<?php
//save the arrays with the form data
$images = array($_POST["i0"],$_POST["i1"],$_POST["i2"],$_POST["i3"]);
$urls = array($_POST["u0"],$_POST["u1"],$_POST["u2"],$_POST["u3"]);
$titles = array($_POST["t0"],$_POST["t1"],$_POST["t2"],$_POST["t3"]);
//print the arrays
print_r($images);
print_r($urls);
print_r($titles);
//create the form and populate it
echo "<p><form method='post' action='".$_SERVER['PHP_SELF']."';";
$x = 0;
while ($x <= 3) {
   echo"<div>
            <input name='i".$x."' type='text' value='".$images[$x]."'>
            <input name='u".$x."' type='text' value='".$urls[$x]."'>
            <input name='t".$x."' type='text' value='".$titles[$x]."'>";
       $x++;
}
?>
<br>
<input type="submit" name="sumbit" value="Save"><br>
</form>

7 个答案:

答案 0 :(得分:15)

将变量存储在PHP会话中。

session_start();
$_SESSION['images'] = $images;

然后在下一个(或任何其他)页面上,您可以将值检索为:

session_start();
$images = $_SESSION['images'];

答案 1 :(得分:2)

将变量的范围更改为更大的范围,可能会有所帮助。另外,在更新值之前,请检查您是否有发布请求。

<?php
    if(sizeof($_POST) >0)
    {
      //UPDATE VALUES
    }
?>

答案 2 :(得分:2)

如果您希望永久存储状态,在不同的页面之间,您应该使用会话,方法是将session_start();放在脚本的开头。在此之后,每个变量$ _SESSION [$ x]将被保留,并且可供您的脚本使用。

但是,在这种特殊情况下,回答你的问题:“有没有办法存储数组的值,以便表单始终预先填充最后保存的值?”,更容易使用$ _POST变量(如果已存在):

<?php
if(!$_POST){
    $_POST = array();
    foreach(array("i0","i1","i2","i3") as $i) $_POST[$i]="";
    foreach(array("u0","u1","u2","u3") as $i) $_POST[$i]="";
    foreach(array("t0","t1","t2","t3") as $i) $_POST[$i]="";
}
foreach($_POST as $k=>$v)  filter_input(INPUT_POST,$k,FILTER_SANITIZE_SPECIAL_CHARS);

//save the arrays with the form data
$images = array($_POST["i0"], $_POST["i1"], $_POST["i2"], $_POST["i3"]);
$urls   = array($_POST["u0"], $_POST["u1"], $_POST["u2"], $_POST["u3"]);
$titles = array($_POST["t0"], $_POST["t1"], $_POST["t2"], $_POST["t3"]);


//print the arrays
print_r($images);
print_r($urls);
print_r($titles);
//create the form and populate it
echo "<p><form method='post' action='".$_SERVER['PHP_SELF']."';";
$x = 0;
while ($x <= 3) {
   echo"<div>
            <input name='i".$x."' type='text' value='".$images[$x]."'>
            <input name='u".$x."' type='text' value='".$urls[$x]."'>
            <input name='t".$x."' type='text' value='".$titles[$x]."'>";
       $x++;
}
?>
<br>
<input type="submit" name="sumbit" value="Save"><br>
</form>

注意:此行foreach($_POST as $k=>$v) filter_input(INPUT_POST,$k,FILTER_SANITIZE_SPECIAL_CHARS); 应该足以保护您免受基本的XSS攻击。 另请注意,一般情况下,最好遵循pattern of reloading pages with GET after POST,这使您不太容易形成重新提交,在这种情况下,使用会话进行存储是更好的解决方案。

答案 3 :(得分:1)

带我来到这里的是一种有点不同的野兽。我有来自AXIS IP摄像头的后续发布请求的问题,并且需要在请求之间保留最后的文件名。如果有人在这里寻找某种方法来缓存变量而SESSION不是一个选项,也许应该看看替代PHP缓存:

  

注意:与PHP中的许多其他机制不同,变量存储使用   apc_store()将在请求之间保持不变(直到删除该值   来自缓存)。

http://php.net/manual/en/book.apc.php

答案 4 :(得分:0)

答案 5 :(得分:0)

您可以使用sessions存储值并编写规则,以便在对数据提交进行验证后重新填写表单字段。函数isset()对于避免“未定义”错误非常有帮助。

答案 6 :(得分:0)

您正在寻找的解决方案是会话。使用$_SESSION存储您的变量的值。例如,在脚本结束时:

$_SESSION['images'] = $images;

并在表单的输入中:

<input name='i".$x."' type='text' value='".(isset($_SESSION['images']) ? 
$_SESSION['images'] : '')."'>