2013-01-17 32 views
2

我希望能夠使用函數向被稱爲播放列表的數組添加新值(是必需的)。但每次輸入另一個值時,它都會替換舊的值,而不是僅添加數組的末尾。哪裏不對?我的數組值保持消失和刷新在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>"; 
} 

回答

-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變量。

+0

如果'array_push'不起作用,爲什麼會'$ myArray的[]'? – Eevee

3

在請求之間不保存PHP值。每次加載該頁面時,$playlist都以您分配的相同三個值開始。

如果你想保持周圍更長的數據,你需要保存到某個地方,一個cookie,文件,會議,數據庫等

或者,你可以在值存儲在HTML本身,通過爲播放列表中的每首歌曲打印<input type="hidden">。然後,當用戶輸入一首新歌曲時,您將獲得新歌曲以及所有舊歌曲的完整列表。

+0

我給你+1 ...因爲很可能沒有人會接受你的答案:D – gd1

0

有你犯了一個錯誤一般:你要明白,每次發送的值,你做的方式

,你的PHP腳本再次啓動。它重新啓動,沒有任何東西從最後一次。

爲了能夠以您希望的方式接管值,必須在將這些值推送到數組之後以持久方式存儲這些值。在下一次運行期間,您首先必須從該持久性存儲中讀取現有值,然後填充該數組,然後纔可以在該數組之上添加另一個值。這是一個普遍的原則,這種框架的基本工作方式。

通常情況下,數據庫被用作持久性存儲,但文件也可能是間歇性的,具體取決於您計劃處理的請求數量和數據量。

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