Я хочу иметь возможность добавлять новые значения в массив с именем playlist, используя функции (обязательно). Но каждый раз, когда я вводил другое значение, он заменяет старый, а не просто добавляет в конец массива. Что не так?
<?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>"; }
Значения PHP не сохраняются между запросами. Каждый раз, когда эта страница загружается, $playlist
начинается с тех же трех значений, которые вы назначаете.
Если вы хотите хранить данные дольше, вам нужно где-то их сохранить – файл cookie, файл, сеанс, базу данных и т. Д.
Кроме того, вы можете сохранить значения в самом HTML, напечатав <input type="hidden">
для каждой песни в списке воспроизведения. Затем, когда пользователь вводит новую песню, у вас есть новая песня плюс полный список всех старых.
Просто напишите плейлист в файл
<?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>
Есть общая ошибка, которую вы делаете:
вы должны понимать, что каждый раз, когда вы передаете значение так, как вы это делаете, вы запускаете скрипт php снова. Он перезапускается без каких-либо остатков с последнего раза.
Чтобы иметь возможность принимать значения так, как вы хотите, вы должны сохранять эти значения устойчивым образом после того, как выталкивали их в массив. Во время следующего запуска вам сначала нужно прочитать существующие значения из этого постоянного хранилища, заполнить массив и только затем вы можете добавить другое значение поверх этого массива. Это общий принцип, основной способ работы такого рода рамок.
Обычно база данных используется как постоянное хранилище, но также файлы могут быть интересными, в зависимости от того, сколько запросов и сколько данных вы планируете обрабатывать.
Вот небольшой код вашего кода. Я удалил функцию и сохранил массив в самой форме.
Этот будет работать, не сохраняя никакой информации на сервере, ставка, я не думаю, что она будет очень полезной. Вы должны сохранить свой контент, как это было предложено @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>"; }
Примером, специфичным для вашего кода репозита, будет:
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.