如何将用户输入附加到数组的末尾并显示所有元素?

时间:2015-04-04 19:40:10

标签: php html forms

在页面顶部,我有一个文本框和一个提交按钮。提示用户输入其名称。在此之下,我想开始列出输入的名称。如果输入名称,它应显示在列表的下方。如果您然后输入另一个名称并点击提交,则应显示两个名称,依此类推。

<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>

1 个答案:

答案 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变量不存在,它将产生警告。您永远不应该在页面上使用未经过化学处理的用户输入。我也重命名了你的变量,这样代码的可读性就会提高一些。

如果您希望我进一步解释该代码,请告诉我。