我的数组值在php中不断消失和刷新?

时间:2013-01-17 23:30:33

标签: php

我希望能够使用函数将新值添加到名为播放列表的数组中(必须)。但每当我输入另一个值时,它会替换旧的值而不是仅添加数组的末尾。有什么问题?

<?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>";
}

5 个答案:

答案 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变量。