PHP Array 不会从 HTML 表单中添加新元素
Posted
技术标签:
【中文标题】PHP Array 不会从 HTML 表单中添加新元素【英文标题】:PHP Array does not add new elements from HTML form 【发布时间】:2022-01-04 22:44:06 【问题描述】:php 和 Web 开发新手。我觉得问这个很愚蠢,但一直在寻找答案几个小时却找不到任何东西。如果之前已经回答过,请链接我...谢谢您的帮助!
说明: 使用 html 表单,将值作为数组传递给 PHP 数组。第一次工作,但是当我返回表单并尝试添加另一组值时,它会覆盖索引 0 处的值。
我尝试过的: array_push($log, $_POST["info"]) 和 $log[] = $_POST["info"]; = 结果相同,0 处的索引被覆盖。
HTML 代码
<?php $date = date('d/m/Y h:i', time());?>
<form class="contact-form" action="/server.php" method="post">
<input type="text" name="info[]" placeholder="Full name" required>
<textarea name="info[]" rows="5" cols ="80" placeholder="Message" required></textarea>
<input type="hidden" name="info[]" id="date-time" value="<?php echo $date; ?>">
<button type="submit" name="submit">Submit Message</button>
</form>
PHP 代码
<?php
$log = array();
if(isset($_POST["info"]))
array_push($log, $_POST["info"]);
var_dump($log);
?>
当前结果
array(1)
[0]=>
array(3)
[0]=>
string(12) "Blunder King"
[1]=>
string(28) "Blundering all the day long."
[2]=>
string(16) "27/11/2021 02:48"
当我尝试向 $log 数组添加另一个值时,它会被覆盖而不是移动新索引。
array(1)
[0] =>
array(3)
[0]=>
string(12) "Blunder King"
[1]=>
string(28) "Blundering all the day long."
[2]=>
string(16) "27/11/2021 02:48"
, // would expect new array values at index 1. But instead I get these values overwriting index 0 above.
[1] =>
array(3)
[0]=>
string(12) "Blunder Queen"
[1]=>
string(30) "Blundering all the day long."
[2]=>
string(16) "27/11/2021 02:51"
【问题讨论】:
您能否指出您希望在表单提交之间保留此数据的 PHP 代码中的一行...? 我认为您的误解是每次按下提交按钮时都会加载一个新的 server.php 脚本。您的任何旧数据都已消失。 HTML 代码和 PHP 代码是否在同一个文件中?如果是这样,您可以简单地将先前的数据传递到隐藏的表单元素中。 javascript 也可能会有所帮助,具体取决于您在此处尝试执行的操作。 每次点击提交按钮,server.php都会重新运行。因此,$log 被重新生成为一个新变量,并且不保留原始值。 PHP 不知道以前的 $log 我建议你将数组存储在 SESSION 变量中,这样之前提交的数据就会保留下来。 @dev_blunder88 这里有几个解决方案: 选项 1:使用数据存储(例如数据库或 json 文件)。调用 PHP 脚本时,将文件中的现有数据读取到数组中,将新数据附加到数组中,然后保存新数据。选项 2:将所有 HTML 代码放在 server.php 脚本中。如果您的 $_POST 中有数据(将其添加到隐藏的 HTML 元素中)并每次都附加到它。 【参考方案1】:只需稍微更改您的代码即可使用 SESSION:
<?php session_start();
$date = date('d/m/Y h:i', time());?>
<form class="contact-form" action="server.php" method="post">
<input type="text" name="info[]" placeholder="Full name" required>
<textarea name="info[]" rows="5" cols ="80" placeholder="Message" required></textarea>
<input type="hidden" name="info[]" id="date-time" value="<?php echo $date; ?>">
<button type="submit" name="submit">Submit Message</button>
</form>
对于server.php
<?php session_start();
if ( ! isset($_SESSION["log"]))
$_SESSION["log"] = array();
if(isset($_POST["info"]))
array_push($_SESSION["log"], $_POST["info"]);
var_dump($_SESSION["log"]);
?>
或者简单地将两者合并在一起并运行它,您将在单个 php 中看到结果:
<?php
session_start();
?>
<?php $date = date('d/m/Y h:i', time());?>
<form class="contact-form" action="#" method="post">
<input type="text" name="info[]" placeholder="Full name" required>
<textarea name="info[]" rows="5" cols ="80" placeholder="Message" required></textarea>
<input type="hidden" name="info[]" id="date-time" value="<?php echo $date; ?>">
<button type="submit" name="submit">Submit Message</button>
</form>
<?php
if ( ! isset($_SESSION["log"]))
$_SESSION["log"] = array();
if(isset($_POST["info"]))
array_push($_SESSION["log"], $_POST["info"]);
var_dump($_SESSION["log"]);
?>
【讨论】:
感谢@Ken Lee,我将在本周晚些时候试一试,提交时间是 21 年 11 月 28 日凌晨 12 点,我们明天将学习云开发(做一个软件开发硕士)。但我需要尝试一下。以上是关于PHP Array 不会从 HTML 表单中添加新元素的主要内容,如果未能解决你的问题,请参考以下文章