我正在制作一个超级基本的日记程序,用户将文本输入到表单中,当他们点击提交时,页面会显示最近的帖子,其中最新的帖子位于顶部,最旧的帖子位于底部。
当我尝试向我的数组添加新条目时,无论是使用[] =还是array_push,数组都会继续写入数组的0索引,我无法弄清楚原因。我还没有能够在网上找到任何相关内容,而且我已经在这脑子里乱了几个小时。有没有人有任何想法?
(我也意识到这是一个非常蹩脚的程序,但这只是一个旨在简要介绍PHP的作业。)
<form action="<?print($_SERVER['SCRIPT_NAME'])?>" method="get">
<textarea style="margin:auto;" rows="10" cols="50" name="diaryentry"></textarea>
<input style="margin:auto;" type="submit" value="Submit" />
</form>
<?php
if(!isset($_SESSION['entries']))
$_SESSION['entries'] = array();
$entries = array();
$entries = &$_SESSION['entries'];
$entries []= htmlentities(&$diaryentry);
$reversed = array_reverse($entries, true);
?>
<p><?php
foreach($reversed as $entry){
echo $entry . "<br>";
}?>
</p>
答案 0 :(得分:0)
它的标准行为。
如果没有$array[0]
,它将开始在那里写,不管它可能包含的其他索引。如果它包含$array[0]
和$array[1]
,则会继续在$array[2]
处写。基本上它开始写在[0]并继续在路上(即使存在$array['a']
和$array['b']
)。
在旁注中,除非您非常清楚它的作用以及您使用它的原因,否则请勿使用参考运算符&
。现在它完全没用了。使用它可能(并且可能会)导致代码中的错误,这些错误很难被追踪。很少需要使用&
。
答案 1 :(得分:0)
正如评论中提到的那样,您使用的是$_SESSION
个变量,但尚未调用session_start()
。正如您所发现的那样,除非在将任何类型的输出发送到浏览器之前调用它,否则session_stert
将无效。
因此,请使用<?php session_start(); ?>
开始您的文件,您应该开展业务。
顺便说一下,考虑使用<form action="" method="post">
- 这是一种更可靠的方式来回发到同一个网址。当您发现“漂亮”的网址时,此功能特别有用。
答案 2 :(得分:0)
尝试这样的事情:
if(!isset($_SESSION['entries']))
$_SESSION['entries'] = array();
$_SESSION['entries'][] = htmlentities($_POST['diaryentry']);
$reversed = array_reverse($_SESSION['entries'], true);
?>
以前似乎有很多不必要的变量赋值。