不使用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>
答案 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漏洞,但这对您来说可能并不重要。