Я создаю php-скрипт, в котором хранятся 3 массива: $images
, $urls
, $titles
на основе входных данных формы в php-файле.
Я хочу напечатать значения этих массивов в первой части страницы, а затем предварительно заполнить поля ввода формы значением массивов. Также, когда пользователь изменяет поле ввода и нажимает «Сохранить», страница должна перезагружаться с измененной версией.
Моя проблема заключается в том, что при каждом вызове php-файла в браузере значение переменных удаляется. Есть ли способ сохранить значения массива, чтобы форма всегда заполнялась последними сохраненными значениями?
<?php //save the arrays with the form data $images = array($_POST["i0"],$_POST["i1"],$_POST["i2"],$_POST["i3"]); $urls = array($_POST["u0"],$_POST["u1"],$_POST["u2"],$_POST["u3"]); $titles = array($_POST["t0"],$_POST["t1"],$_POST["t2"],$_POST["t3"]); //print the arrays print_r($images); print_r($urls); print_r($titles); //create the form and populate it echo "<p><form method='post' action='".$_SERVER['PHP_SELF']."';"; $x = 0; while ($x <= 3) { echo"<div> <input name='i".$x."' type='text' value='".$images[$x]."'> <input name='u".$x."' type='text' value='".$urls[$x]."'> <input name='t".$x."' type='text' value='".$titles[$x]."'>"; $x++; } ?> <br> <input type="submit" name="sumbit" value="Save"><br> </form>
Храните переменные в сеансе PHP.
session_start(); $_SESSION['images'] = $images;
Затем на следующей (или любой другой) странице вы можете получить значения как:
session_start(); $images = $_SESSION['images'];
Изменение области видимости переменных в более широком масштабе может сделать трюк. Кроме того, проверьте, есть ли у вас запрос на отправку до обновления значений.
<?php if(sizeof($_POST) >0) { //UPDATE VALUES } ?>
Если вы хотите постоянное хранение состояния, между разными страницами, вы должны использовать сеансы, поставив session_start();
в начале вашего скрипта. После этого каждая переменная $ _SESSION [$ x] будет сохранена и будет доступна для ваших скриптов.
Однако в этом конкретном случае, отвечая на ваш вопрос: «Есть ли способ сохранить значения массива, чтобы форма всегда заполнялась последними сохраненными значениями?», Проще просто использовать переменную $ _POST если он уже существует:
<?php if(!$_POST){ $_POST = array(); foreach(array("i0","i1","i2","i3") as $i) $_POST[$i]=""; foreach(array("u0","u1","u2","u3") as $i) $_POST[$i]=""; foreach(array("t0","t1","t2","t3") as $i) $_POST[$i]=""; } foreach($_POST as $k=>$v) filter_input(INPUT_POST,$k,FILTER_SANITIZE_SPECIAL_CHARS); //save the arrays with the form data $images = array($_POST["i0"], $_POST["i1"], $_POST["i2"], $_POST["i3"]); $urls = array($_POST["u0"], $_POST["u1"], $_POST["u2"], $_POST["u3"]); $titles = array($_POST["t0"], $_POST["t1"], $_POST["t2"], $_POST["t3"]); //print the arrays print_r($images); print_r($urls); print_r($titles); //create the form and populate it echo "<p><form method='post' action='".$_SERVER['PHP_SELF']."';"; $x = 0; while ($x <= 3) { echo"<div> <input name='i".$x."' type='text' value='".$images[$x]."'> <input name='u".$x."' type='text' value='".$urls[$x]."'> <input name='t".$x."' type='text' value='".$titles[$x]."'>"; $x++; } ?> <br> <input type="submit" name="sumbit" value="Save"><br> </form>
Примечание: эта строка foreach($_POST as $k=>$v) filter_input(INPUT_POST,$k,FILTER_SANITIZE_SPECIAL_CHARS);
должно быть достаточно, чтобы защитить вас от основных атак XSS. Обратите также внимание на то, что в целом лучше всего следовать шаблону перезагрузки страниц с помощью GET после POST , что делает вас менее восприимчивыми к формированию повторных представлений, и в этом случае использование сессий для хранения является лучшим решением.
Что привело меня сюда, было несколько другое зверь. У меня возникла проблема с последующим отправкой запроса с IP-камеры AXIS и необходимость сохранения последнего имени файла в запросах. В случае, если кто-то споткнется здесь, ища какой-то способ кэширования переменных, а SESSION – это не вариант, возможно, стоит посмотреть на альтернативный кэш PHP:
Примечание. В отличие от многих других механизмов PHP, переменные, хранящиеся с помощью apc_store (), будут сохраняться между запросами (пока значение не будет удалено из кеша).
Использовать сеансы: http://php.net/manual/en/function.session-start.php
Вы можете использовать сеансы для хранения значений и писать правила, чтобы пополнить поля формы после проверки на отправке данных. Также функция isset () очень полезна, чтобы избежать «неопределенных» ошибок.
Решение, которое вы ищете, – это сеанс. Используйте $_SESSION
для хранения значений ваших переменных. Например, в конце скрипта:
$_SESSION['images'] = $images;
и в форме ввода:
<input name='i".$x."' type='text' value='".(isset($_SESSION['images']) ? $_SESSION['images'] : '')."'>