重新加载时保留 select 列表

Keep select list on reload

我有一个 select 列表,但是在页面重新加载时,列表中的数据没有被保存。 我已经通过从 $_GET 读取变量来使用 TextBoxes 和 Radio 按钮解决了这个问题。 这是我现在的表格示例:

<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 的了解还不够(还)

使用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,Session值也不会被破坏。

例如,

<?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>
<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表单时,您只需将选定的选项值以逗号分隔写入本地存储。

好吧,你可以按照这些思路尝试一些东西。它有点长,你可以缩短它很多。通过这种方式展示,我希望它更容易理解。

<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>

请注意,我在 select 的名称中添加了 [] 并更正了 br 标签。

添加 [] 会将类型从 "string"(文本)更改为数组(多个文本)。然后我们可以检查包含哪些文本。

亲自尝试一下,稍微修改一下代码。

我终于找到了解决方案: 唯一的缺陷是顺序:) 不过因为我是用插件显示的,所以没关系。

修复: 我创建了 2 个数组列表 list1 全部都在里面 list2 包含所有选定值

然后我从 list1 中减去 list2 并且没有重复项 所以我可以用不同的打印方法打印。

<?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>