【问题标题】:Pass select list to php page将选择列表传递给 php 页面
【发布时间】:2013-02-24 13:02:42
【问题描述】:

我目前正在尝试将一个选择列表(整个列表)传递到一个 php 页面并从列表中获取各个值来执行动态 sql 查询。我传入了 selectItems,但是当我执行回显时,我得到了

[对象 HTMLSelectElement]

我也尝试过传入 selectItems.value,但只传入了 3 个列表项之一。我搜索了过去一天,但没有取得太大成功。我不太确定如何处理这个问题。任何帮助将不胜感激。

当前选择列表如下

    <select multiple name="selectItems" size="6" id="selectItems">
    <option value="value1" selected="selected">value1</option>
    <option value="value2" >value2</option>
    <option value="value3" >value3</option>
    </select>

    <input type=button id="opener" value='Clickme' onclick="showTable(selectItems, 'getquery.php')">

来自下面的showtable函数的sn-p,我基本上是在尝试传递列表(用q表示)和页面的位置。

xmlhttp.open("GET",page+"?q="+str,true);
xmlhttp.send();

【问题讨论】:

    标签: php javascript


    【解决方案1】:

    您的初始 onclick 方法一开始并没有通过 Select 节点,即便如此 - 您正在通过实际节点本身向 PHP 发送;不是提取的值。

    正如 dm03514 自己所说,您可以将查询字符串序列化为 PHP 数组的形式,以便在 PHP 级别更易于管理。

    jsFiddle:http://jsfiddle.net/7dtXs/1/

        <script type="text/javascript">
        function showtables( selectObj, page ) {
    
            var xmlhttp = new XMLHttpRequest();
            var str = "";
    
            var AllOptions = selectObj.options;
            var SelectedOptions = selectObj.selectedOptions;
    
           /**
            *   Iterate through each Object that is selected
            *   From here you can pick out:
            *       - id name
            *       - value
            *   etc, to form a query string 
           **/
           for ( var x = 0; x < AllOptions.length; x++ ) {
               str +=  ( !x ? "" : "&" ) 
                       + AllOptions[x].value + "=" + AllOptions[x].textContent;
           }
    
          /** 
           *    if apples & shaz.. selected   
           *    str now contains:
           *        &value1=Apples&vsalue2=shazbots
          **/
          console.log( str );
    
          xmlhttp.open("GET", page + "?" + str, true);
              xmlhttp.send();
          }
      </script>
    
        <select multiple name="selectItems" size="6" id="selectItems">
            <option value="value1">Value1</option>
            <option value="value2">Value2</option>
            <option value="value3">Value3</option>
        </select>
    
        <!-- Passing through ID.selectedOptions to function -->
    <input type="button" id="opener" value="Clickme" onclick="showtables( document.getElementById('selectItems'), 'getquery.php' );">
    

    此外,您的示例确实有错误引用,不确定这只是您的示例还是您的代码 - 例如:type=button 应该是 type="button"。

    希望我正确理解了您的问题! :)

    【讨论】:

    • 不幸的是,我无法让代码序列化。 :( 为什么我们使用 .selectedOptions?这是否只抓取列表框的选定值?我想抓取所有它而不考虑选择。当我尝试在 php 页面中回显 q 时,似乎没有从 php 加载。有什么想法吗?
    • 好吧,我已经更新了我的答案以简单地迭代选项 - 但从逻辑上讲,您只需要选定的项目,因为您已经知道其他项目的值,0!因此,如果您要发送列表选择的所有值.. 它几乎首先违背了它的目的,因为您如何区分真/假?这就是复选框可能是更好的选择的地方。最后,如果您直接在浏览器中加载页面 (yoursite/getquery.php?q=test) - 并且没有“测试”的回声 - 您可能需要检查您的 PHP 代码是否有错误
    • Nice JSfiddle 很有帮助。我需要获取所有列表项的原因是因为我有 2 个按钮功能,一个功能将查询单个项目,而我现在正在处理的一个功能将查询列表中的所有内容。该代码效果很好,但是当我将它传递给一个简单的 php 页面时,它不会加载。我目前正在做 $q=$_GET["q"];回声 $q;但它似乎不喜欢我从序列化中传入的值。到目前为止,我感谢您提供的出色帮助 :)
    • 没关系! =] 首先,做: die( $_GET );在您的 getquery.php 中,如果什么都没有出现,那么没有任何东西可以到达页面。如果是这种情况,请遵循此Stackoveflow page here,它会侦听从当前页面发出的所有 HTTP (Ajax) 请求,因此当您单击按钮时,请检查 Ajax 请求的去向.. =)
    • 抱歉,我不得不编辑一小部分代码,因为 ?q= 总是返回空值(但其他值仍然出现)
    【解决方案2】:

    您可以序列化 html 值

    php 正在寻找的是一个值数组 IE。

    http://example.com/?selectItems[]=test&amp;selectItems[]=test1

    这将允许您在 php 中以数组的形式访问所有值。

    现在说到做到这一点的最佳方法。我不知道使用香草 javascript。您可以遍历所有选定的值并构建自己的查询字符串?

    【讨论】:

    • 我尝试过序列化,但我不确定这是否是正确的路线,因为我无法让它正常工作。基本上我的输出是 s:26:"[object HTMLSelectElement]";
    猜你喜欢
    • 2016-08-22
    • 2016-03-04
    • 1970-01-01
    • 2011-10-13
    • 1970-01-01
    • 2015-05-17
    • 1970-01-01
    • 2011-09-15
    • 1970-01-01
    相关资源
    最近更新 更多