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割り当てた同じ 3 つの値から開始します。

データをより長く保持したい場合は、Cookie、ファイル、セッション、データベースなどのどこかに保存する必要があります。

<input type="hidden">または、プレイリストの曲ごとに を出力して、値を HTML 自体に保存することもできます。次に、ユーザーが新しい曲を入力すると、新しい曲とすべての古い曲の完全なリストが表示されます。

于 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

これがあなたのコードの小さな改造です。関数を削除し、配列をフォーム自体に保存しました。

これはサーバーに情報を保存しなくても機能しますが、あまり使い物にならないと思います。以前の返信で @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 に答える
0

あなたが犯す一般的な間違いがあります:

この方法で値を送信するたびに、php スクリプトが再起動されることを理解しておく必要があります。前回から何も残さずに再起動します。

値を好きなように引き継ぐには、それらの値を配列にプッシュした後、それらの値を永続的な方法で保存する必要があります。次の実行では、最初にその永続ストレージから既存の値を読み取り、配列を埋めてから、その配列の上に別の値を追加する必要があります。これは一般原則であり、この種のフレームワークが機能する基本的な方法です。

通常、データベースは永続ストレージとして使用されますが、処理する予定のリクエスト数とデータ量によっては、ファイルも興味深い場合があります。

于 2013-01-17T23:37:20.653 に答える
-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 に答える