Programación Web y Scripting > PHP
Obtener datos de Select Multiple
xNeCrOx:
Tengo unas dudas que espero si me pueden ayudar.. primero que nada tengo el siguiente formulario
--- Código: Text ---<html> <head><title>Selecciona elementos en lista</title> <script type="text/javascript"><!-- function moveVals(n, from, to) { fromObj = document.getElementById(from); to = document.getElementById(to); if (n == 1 || n == 2) { var indTo = to.length-1; for (ii=fromObj.length-1; ii>=0; ii--) { if (n==1 || fromObj.options[ii].selected) { indTo++; to.options[indTo] = new Option(fromObj.options[ii].text, fromObj.options[ii].value); fromObj.options[ii] = null; } } } else if (n == 3 || n == 4) { var indFrom = fromObj.length-1; for (ii=to.length-1; ii>=0; ii--) { if (n==4 || to.options[ii].selected) { indFrom++; fromObj.options[indFrom] = new Option(to.options[ii].text, to.options[ii].value); to.options[ii] = null; } } }} function frmButtons() { var sel = document.getElementById("chosen"); var av = document.getElementById("avail"); if (sel.length <= 0) { document.frmAddPro.btnR.disabled = true; document.frmAddPro.btnRR.disabled = true; } else { document.frmAddPro.btnR.disabled = false; document.frmAddPro.btnRR.disabled = false; } if (av.length <= 0) { document.frmAddPro.btnL.disabled = true; document.frmAddPro.btnLL.disabled = true; } else { document.frmAddPro.btnL.disabled = false; document.frmAddPro.btnLL.disabled = false; }} function deleteFrom() { for (ii=0; ii<document.frmAddPro.elements.length-1; ii++) { if (document.frmAddPro.elements[ii].tagName.indexOf("SELECT") && document.frmAddPro.elements[ii].id.indexOf("av")) { alert("Cislo: "+ii+" Name: "+document.frmAddPro.elements[ii].tagName); } }}--></script></head><body> <center><form NAME="frmAddPro"> <table height="172"> <tr> <td WIDTH="170" CLASS="selCell" style="background-color: #FFFFFF" height="14"> Ciudades disponibles:</td> <td bgcolor="#FFFFFF" height="14"></td> <td WIDTH="170" CLASS="selCell" style="background-color: #FFFFFF" height="14"> Tu favorita:</td> </tr> <tr> <td height="150"><select MULTIPLE NAME="avail[]" ID="avail"> <option>Berlín</option> <option>Londres</option> <option>Luxemburgo</option> <option>Nueva York</option> <option>Paris</option> <option>Praga</option> <option>Tokyo</option> </select> </td> <td ALIGN="CENTER" VALIGN="CENTER" height="150"> <input TYPE="button" VALUE=">>" NAME="btnLL" onClick="moveVals(1, 'avail', 'chosen'); frmButtons(); return false;"><br> <input TYPE="button" VALUE=">" NAME="btnL" onClick="moveVals(2, 'avail', 'chosen'); frmButtons(); return false;"><br> <input TYPE="button" VALUE="<" NAME="btnR" onClick="moveVals(3, 'avail', 'chosen'); frmButtons(); return false;"><br> <input TYPE="button" VALUE="<<" NAME="btnRR" onClick="moveVals(4, 'avail', 'chosen'); frmButtons(); return false;"> </td> <td height="150"><select MULTIPLE NAME="chosen[]" id="chosen"></select> </td> </tr> </table></form></center><br></body></html>
Ahora quiero que los elementos en chosen[] escogidos previamente poder realizar una consulta en SQL en base de datos MySQL, con la salvedad de que cada option value del chosen[] sea una tabla de mi base de datos que tengo.
Ejemplo : Seleccione Berlin y Londres, por lo cual la consulta tendria que ser "SELECT * FROM berlin,londres"
Me entienden? como hago eso en PHP? es lo que no entiendo. Lo único que tengo es :
--- Código: Text --- foreach ($_POST['chosen'] as $indice => $valor){ echo "indice: ".$indice." => ".$valor."<br>"; }
Con lo que me garantiza que si obtengo los datos del select multiple "chosen", pero el relacionar esos datos a mis tablas es lo que me complica asi mostrar todos los datos de dichas tablas en una consulta MySQL, me pueden ayudar? si es que me explique bien en lo que quiero realizar. Porfavor
F_Tanori:
el problema es obtener el valor del arreglo o generar el sql?
--- Código: Text ---foreach ($_POST['chosen[]'] as $indice => $valor){ $Tablas .= $valor.","; } if (substr( $Tablas , -1, 1) == ",") { $Tablas=substr($Tablas, 0,strlen($Tablas) - 1);} $sql="SELECT * FROM ".$Tablas; echo $sql;
Saludos
* es un ejemplo y el codigo no esta probado ... :P porque no tengo apache en este momento
xNeCrOx:
Bueno te podría decir que las dos cosas jaja, el código sql y el php que no entiendo como hacerlo. Por cierto el código que pusiste ahí solo muestra "SELECT * FROM tabla", donde tabla es el atributo que haya escogido.. modifique lo que me entregaste llegue a esto....
--- Código: Text ---<?php foreach ($_POST['chosen'] as $indice => $valor){ $Tablas .= $valor.","; } if (substr( $Tablas , -1, 1) == ",") { $Tablas=substr($Tablas, 0,strlen($Tablas) - 1);} $conn = mysql_connect("localhost", "usuario", "password"); mysql_select_db("basedatos", $conn); $sql="SELECT * FROM ".$Tablas; $result = mysql_query($sql, $conn) or die(mysql_error()); while (list($rut,$apellido,$nombre) = mysql_fetch_array($result)) { echo "$rut,$apellido,$nombre"; }?>
Lo bueno es que me muestra tres columnas de la tabla que haya escogido ahora me falta filtrarla para que me muestre lo que quiero de acuerdo a la tabla que haya escogido, en ese código que puse, es en el caso que haya escogido la tabla funcionarios del chosen del formulario anterior (un option value nuevo por si acaso no son las ciudades puestas anteriormente)... Cuando lo modifique y pueda mejorarlo lo posteare. Si tengo nuevos problemas también lo posteare aqui xD!..
Muchas gracias por la ayuda.
xNeCrOx:
MMmmm aún no hayo como poder filtrar el resultado, si bien me muestra los resultados de los atributos y tablas que escogi con el formulario anterior, el problema me surge al filtrarlo, me explicó. Si yo escogó un elemento por ejemplo "funcionarios" debería mostrarme los datos de los funcionarios, si escogó "centro costo" deberia mostrarme los datos del centro de costo, eso lo hace, pero que pasa si pongo "funcionarios" y "centro costo" y selecciono ambos, me queda la ensalada pues me muestra el primer elemento y repetido dos veces, no considera el segundo elemento que también había elegido tengo este código para "filtrar" aunque se que esta erroneo aun no hayo el asunto...
--- Código: Text ---<?php foreach ($_POST['chosen'] as $indice => $valor){ $Tablas .= $valor.","; } if (substr( $Tablas , -1, 1) == ",") { $Tablas=substr($Tablas, 0,strlen($Tablas) - 1);} for($i=0;$i<count($indice);$i++){ if($valor[$i]="funcionarios"){ $conn = mysql_connect("localhost", "user", "contraseña"); mysql_select_db("basedatos", $conn); $sql="SELECT * FROM ".$Tablas; $result = mysql_query($sql, $conn) or die(mysql_error()); while (list($rut,$apellido,$nombre) = mysql_fetch_array($result)) { echo "$rut,$apellido,$nombre"; } }elseif ($valor[$i]="centro_costo"){ $conn = mysql_connect("localhost", "user", "contraseña"); mysql_select_db("basedatos", $conn); $sql="SELECT * FROM ".$Tablas; $result = mysql_query($sql, $conn) or die(mysql_error()); while (list($idcentrocosto,$centrocosto) = mysql_fetch_array($result)) { echo "$icentrocosto,$centrocosto"; } } else{ echo "no hubo resultados" ; } }?>
shadow_rev:
Lección de SQL:
SELECT * FROM tabla1, tabla2, ..., tablaN; implica hacer un JOIN entre las tablas, esto es, hacer una permutación de todos los campos de todas las tablas; por ejemplo, si tienes en tabla1 a 'perro, canino' y a 'iguana, lagarto' y en tabla2 tienes 'reptil, escamoso' y 'mamifero, peludo', el resultado va a ser 'perro, canino, reptil, escamoso', 'perro, canino, mamifero, peludo', 'iguana, lagarto, reptil, escamoso' y 'iguana, lagarto, mamifero, peludo'.
Esto se puede filtrar cuando las tablas tienen campos en común (tabla2 tiene n llaves foráneas a la llave primaria de tabla1) agregando un WHERE cuando tienes varias tablas, pero para lo que buscas, es complicado definirlo, sencillamente porque no sabes que tablas van a seleccionar (supongo, a menos que todas las tablas se relacionen con todas). Si necesitas mostrar la información de cada tabla seleccionada sin que estas no esten relacionadas, tendrás que hacer la consulta por cada tabla:
--- Código: Text --- // ...foreach($array_con_las_tablas as $tabla){ $sql = "SELECT * FROM $tabla"; // ... ejecutas la consulta y el resultado lo guardas}
:suerte:
Navegación
[#] Página Siguiente
Ir a la versión completa