2

我希望能够使用函数向名为播放列表的数组添加新值(这是强制性的)。但是每次我输入另一个值时,它都会替换旧值,而不仅仅是添加到数组的末尾。怎么了?

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

5 回答 5

3

PHP 值不会在请求之间保存。每次加载此页面时,都会$playlist从您分配的相同三个值开始。

如果您想将数据保存更长时间,则需要将其保存在某个地方——cookie、文件、会话、数据库等。

或者,您可以将值存储在 HTML 本身中,方法是<input type="hidden">为播放列表中的每首歌曲打印一个。然后当用户输入一首新歌时,你会得到新歌加上所有旧歌的完整列表。

于 2013-01-17T23:35:15.517 回答
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>
于 2013-01-17T23:59:01.143 回答
0

你犯了一个普遍的错误:

您必须了解,每次以您的方式传输值时,您的 php 脚本都会再次启动。它重新启动,上次没有留下任何东西。

为了能够以您希望的方式接管值,您必须在将这些值推送到数组后以持久方式存储它们。在下一次运行期间,您首先必须从该持久存储中读取现有值,填充数组,然后才能在该数组顶部添加另一个值。这是一般原则,是这种框架工作的基本方式。

通常,数据库用作持久存储,但文件也可能很有趣,具体取决于您计划处理的请求数量和数据量。

于 2013-01-17T23:37:20.653 回答
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>";
}
于 2013-01-18T00:06:11.867 回答
-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 变量。

于 2013-01-17T23:34:48.147 回答