
cargar <select> dinamicamente
Publicado por Eduardo (17 intervenciones) el 21/07/2020 18:17:11
Saludos expertos,
Tengo la siguiente página:
En esta parte del código cargo dos arrays desde archivos CSV:
Luego en la vista, lleno el <select> marcas y creo un <select> vacio para mostrar en el los productos:
La idea es que cada vez que el usuario seleccione una "marca", el <select> "productos" se llene con los productos SOLO de esa marca (la lista de productos esta contenida en el array $list_prod y uno de los campos tiene el código de la marca).
He buscado en la red la mejor manera de hacerlo y he visto bastante controversia, algunos dicen que solo con PHP no se puede, que se requiere JavaScript, pero JavaScript no puede recibir un array desde PHP asi que no tengo forma de pasar el array $list_prod a la función JavaScript, otros dicen que se debe usar AJAX, pero todos los ejemplos que he visto no usan un array, son datos tipos Json, por lo que estoy bastante confundido.
Alguien con experiencia me podría indicar por favor cual es la manera más optima de realizar esta funcionalidad.
Agradeciendo su atención y tiempo de antemano, reciban un cordial saludo.
Tengo la siguiente página:
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
<?php
session_start() ;
require('funcion.php') ;
$SMem = $_SESSION;
if ( isset($SMem['mem_clicod']) ) {
$clie_codigo = $_SESSION["mem_clicod"] ;
$clie_data = GetClieData($clie_codigo);
if ( count($clie_data) > 0 ) {
$clie_ruc = $clie_data[1] ;
$clie_nombre = $clie_data[2] ;
$clie_cat = $clie_data[3] ;
$clie_gpo = $clie_data[4] ;
$clie_plan = $clie_data[5] ;
$clie_vend = $clie_data[6] ;
$clie_pp = $clie_data[7] ;
$clie_mail = $clie_data[8] ;
$clie_dias = $clie_data[9] ;
$clie_line = $clie_data[10] ;
$clie_cons = $clie_data[11] ;
$clie_esta = $clie_data[12] ;
$clie_canj = $clie_data[13] ;
// Se cargan los productos
$prod_csv = 'lista.csv' ;
$list_prod = csv_to_array( $prod_csv ) ;
// Se cargan las marcas
$mark_csv = 'marcas.csv' ;
$list_mark = csv_to_array( $mark_csv ) ;
foreach ( $list_mark as list($mrk_cod,$mrk_nom,$mrk_cnj) ) {
if ( $mrk_cnj != 'SIN CANJE' ) {
$cmb_mark .=" <option value='".$mrk_cod."'>".$mrk_nom." -> ".$mrk_cnj."</option>";
}
}
}
}else{
header('Location: login.php');
}
?>
<html lang="es">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0" />
<link rel="stylesheet" href="css/navega.css" />
<link rel="stylesheet" href="css/lista.css" />
<title>Solicitud de canje por vencimiento próximo.</title>
</head>
<body>
<div class="contenido">
<div class="cabecera">
<img src="imagen/logo-largo.png" />
</div>
<div class="info">
<?php
$hoy = date("d-m-Y") ;
echo "<H2>Bienvenido ".$clie_nombre." </br>" ;
echo "Hoy es ".obtenerFechaEnLetra($hoy)."</H2>" ;
?>
</div>
<div class="navegador">
<a href="noticias.php">Noticias</a>
<a href="lista.php">Lista</a>
<a href="pedido.php">Pedido</a>
<a href="catalogo.php">Catálogo</a>
<a href="pendientes.php">Pendientes</a>
<a href="transito.php">Tránsito</a>
<a href="clave.php">Clave</a>
<a href="observa.php">Observaciones</a>
<a class="active" href="#">Canjes</a>
</div>
<form action='canjes_agregar.php' method='get'>
<div class="buscador">
<label for="marcas">Labo./Marca:</label>
<?php
echo "<input type='hidden' name='get_clicod' value='".$clie_codigo."'>";
?>
<select class="clidat" id="marcas" name="marcas" onchange="cargaProductos()">
<?php echo $cmb_mark; ?>
</select>
<select class="clidat" id="productos" name="productos">
//
</select>
<input type='text' name='lote' placeholder='lote...'>
<input type='number' name='unidades' size='8' maxlength='5' min='1' max='1000' value='1'>
<input type='submit' value='Agregar'>
</div>
</form>
<div class="listadeprecios">
<?php include 'canjes_carga.php' ; ?>
</div>
<div class="piedepagina">
<p><center>Derechos de copia reservados 2020</center></p>
</div>
</div>
</body>
</html>
En esta parte del código cargo dos arrays desde archivos CSV:
1
2
3
4
5
6
7
8
9
10
// Se cargan los productos
$prod_csv = 'lista.csv' ;
$list_prod = csv_to_array( $prod_csv ) ;
// Se cargan las marcas
$mark_csv = 'marcas.csv' ;
$list_mark = csv_to_array( $mark_csv ) ;
foreach ( $list_mark as list($mrk_cod,$mrk_nom,$mrk_cnj) ) {
if ( $mrk_cnj != 'SIN CANJE' ) {
$cmb_mark .=" <option value='".$mrk_cod."'>".$mrk_nom." -> ".$mrk_cnj."</option>";
Luego en la vista, lleno el <select> marcas y creo un <select> vacio para mostrar en el los productos:
1
2
3
4
5
6
<select class="clidat" id="marcas" name="marcas" onchange="cargaProductos()">
<?php echo $cmb_mark; ?>
</select>
<select class="clidat" id="productos" name="productos">
//
</select>
La idea es que cada vez que el usuario seleccione una "marca", el <select> "productos" se llene con los productos SOLO de esa marca (la lista de productos esta contenida en el array $list_prod y uno de los campos tiene el código de la marca).
He buscado en la red la mejor manera de hacerlo y he visto bastante controversia, algunos dicen que solo con PHP no se puede, que se requiere JavaScript, pero JavaScript no puede recibir un array desde PHP asi que no tengo forma de pasar el array $list_prod a la función JavaScript, otros dicen que se debe usar AJAX, pero todos los ejemplos que he visto no usan un array, son datos tipos Json, por lo que estoy bastante confundido.
Alguien con experiencia me podría indicar por favor cual es la manera más optima de realizar esta funcionalidad.
Agradeciendo su atención y tiempo de antemano, reciban un cordial saludo.
Valora esta pregunta


0