PHP - SELECT MULTIPLE ANIDADO....

 
Vista:
Imágen de perfil de Hfr
Val: 36
Ha disminuido su posición en 52 puestos en PHP (en relación al último mes)
Gráfica de PHP

SELECT MULTIPLE ANIDADO....

Publicado por Hfr (93 intervenciones) el 07/06/2018 04:49:07
hola chicos buenas noches...
este el codgio que todo el mundo usa para los select anidos

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<script language="javascript" >
  $(document).ready(function(){
   $("#ciudad").change(function () {
	 $("#ciudad option:selected").each(function () {
	  elegido=$(this).val();
	  $.post("modelos.php", { elegido: elegido }, function(data){
		$("#cc").html(data);
	  });
	});
   })
 });
</script>
 
<script language="javascript" >
  $(document).ready(function(){
   $("#cc").change(function () {
	 $("#cc option:selected").each(function () {
	  elegido=$(this).val();
	  $.post("modelos2.php", { elegido: elegido }, function(data){
		$("#centros").html(data);
	  });
	});
   })
 });
</script>

de 3 niveles

resulta que el campo #cc y #centros son selcet multiple....

1
2
3
4
5
6
<div class="form-group">
	el class="control-label ">Centro de costos</label>
	<select name="cc" id="cc" class="form-control" required="required" multiple>
		<option value="">Seleccione....</option>
	</select>
</div>
en fin---...

Al ser múltiples en el parámetro name="cc" debería ir name="cc[ ]" y esto se debe al que el segundo debo hacer un select dinámico y no un select * from where....

Entonces resulta que no sé cómo enviar el array del post...
En modelos2 yo recibo $_post['eleido'];
Pero como el cargue múltiple se hace con JS no sé cómo indicarle que envié un array elegido... para que haga el query dinámico...
y esto se debe el primer nivel select es normal. y se escoge una sola opción, en el segundo es un select múltiple y debo de seleccionar todas las opciones que quiera..... y con esas opciones debería recibir una array car cárgalos en el tercer select que es multiple...
Estoy varado



modelo 1-....
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
 
include_once "../PHP/instanciasion/instanciaobjetos.php"; /*  llamado del archivo instrancion , en onde se instancias todas las depencias de clases y objetos para la consulta de datos  
  *  */
/* 
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
 
 
if ($_POST["elegido"]!="") {
 
    $idcentroscostos=$centrosdecostos->consultarccforidciudad($_POST["elegido"]);
 
	 foreach ($idcentroscostos as $rowx){ ?>
 
        <option value="<?php echo  $rowx['id_programa'];  ?> "><?php echo  $rowx['id_programa'].utf8_encode($rowx['nombre_programa']);  ?></option>
 
        <?php }
}

no tiene pierde


modelo 2



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
include_once "../PHP/nomina/con_mysql.php"; /*  llamado del archivo instrancion , en onde se instancias todas las depencias de clases y objetos para la consulta de datos  
  *  */
/* 
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
 
$totalid=  $_POST['elegido'];
 
 
$query ="SELECT subc_id,  subc_nombre  FROM subcentrocostos where  subc_idcentrocosto= '".$totalid[0]."'  ";
 
// ciclo, for, que repite la etiquita del query segun la cantidad de id del centros de costos recibos por 
//la variable totalid
 
 
for ($i = 1; $i <count($totalid); $i++) {
 
	// se concaneta la variable queyr  
	$query .= " or  subc_idcentrocosto='".$totalid[$i]."' ";
}
 
 
$query .="  GROUP BY subc_id ORDER BY subc_nombre ";
// se ejecuta el query 	
$consulta=mysqli_query(conexion::conectar(),$query);
 
//se retorna el array con los los datos  de la consulta 
if ($consulta!=null)
{
	foreach ($consulta as $p ){ ?>
 
 
    <option value="<?php echo  $p['subc_id']  ?>"><?php echo  $p['subc_nombre']  ?></option>
 
    <?php }
}else {
 
    for ($i = 1; $i <count($totalid); $i++) {
 
    ?>
 
    <option value=""><?php echo $totalid[$i] ?></option>
 
<?php 	} }
?>

No sé cómo recibir el parámetro elegido como un array, para ejecutar el query dinámico..
Ya probé dejando var_dum($_post['elegido']) y nada.... alguien me puede dar una mano porfis....


El ELSE FINAL, lo coloque para que me imprimía y no imprime nada jajajaja que triste....
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro
Val: 1.634
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

SELECT MULTIPLE ANIDADO....

Publicado por Alejandro (839 intervenciones) el 07/06/2018 16:02:48
  • Alejandro se encuentra ahora conectado en el
  • chat de PHP
Modelo 1
1
$idcentroscostos=$centrosdecostos->consultarccforidciudad(explode(",",$_POST["elegido"]));

Modelo 2
1
$totalid=  explode(",",$_POST['elegido']);
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Hfr
Val: 36
Ha disminuido su posición en 52 puestos en PHP (en relación al último mes)
Gráfica de PHP

SELECT MULTIPLE ANIDADO....

Publicado por Hfr (93 intervenciones) el 08/06/2018 03:53:22
super amigo. fucniona.... y deje el codigo limpio...
dentro de una funcion dentro de una clase.... como todo buen phpero dejo el codigo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<?php
include_once "con_mysql.php";  // CALSE QUE CONTIENE LAS CADENAS DE COXION A NUESTRA DBO.
// CLASE subcentrosdecostos.
class subcentros{
 
	//FUNCION para consultar los subcentros de costos segun los id de los centros de costo traido 
	// recibe un array del metodo post... 
	//devulve el listado de los subcentros de costos 
public function consultarsucentros($totaldis){
 
 
$totalid=explode(",",$totaldis);
 
//queury dinamico 
	$query ="SELECT subc_id,  subc_nombre  FROM subcentrocostos where  subc_idcentrocosto= '".$totalid[0]."'  ";
 
	// ciclo, for, que repite la etiquita del query segun la cantidad de id del centros de costos recibos por 
	//la vaible totalid
 
	for ($i = 1; $i <count($totalid); $i++) {
 
		// se concaneta la variable queyr  
		$query .= " or  subc_idcentrocosto= '".$totalid[$i]."' ";
	}
	/// se concatena el query para order y no repetir id 
    $query .="  GROUP BY subc_id ORDER BY subc_nombre ";
 
	// se ejecuta el query 	
	$consulta=mysqli_query(conexion::conectar(),$query);
    //se retorna el array con los los datos  de la consulta 
	return  $consulta;
 
 
 /* fin de la funcion 
 */
}
 
 
 /* fin de la clase  
 */
}



pero....
Pasa algo raro... y no sé de donde es....

Cuando selecciono n opciones del nivel dos... el nivel 3 solo me carga las opciones de una opción no todas opciones de las opciones seccionadas en el nivel 2 ya verifique imprimiendo el string que tiene la variable query.. y esta bien … como tiene que salir…. Quede como todo ploppp..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alejandro
Val: 1.634
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

SELECT MULTIPLE ANIDADO....

Publicado por Alejandro (839 intervenciones) el 08/06/2018 16:01:47
  • Alejandro se encuentra ahora conectado en el
  • chat de PHP
Cuando recibes los datos te llegan como cadena Ej. 1,2,3,4,n
Explode lo convierte en array separando los elementos por el caracter especificado, en este caso la coma.
En tu programa tienes que iterar el array para agregar tantos OR como elementos en el array, es codigo inecesario.

Recibiendo los datos como cadena tu consulta seria
1
$query ="SELECT subc_id, subc_nombre FROM subcentrocostos WHERE subc_idcentrocosto IN (".$totalid.")  GROUP BY subc_id ORDER BY subc_nombre ";
sin necesidad del codigo del for

Si la consulta ya esta bien y no obtienes los datos verifica que existan en la base de datos, si existen tus datos ejecuta la consulta directamente en la consola y si obtienes los datos correctos entonces revisa tu programacion.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
Imágen de perfil de Hfr
Val: 36
Ha disminuido su posición en 52 puestos en PHP (en relación al último mes)
Gráfica de PHP

SELECT MULTIPLE ANIDADO....

Publicado por Hfr (93 intervenciones) el 10/06/2018 19:17:52
no e como recibir a varible del $_post['elegido']

como una array con d=explode(",",$_post['elegido'])... solo me una toma una opcion de select multiple...
al hacere el sql con la funcion in($d)...
me imprime la palabra array...
entonces user un for... para realizar las iteraciones... pero no funciona solo me trae una opcion y no y el resto de opciones selecionadas del combo box de nivel 2


1
SELECT subc_id,  subc_nombre  FROM subcentrocostos subc_idcentrocosto IN( 'Array' )     GROUP BY subc_id ORDER BY subc_nombre

intenete dejarlo con iterCIONES EN UN CICLO FOR y nada...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Hfr
Val: 36
Ha disminuido su posición en 52 puestos en PHP (en relación al último mes)
Gráfica de PHP

SELECT MULTIPLE ANIDADO....

Publicado por Hfr (93 intervenciones) el 10/06/2018 20:11:03
tengo una pregunta de mero....

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
$p=$_POST['elegido'];
 
$query ="SELECT subc_id,  subc_nombre  FROM subcentrocostos subc_idcentrocosto IN( '".$p[0]."'   ";
 
/*
for ($i = 0; $i<=count($totalid); $i++) {

	// se concaneta la variable queyr  

	$query .= " or  subc_idcentrocosto= '".$totalid[$i]."'  ";

}
*/
 
$h="";
for ($i=1, $size = count($p); $i<$size;$i++) {
 
$query.=",'".$p[$i]."' ";
 
	// se concaneta la variable queyr
}
$query.=")"
 
?>
 
<textarea name="" id="input${1/(\w+)/\u\1/g}" class="form-control" rows="20" cols="150" required="required"><?php  echo $query  ?></textarea>


si yo ejeceuto este codigo... imprime bien query que nesesito... al pasar solo lo de php en archivo de modelos2.php muere... y no hace nada...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alejandro
Val: 1.634
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

SELECT MULTIPLE ANIDADO....

Publicado por Alejandro (839 intervenciones) el 11/06/2018 16:55:16
  • Alejandro se encuentra ahora conectado en el
  • chat de PHP
Parece que no entendiste.

Si elegiste 1, 2 y 3 entonces envias una cadena "1,2,3"

Si recibes la cadena tal cual te la enviaron
1
2
$p = $_POST['elegido']; // p="1,2,3"
$query = "SELECT * FROM Tabla WHERE Campo_ID IN ($p)";  // SELECT * FROM Tabla WHERE Campo_ID IN (1,2,3)

Si recibes la cadena y con explode() la conviertes en arreglo
1
2
3
4
5
6
$p = explode(',',$_POST['elegido']); // $p = array(1,2,3); $p[0]=1, $p[1]=2, $p[2]=3
 
$query = "SELECT * FROM Tabla WHERE Campo_Id=$p[0]";
for($i=1; $i<3; $i++){
	$query .= " OR Campo_id=$p[$i] ";
}// SELECT * FROM Tabla WHERE Campo_Id=1 OR Campo_Id=2 OR Campo_Id=3


Revisando tu ajax haces una peticion por cada item seleccionado
1
2
3
4
5
6
7
8
9
10
11
12
<script language="javascript" >
  $(document).ready(function(){
   $("#ciudad").change(function () {
	 $("#ciudad option:selected").each(function () {
	  elegido=$(this).val();
	  $.post("modelos.php", { elegido: elegido }, function(data){
		$("#cc").html(data);
	  });
	});
   })
 });
</script>
#cc se va sobre escribiendo y al final solo queda el ultimo

Aqui se envian todos los seleccionados en una unica peticion y en php usas el ejemplo con el IN()
1
2
3
4
5
6
7
8
9
10
11
12
13
<script language="javascript" >
	$(document).ready(function(){
		$("#ciudad").change(function () {
			aElegidos = [];
			$("#ciudad option:selected").each(function () {
				aElegidos.push($(this).val());
			});
			$.post("modelos.php", { elegido: aElegidos.join(',') }, function(data){
				$("#cc").html(data);
			});
		});
	 });
</script>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar