HTML post与PHP数组

时间:2018-04-28 01:05:53

标签: php html

不使用Ajax或Java脚本,我需要一个POST表单来在php数组中存储多个值。例如,如果我在文本区域输入文本值(即Dog,Cat),我希望输入第二个值时输出保留在页面上。

这是我的代码,它为一个值工作,但页面刷新,当我输入一个新值时,我失去了价值:

<!DOCTYPE HTML>
<html>  
<body>
<?php 
$name = array();
?>
<form action=<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?> method="post">
<label for="animal">Please add an Animal:</label><br>
<input type="text" name="animal" />
<br>
<br>

<input type="submit" value="Submit">
</form>
<hr>
<p>Results:</p> 

<?php 

if ($_SERVER["REQUEST_METHOD"] === "POST") {
array_push($name, $_POST["animal"]);
}

foreach ($name as $animal)
{
 echo "You entered: $animal <br>" ;
}
?>

</body>  
</html>

2 个答案:

答案 0 :(得分:1)

在尝试访问/使用可能提交的数据之前,我正在进行一些empty检查 - 这样可以避免收到一些令人讨厌的警告。

我将旧值作为json字符串传递,然后解码它以在每次提交时向其添加新值。

隐藏输入用于在每次新提交时传递旧值。

代码:

<!DOCTYPE HTML>
<html>  
<body>
<?php 
if (!empty($_POST['storedanimals']) && !empty($_POST['animal'])) {
    $storedanimals = array_merge(json_decode($_POST['storedanimals'], true), array($_POST['animal']));
} elseif(!empty($_POST['animal'])) {
    $storedanimals = array($_POST['animal']);
} else {
    $storedanimals = array();
}
?>
<form action=<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?> method="post">
    <label for="animal">Please add an Animal:</label><br>
    <input type="text" name="animal"><br><br>
    <input type="hidden" name="storedanimals" value='<?=json_encode($storedanimals)?>'>
    <input type="submit" value="Submit">
</form>

<?php 

if ($storedanimals) {
    echo "<hr>";
    echo "<p>Results:</p>";
    foreach ($storedanimals as $animal) {
        echo "You entered: $animal <br>" ;
    }
}
?>
</body>  
</html>

答案 1 :(得分:1)

我让HTML做了所有繁重的工作:

<html>
    <body>
        <form method="post">
            <?php echo "You've posted " . implode(',', $_POST['animals']); ?>

            <input type="text" name="animals[]"/>

            <?php foreach ($_POST['animals'] as $animal) { ?>
                <input type="hidden" name="animals[]" value="<?php echo $animal;?>"/>
            <?php } ?>

            <input type="submit">
        </form>
    </body>
</html>

您可以通过使用[]命名输入来创建表单中的元素数组。在这种情况下,animals[]的名称允许您通过多个HTTP请求构建动物数组,而无需手动合并多个项目。

另一方面,我发布的代码中存在XSS漏洞,但这对您来说可能并不重要。