array_push не добавляет второй элемент после обновления страницы

Я понимаю, что array_push не добавляет второй элемент, потому что, когда страница обновляется после добавления другого элемента, исходный элемент уходит и заменяется самой последней записью из текстового поля.

Я пытаюсь достичь этой тактики, пытаясь либо...

а. Попросите сеанс запомнить следующий элемент, добавляемый ДАЖЕ при обновлении страницы.

or

b. Просто не обновляйте страницу вообще.

См. демо здесь: http://query.notesquare.me/home.html/

КОД

<form method="post">
    <input type="text" id="input-create-playlist" placeholder="Playlist Name" name="create_playlist" />
    <input type="submit" id="button-create-playlist" value="Create Playlist" />
</form>

<?php
    session_start();

    $create_playlist = $_POST['create_playlist'];

    $playlists = array("One", "Two", "Three");

    $_SESSION['main'] = $playlists;

    array_push($playlists, $create_playlist);

    for ($i = 0; $i < count($playlists); $i++) {
        echo $playlists[$i] . "<br />";
    }
?>

person mistkaes    schedule 12.04.2015    source источник
comment
Вам нужно переместиться вверх по array_push, прежде чем устанавливать переменную $_SESSION. И если вы хотите сохранить больше, чем последний список воспроизведения, вам нужно прочитать из переменной $_SESSION, добавить новый список воспроизведения, сохранить в переменной $_SESSION.   -  person mindore    schedule 12.04.2015
comment
Или просто сохраните прямо в сессию $_SESSION['main'][] = $create_playlist; И используйте переменную $_SESSION в цикле for.   -  person mindore    schedule 12.04.2015


Ответы (1)


Пытаться

<form method="post">
    <input type="text" id="input-create-playlist" placeholder="Playlist Name" name="create_playlist" />
    <input type="submit" id="button-create-playlist" value="Create Playlist" />
</form>

<?php
    session_start();

    $create_playlist = $_POST['create_playlist'];

    $_SESSION['user_playlists'][] = $create_playlist;

    $playlists = array("One", "Two", "Three");

    for ($i = 0; $i < count($_SESSION['user_playlists']); $i++) {
        array_push($playlists, $_SESSION['user_playlists'][$i]);
    }

    $_SESSION['main'] = $playlists;      

    for ($i = 0; $i < count($playlists); $i++) {
        echo $playlists[$i] . "<br />";
    }
?>

Ваш подход заключался в установке $_SESSION['main'] = $_POST['create_playlist'] перед желаемым эффектом array_push.

person sitilge    schedule 12.04.2015
comment
Ок, похоже проблемы с настройками php. Не могли бы вы, пожалуйста, некоторые переменные, связанные с сеансом. Вы можете использовать phpinfo(), но примите это во внимание: title="какие проблемы с безопасностью могут возникнуть из-за раскрытия phpinfo конечным пользователям"> stackoverflow.com/questions/3196011/ - person sitilge; 12.04.2015
comment
Я распечатал настройки моего PHP здесь: query.notesquare.me. Как вы думаете, вы можете помочь мне настроить проблема? Может быть, что-то отключено в разделе «Сеансы» или «Куки»? - person mistkaes; 12.04.2015
comment
Проблема может заключаться в каталоге /tmp: у пользователя, от имени которого запускается apache, могут отсутствовать права на запись. Сделайте sudo chmod 775 /tmp. - person sitilge; 12.04.2015
comment
Также проверьте, какой пользовательский apache работает как lsof -i | less - person sitilge; 12.04.2015
comment
Что бы я проверил sudo chmod 775 / tmp под, я знаю, что есть файл TMP, но где я мог бы проверить что? - person mistkaes; 13.04.2015
comment
С помощью sudo chmod 775 /tmp вы меняете права доступа к каталогу /tmp. У вашего пользователя процесса httpd может не быть прав на запись в этот каталог — пользователь может не входить в группу с правами на запись. Таким образом, с помощью lsof -i | less вы можете проверить пользователя, а затем с помощью ls -ad /tmp проверить разрешения. - person sitilge; 13.04.2015
comment
Хорошо, я изменил права на 775 и проверил, и они действительно 775. Хотя код все еще не работает. - person mistkaes; 13.04.2015
comment
Какой у вас httpd пользователь и к какой группе он принадлежит? - person sitilge; 13.04.2015
comment
Код работал со второй правки, проблема на вашей стороне. - person sitilge; 13.04.2015
comment
Какой каталог для пользователя httpd? и как бы мне это проверить? - person mistkaes; 13.04.2015
comment
httpd — это процесс, которым владеет какой-то пользователь. По умолчанию, если вы используете apache, пользователем будет www-data. И нет каталога (я имею в виду домашний каталог пользователя) для www-данных. Вы не ответили на предыдущие комментарии: проверьте lsof -i | меньше и ls -ad /tmp ! - person sitilge; 14.04.2015
comment
У вас уже есть ответы? - person sitilge; 14.04.2015
comment
Как мне это проверить и где я могу это проверить... Я абсолютно на 100% запутался в том, что это консольная вещь, которую я могу просто ввести и получить данные. Кстати, я использую GoDaddy cPanel, но она должна быть там... Я просто не знаю, как ее найти! - person mistkaes; 15.04.2015
comment
У вас вообще есть каталог /tmp? Что такое разрешения /tmp? - person sitilge; 15.04.2015
comment
Да, есть каталог tmp. Где я должен искать? - person mistkaes; 15.04.2015
comment
Какие разрешения /tmp? - person sitilge; 15.04.2015
comment
Разрешения для каталога tmp 775, как вы сказали. Я щелкнул по нему правой кнопкой мыши и установил разрешения с 755 на 775. - person mistkaes; 15.04.2015
comment
Хорошо, попробуйте установить на 777. - person sitilge; 15.04.2015
comment
Вот мой каталог TMP и права доступа к папке. Он все еще не работает. i.imgur.com/8NehXjn.png - person mistkaes; 16.04.2015
comment
можете ли вы проверить /var/log/apache2/error.log (путь ошибки apahce2 по умолчанию для большинства дистрибутивов Linux) - person sitilge; 16.04.2015
comment
Где сохраняются журналы? Проверьте файл журнала на наличие ошибок. Распечатайте мне вывод. - person sitilge; 16.04.2015
comment
눀걞U흍oۆ毽䎱P㻍M഍Ȱᨁq膈9Ⓔ�KԾj(별Ꮛl繹вязкаB%OoW钒/䩴뎅ğѤُӨ鞏篓ˉ䄈䉣ɽɽ ϯ먉嬱n闺ꭚ阞D믅ḋ敟卲.龱⃼.۫/㫥柶،0⯤鿤... В основном... Тарабарщина... - person mistkaes; 16.04.2015
comment
Хорошо, попробуйте сделать 777 (возможно, слишком много) каталогов и ini_set(session.save_path, '/path/to/your/dir') - person sitilge; 16.04.2015
comment
1. Да, может 2. Нет, создайте еще одну папку, например, в той же директории, где находится файл index.php - person sitilge; 16.04.2015
comment
Это фрагмент кода, который я поместил перед session_start()... ini_set(session.save_path, "/tmp"); - person mistkaes; 16.04.2015
comment
Нет, создайте другой каталог, например, в том же каталоге, который содержит файл index.php. - person sitilge; 16.04.2015
comment
Итак, вы хотите, чтобы я создал другой каталог с именем tmp, а затем внутри этого каталога tmp создал файл с именем index.php, в который я поместил ini_set(session.save_path, "/tmp");? - person mistkaes; 16.04.2015
comment
Вы можете назвать его как хотите. Ты шутишь, что ли? - person sitilge; 16.04.2015
comment
Можете ли вы просто связать меня со страницей или stackoverflow, чтобы узнать, как это сделать? - person mistkaes; 16.04.2015
comment
Каков путь к вашему index.php? Я напишу это для вас. - person sitilge; 16.04.2015
comment
Не как создавать команды каталога linux, а как правильно хранить сеансы. - person mistkaes; 16.04.2015
comment
В следующий раз просто используйте Google: stackoverflow.com/questions/14604589/ - person sitilge; 16.04.2015
comment
Нет index.php - person mistkaes; 16.04.2015
comment
Поскольку вы используете Apache/2.4.12 (Unix), я спрашиваю вас, что такое DocumentIndex для query.notesquare. я. Очень-очень простым способом: какой файл открывается при переходе на query.notesquare.me ? - person sitilge; 16.04.2015
comment
home.html — это файл, который открывается. - person mistkaes; 16.04.2015
comment
Перейдите в каталог, где находится home.html. Запишите путь к этому каталогу, например, /var/www/notesquare/. Создайте новый каталог «сессии». Напишите это в файле home.html: ini_set(session.save_path, /var/www/notesquare/home.html); до сеанс_старт(). - person sitilge; 16.04.2015
comment
Разве я не должен сохранять сеансы в каталог сеансов, а не обратно в home.html? Потому что, по сути, этот комментарий говорит мне... найти каталог моего основного home.html в query.notesquare.me, а затем создать новый каталог с именем сеансы, а затем внутри home.html выполнить ini_set, который, по сути, оставляет директория сессий пуста. - person mistkaes; 16.04.2015
comment
Вы говорите мне создать новый каталог под названием «сессии», но не говорите мне, что с ним делать или что в него поместить, поэтому я просто оставляю его пустым, что кажется неправильным... - person mistkaes; 16.04.2015
comment
Там четко написано: Нет такого файла или каталога /public_html/query.notesquare.me/home.html//sess_4fd0jbd03kgboaqsjm5ph54nb. Поэтому создайте каталог «независимо» в /home/kucerajacob/public_html/query.notesquare.me/, например /home/kucerajacob/public_html/query.notesquare.me/whatever, и установите права доступа 777. Позже ini_set(session.save_path, /home /kucerajacob/public_html/query.notesquare.me/независимо); - person sitilge; 17.04.2015
comment
Хорошо, это имеет гораздо больше смысла - я попробую, когда вернусь домой! - person mistkaes; 17.04.2015
comment
Ты заслуживаешь гораздо большего, я не могу проголосовать, потому что у меня всего 6 репутации. - person mistkaes; 17.04.2015