在页面顶部,我有一个文本框和一个提交按钮。提示用户输入其名称。在此之下,我想开始列出输入的名称。如果输入名称,它应显示在列表的下方。如果您然后输入另一个名称并点击提交,则应显示两个名称,依此类推。
<html>
<body>
<form action = "" method = "post">
List Name: <input type="text" name="listname"/>
<input type="submit"/>
</form>
<br/><br/>
<form action = "" method = "post">
Add a new item: <input type="text" name="new_item"/>
<input type="submit"/>
</form>
<?php
$current_items[]=$_POST["new_item"];
foreach ($current_items as $x)
echo $x . "<br/>";
echo "Current items on list";
$current_items = array();
?>
</body>
</html>
答案 0 :(得分:1)
&#39; hard&#39;这里的部分是存储多个请求的名称列表。根据用例,有几种选择。
如果您需要存储多个用户的名称,则必须将它们存储在某种数据库或文件存储中。如果您只想向当前用户显示它们,您可以将它们存储在会话中,也可以在每个请求中前后发布它们。我选择了最后一个选项,因为这可能是最简单的方法。看看下面的代码。
<form method="post">
Add a new item: <input type="text" name="new_name"/>
<input type="submit"/>
<?php
$names = postVar('names') ? : array();
$names[] = postVar('new_name');
foreach ($names as $name) {
echo $name . "<br/>";
echo "<input type='hidden' name='names[]' value='$name'/>";
}
echo "Current items on list";
function postVar($name) {
// only if exists
if (! isset($_POST[$name])) {
return null;
}
// fetch
$out = $_POST[$name];
// cleanup
if (is_array($out)) {
return array_map('htmlspecialchars', $out);
}
return htmlspecialchars($out);
}
?>
</form>
最大的区别在于我将列表中的每个名称添加为页面的隐藏变量。这样,您可以在每个请求中阅读它们并重建列表。通过将[]
添加到名称中,它将作为数组返回,这在这里非常方便。当然,我不得不将你的结束表格标签向下移动,以确保它们随表格一起发布。
请注意,我添加了一个小的清理功能。您的代码适用于演示,但不应在生产中使用。它对Javascript注入是开放的,如果你的post变量不存在,它将产生警告。您永远不应该在页面上使用未经过化学处理的用户输入。我也重命名了你的变量,这样代码的可读性就会提高一些。
如果您希望我进一步解释该代码,请告诉我。