我希望能够使用函数将新值添加到名为播放列表的数组中(必须)。但每当我输入另一个值时,它会替换旧的值而不是仅添加数组的末尾。有什么问题?
<?php
$playlist = array("Be more.mp3", "Drift Away.mp3", "Panda Sneeze.mp3");
function add_songs_playlist() {
global $playlist;
?>
<form method = "post">
<input type = "text" name = "name1"/>
<input type = "submit" name = "submit1"/>
</form>
<?php
if (isset($_POST['submit1'])) {
$newsong = $_POST['name1'];
array_push($playlist, $newsong);
}
}
add_songs_playlist();
foreach ($playlist as $value) {
echo $value."<br>";
}
答案 0 :(得分:3)
请求之间不保存PHP值。每次加载此页面时,$playlist
都会以您指定的相同三个值开始。
如果你想保持更长时间的数据,你需要将它保存在某个地方 - 一个cookie,一个文件,一个会话,一个数据库等。
或者,您可以通过为播放列表中的每首歌曲打印<input type="hidden">
,将值存储在HTML本身中。然后,当用户输入新歌曲时,您将拥有新歌曲以及所有旧歌曲的完整列表。
答案 1 :(得分:1)
只需将播放列表写入文件
即可<?php
if (isset($_POST['submit1'])) {
$song = "\n".$_POST['name1'];
$file = fopen("songs.txt", 'a');
fwrite($file, $song);
fclose($file);
}
$file = file("songs.txt");
foreach ($file as $song) {
echo $song . "</br>";
}
?>
<form method = "post">
<input type = "text" name = "name1"/>
<input type = "submit" name = "submit1"/>
</form>
答案 2 :(得分:0)
你犯了一个普遍的错误:
你必须明白,每当你按照你的方式传输一个值时,你的php脚本会再次启动。它重新开始,没有任何东西从上次。
为了能够以您希望的方式接管值,您必须在将它们推送到数组后以持久的方式存储这些值。在下一次运行期间,您首先必须从该持久存储中读取现有值,填充数组,然后才能在该数组的顶部添加另一个值。这是一般原则,这种框架的基本工作方式。
通常,数据库用作持久存储,但文件也可能是有用的,具体取决于您计划处理的请求数量和数据量。
答案 3 :(得分:0)
这是代码的一小部分。我删除了该函数并将您的数组存储在表单中。
这个可以在没有在服务器上存储任何信息的情况下工作,打赌我认为它不会非常有用。您应该像以前的回复中的@Anonymous建议的那样存储您的内容。
工作代码:
<?php
// First check if I get a POST request with list of songs
if (isset($_POST['playlist'])) {
$playlist = $_POST['playlist'];
} else { // Else set my default list
$playlist = array("Be more.mp3", "Drift Away.mp3", "Panda Sneeze.mp3");
}
// You need to get the added son BEFORE you generate the FORM,
// so it can be a part of the form
if (isset($_POST['name1'])) {
$playlist[] = $_POST['name1'];
}
?>
<form method = "post">
<?php
// This loop stores your songs as hidden values within the form,
// so you will get them with your next post
foreach($playlist as $song) {
?>
<input type = "hidden" name = "playlist[]" value = "<?php echo $song?>">
<?php
}
?>
<input type = "text" name = "name1"/>
<input type = "submit" name = "submit1"/>
</form>
<?php
foreach ($playlist as $value) {
echo $value."<br>";
}
答案 4 :(得分:-2)
特定于您的转贴代码的示例是:
if (isset($_POST['submit1'])) {
$newsong = $_POST['name1'];
$playlist[] = $newsong;
}
另外一个错误可能是你的表格在一个函数内......为什么不这样做呢
<?php
$playlist = array("Be more.mp3", "Drift Away.mp3", "Panda Sneeze.mp3");
?>
<form method = "post">
<input type = "text" name = "name1"/>
<input type = "submit" name = "submit1"/>
</form>
<?php
if (isset($_POST['submit1'])) {
$newsong = $_POST['name1'];
$playlist[] = $newsong;
}
foreach ($playlist as $value) {
echo $value."<br>";
}
?>
我不确定您是否关心页面是否刷新。但如果您对页面刷新没问题,这应该可行。如果您不想刷新,可以将变量保存在javascript中,然后使用onClick上的表单按钮作为函数调用。或者如果你想在PHP中使用你的变量来重置你的php变量而不刷新你将需要进行AJAX调用来回调JSON来更新你的PHP变量。