У меня есть список выбора, но при перезагрузке страницы данные в списке не сохраняются.
Я исправил это с помощью TextBoxes и Radio кнопок, читая переменные из $ _GET.
Вот пример формы, которую я имею сейчас:
<form action="" id="exampleForm" method="get">
<input type="checkbox" name="exampleCheckbox" <?php if (isset($_GET['exampleCheckboxStatus'])) {echo "checked";} ?>>Check this
</br>
<select name="exampleList" multiple>
<option>Apple</option>
<option>Banana</option>
<option>Cherry</option>
</select>
<input type="submit" value="Submit" id="submitButton"> </form>
Я хотел бы сохранить значения ‘exampleList’ после отправки
(Я остаюсь на той же странице)
Я видел здесь посты, которые выглядят почти так, как я спрашиваю, но большинство из них хотят использовать javascript. Есть ли решение моей проблемы, которое похоже на то, что у меня сейчас есть? Я хотел бы исправить это с помощью php, потому что я не думаю, что у меня достаточно знаний о Javascript (пока)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script>
$(document).ready(function(){
var opts = localStorage.getItem('opts'); // get selected items from localStorage key
opts = opts.split(','); // split result from localstorage to array
$('#exampleList').val(opts); // select options with array
});
</script>
<html>
<body>
<select id="exampleList" multiple>
<option value="apple">Apple</option>
<option value="banana">Banana</option>
<option value="cherry">Cherry</option>
</select>
</body>
</html>
Когда вы отправляете форму POST, вам нужно только записать выбранные значения опций через запятую в localalstorage.
Я наконец нашел решение:
Единственный недостаток — это порядок 🙂
Но так как я использую плагин для отображения, это не имеет большого значения.
Исправление:
Я создал 2 массива списков
песни1 с каждым в этом
песни2 со всеми выбранными значениями
Тогда я вычитаю песни2 от песни1 и не имеют дубликатов
Таким образом, я могу напечатать оба в различных методах печати.
<?php error_reporting(E_WARNING);
$fruitArray = array("Apple", "Banana", "Cherry", "Durian", "Eggfruit", "Fig", "Grapefruit");
$selectedFruitArray = $_GET['exampleList'];
$fruitArray = array_diff($fruitArray, $selectedFruitArray);
?>
<form action="" method="get">
<select name="exampleList[]" multiple>
<?php
foreach($fruitArray as $value) {
echo "<option value='$value'>$value</option>";
}
foreach($selectedFruitArray as $value) {
echo "<option value='$value' selected>$value</option>";
}
?>
</select>
<input type="submit">
</form>
использование FormRepo, плагин, специально созданный для сохранения данных формы
на странице обновляется.
Его использование также просто:
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
<script src="FormRepo.js"></script>
<script>
var $form = $('#input')
, $output = $('#output')
, repo = new FormRepo('restclient')
;
// get the last submitted values back
repo.restore($form/*, $form.attr('id')*/ ); // don't necessarily need an identifier
$form.submit(function (e) {
// preserve the last submitted values
repo.preserve($form/*, $form.attr('id')*/ ); // don't necessarily need an identifier
});
console.log( repo.all() );
</script>
Вы можете сделать это с помощью сессии. Таким образом, вы можете сохранить последнее выбранное значение в сеансе. Значение сеанса не будет уничтожено, даже если вы перезагрузите paga.
Например,
<?php
session_start(); // Other Code
<div>
<p>Subtitle needs to be
<input type="radio" name="subTitleRadio" <?php if ($_SESSION['subTitleRadio'] != "LIKE") echo "checked"; ?> value="LIKE">contain
<input type="radio" name="subTitleRadio" <?php if ($_SESSION['subTitleRadio'] == "=") echo "checked"; ?> value="=">be equal to
</p>
<input type="search" name="subTitleSearchBox" placeholder="filter for subtitle" class="chosenStyle" value="<?php echo $_GET['subTitleSearchBox'];?>">
</div> //Other Code
?>
PHP-код для установки значения в сеансе после отправки:
<?php
session_start(); //Not required if your form action is on same page, else required //Rest code
$_SESSION['subTitleRadio'] = $_GET['subTitleRadio'] // OR $_POST['subTitleRadio']; // Rest code
?>
Тот же код работает для меня.
в первую очередь в параметрах значения параметров, затем вы можете проверить, имеет ли exampleList правильное значение, и использовать его. например:
<option value="apple" <?php if (isset($_GET['exampleList']) && $_GET['exampleList'] == "apple") echo "selected=\"selected\""; ?>>Apple</option>
Ну, вы можете попробовать что-то в этом роде. Это немного долго, вы могли бы сократить его совсем немного. Показывая это таким образом, я надеюсь, что это проще понять.
<form action="" id="exampleForm" method="get">
<?php
if (isset($_GET['exampleCheckboxStatus'])) {
echo '<input type="checkbox" name="exampleCheckbox" checked> Check this';
} else {
echo '<input type="checkbox" name="exampleCheckbox"> Check this';
?>
<br />
<select name="exampleList[]" multiple>
<?php
if( in_array('apple', $_GET['exampleList']) ) {
echo '<option value="apple" selected>Apple</option>';
} else {
echo '<option value="apple">Apple</option>';
}
if( in_array('banana', $_GET['exampleList']) ) {
echo '<option value="banana" selected>Banana</option>';
} else {
echo '<option value="banana">Banana</option>';
}
if( in_array('cherry', $_GET['exampleList']) ) {
echo '<option value="cherry" selected>Cherry</option>';
} else {
echo '<option value="cherry">Cherry</option>';
}
?>
</select>
<input type="submit" value="Submit" id="submitButton">
</form>
Обратите внимание, что я добавил [] к имени выбора и исправил тег br.
Добавление [] изменит тип с «строка» (текст) на массив (несколько текстов). Затем мы можем проверить, какие тексты включены.
Попробуйте сами, поиграйтесь с кодом немного.