【问题标题】:How to store selected <options> into PHP array?如何将选定的 <options> 存储到 PHP 数组中?
【发布时间】:2015-07-08 10:27:47
【问题描述】:

所以我试图将选定的&lt;option&gt;&lt;/option&gt; 标记存储到一个数组中。我到处搜索,找不到任何“好”的方法。

<form action='most-liked.php'>
            <select multiple name='choose-category' style='display: inline-block;'>
            <?php
                $allCategories = ["All", "Sport", "Automotive", "Comedy", "Misc"];
                $htmlOutput = "";
                $i=0;
                    for($i;$i<sizeof($allCategories);$i++)
                    {
                        $htmlOutput .= "<option value='".$allCategories[$i]."'>".$allCategories[$i]."</option>";
                    }   
                echo $htmlOutput;
            ?>
            </select>
</form>

我想知道是否有一种方法可以在不重新加载整个页面的情况下即时将所选选项添加到array...例如,当他们选择其中一个&lt;option&gt; 时,它的值将被存储。我认为jQuery 可能有办法做到这一点?

我在想也许可以使用$_GET[] 或其他东西。但不太确定我会怎么做。

【问题讨论】:

  • Javascript/JQuery 不能直接与 PHP 交互。他们只能通过GET 或POST 方法来做到这一点,这可以通过提交表单或使用Ajax 来完成。

标签: php jquery arrays


【解决方案1】:

将&lt;select&gt;的名称更改为:

choose-category[]

所以你的代码现在看起来像:

<select multiple name='choose-category[]' style='display: inline-block;'>

另外,最好避免在名称中使用-s,所以这是正确的:

<select multiple name='choose_category[]' style='display: inline-block;'>

您可以使用以下方式访问它:

$_REQUEST["choose_category"]

给你一个数组!

【讨论】:

  • 使用 $_REQUEST[] 不返回任何内容?我是否必须将 $_REQUEST[] 放在 if(isset($_POST['button'])){ echo $_REQUEST['choose_category']]} 中才能实际打印?
  • 不不,我只是给了$_REQUEST。使用$_GET 或$_POST。
  • 如何打印出selected 值与我在问题中的形式以及我对&lt;select name='choose_category'&gt; 所做的更改?我似乎无法让它真正打印出来。抱歉,我不是 PHP 方面的专家。
【解决方案2】:

更改您的select

来自

 <select multiple name='choose-category' style='display: inline-block;'>

到

<select multiple name='choose_category[]' style='display: inline-block;'>

现在您的choose_category 是一个数组,您何时提交它。您将收到一个帖子 array,其中包含所有已选择的值

【讨论】:

    【解决方案3】:

    您可以使用 jQuery 进行如下操作..

    <form action='most-liked.php'>
                <select id="Category" multiple name='choose-category' style='display: inline-block;'>
                <?php
                    $allCategories = ["All", "Sport", "Automotive", "Comedy", "Misc"];
                    $htmlOutput = "";
                    $i=0;
                        for($i;$i<sizeof($allCategories);$i++)
                        {
                            $htmlOutput .= "<option value='".$allCategories[$i]."'>".$allCategories[$i]."</option>";
                        }   
                    echo $htmlOutput;
                ?>
                </select>
    </form>
    <script>
    var foo = []; 
     $('#Category').change(function() {
         $('#Category :selected').each(function(i, selected){ 
              foo[i] = $(selected).text(); 
        });   alert(foo);
     }); 
    
    </script>
    

    【讨论】:

    • 如果我打算使用 AJAX,我想我可以使用这个选项?
    • 是的,为了避免重新加载,你应该使用 Ajax 或这种类型的 js
    猜你喜欢
    • 2018-04-17
    • 2013-07-31
    • 2010-10-04
    • 2013-10-13
    • 1970-01-01
    • 2021-08-30
    • 1970-01-01
    • 2012-07-19
    • 2015-08-31
    相关资源
    最近更新 更多