我正在创建一个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>
答案 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()将在请求之间保持不变(直到删除该值 来自缓存)。
答案 4 :(得分:0)
答案 5 :(得分:0)
答案 6 :(得分:0)
您正在寻找的解决方案是会话。使用$_SESSION
存储您的变量的值。例如,在脚本结束时:
$_SESSION['images'] = $images;
并在表单的输入中:
<input name='i".$x."' type='text' value='".(isset($_SESSION['images']) ?
$_SESSION['images'] : '')."'>