Pase la lista de selección a la página php

Actualmente estoy tratando de pasar una lista de selección (la lista completa) a una página php y tomando los valores individuales de la lista para hacer una consulta SQL dinámica. Paso selectItems, pero cuando realizo un eco, obtengo

[objeto HTMLSelectElement]

También intenté pasar selectItems.value, pero eso solo pasa en uno de los 3 elementos de la lista. He buscado el último día y no he tenido mucho éxito. No estoy muy seguro de cómo abordar esto. Cualquier ayuda sería muy apreciada.

La lista de selección actual es la siguiente

    <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')">

Un fragmento de la función showtable a continuación, básicamente estoy tratando de pasar la lista (indicada por q) y la ubicación de la página.

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

preguntado el 08 de marzo de 13 a las 21:03

2 Respuestas

Su método onclick inicial no pasaba a través del nodo Seleccionar al principio, e incluso entonces, está enviando a través del nodo real a PHP; no los valores extraídos.

Como dijo el mismo dm03514, puede serializar la cadena de consulta en forma de una matriz de PHP para que sea más fácil de administrar a nivel de PHP.

jsviolín: 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' );">

Además, su ejemplo tenía citas incorrectas, no estoy seguro si eso es solo en su ejemplo o en su código, por ejemplo: tipo = botón debería ser tipo = "botón".

Espero haber entendido bien tu pregunta! :)

respondido 11 mar '13, 16:03

Desafortunadamente, no pude obtener el código para serializar. :( ¿Por qué usamos .selectedOptions? ¿Toma eso solo los valores seleccionados del cuadro de lista? Me gustaría tomar todo independientemente de la selección. Cuando intento hacer eco de q en la página php, nada parece cargarse desde php. ¿Algunas ideas? - rawrpowershell

Bueno, actualicé mi respuesta para simplemente iterar las opciones, pero lógicamente, solo necesita los elementos seleccionados porque ya conoce los valores de los otros elementos, ¡0! Entonces, si tuviera que enviar todos los valores de una selección de lista... casi anula su propósito en primer lugar, porque ¿cómo puede diferenciar los verdaderos/falsos? Que es donde las casillas de verificación son probablemente una mejor opción. Por último, si carga la página directamente en su navegador (yoursite/getquery.php?q=test), y no hay eco de 'prueba', es posible que deba verificar su código PHP en busca de errores. MackieeE

Niza JSfiddle es muy útil. La razón por la que necesito tomar todos los elementos de la lista es porque tengo 2 funciones de botón, una función consultará los elementos individuales y la que estoy trabajando ahora consultará todo lo que esté dentro de la lista. El código funciona muy bien, pero cuando lo paso a una página php simple, no se carga. Actualmente estoy haciendo $q=$_GET["q"]; eco $q; pero parece que no le gustan los valores que paso de la serialización. Agradezco la increíble ayuda hasta ahora :) - rawrpowershell

¡Está bien! =] Primero, haz: die( $_GET ); en su getquery.php, si no aparece nada, entonces nada llega a la página desafortunadamente. Si ese es el caso, sigue este Página de Stackoveflow aquí que escucha todas las solicitudes HTTP (Ajax) que salen de su página actual, por lo que cuando hace clic en el botón, verifique a dónde va la solicitud Ajax ... =) - MackieeE

Disculpas, tuve que editar una pequeña parte del código porque ?q= siempre regresaba vacío (pero los otros valores seguían apareciendo) - MackieeE

puedes serializar los valores html

lo que php está buscando es una matriz de valores, es decir.

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

Esto le permitirá acceder a todos los valores como una matriz en php.

Ahora en cuanto a la mejor manera de hacerlo. No sé usar javascript de vainilla. ¿Puede recorrer todos los valores seleccionados y crear su propia cadena de consulta?

respondido 08 mar '13, 21:03

Intenté serializar, pero no estaba seguro de si esa era la ruta correcta, ya que no pude hacer que funcionara correctamente. Básicamente, mi resultado fue s:26:"[object HTMLSelectElement]"; - rawrpowershell

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.