PHP - Pasar valores a select de formulario

   
Vista:

Pasar valores a select de formulario

Publicado por Endika (14 intervenciones) el 25/08/2017 14:12:12
Buenas. Estoy trabajando con un formulario que contiene entre otras cosas provincias y municipios en dos selects. Hasta ahora he conseguido que al elegir una provincia del select con ID provincia, se pase a un fichero PHP que a su vez entra en un case con una función que arma una query y devuelve el valor de la query.

Mi problema es que no se cómo hacer para que esos valores lleguen al fichero que tiene el formulario y los vaya añadiendo al select con ID municipio. ¿me podéis ayudar? Estoy atascado en este punto. gracias de antemano. Comparto el código:


1
2
3
4
5
6
7
8
9
10
11
12
<div class="form-group col-lg-6 col-md-6 col-sm-6 col-xs-12">
	<label>Provincia:</label>
	<select id="provincia" name="provincia" class="form-control selectpicker" data-live-search="true" required>
	<option value="">Selecciona la provincia del cliente</option>
	</select>
</div>
<div class="form-group col-lg-6 col-md-6 col-sm-6 col-xs-12">
	<label>Municipio:</label>
	<select id="municipio" name="municipio" class="form-control selectpicker" data-live-search="true" required>
	<option value="">Selecciona provincia primero</option>
	</select>
</div>

Esos son los dos campos del form, que están en un fichero. En el mismo fichero después tengo este script JS para enviar la provincia por AJAX a otro fichero PHP:

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
<script src="jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
	//$('#provincia').on('change',function(){
	$('#provincia').change(function(){
		var provinciaID = $(this).val();
		//var provinciaID = this.value;
		var data = {'provinciaID': provinciaID};
		if(provinciaID){
			alert(provinciaID);
			$.ajax({
				type:'POST',
				url:'../ajax/clientes.php?op=selectMunicipio',
				data: data,
				//data:provinciaID={provinciaID : provinciaID},
				dataType:'json',
				contentType: "application/x-www-form-urlencoded",
				success: function(data){
				//success:function(html){
 
					alert(data);
					$("#municipio").html(data);
					$('#municipio').selectpicker('refresh');
					$('#municipio').selectpicker('refresh');
				}
			});
		}
	});
});
</script>

Ahora viene el código del case del fichero PHP que recibe lo que he enviado con el script:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
case "selectMunicipio":
 
	require_once "../modelos/Municipios.php";
 
	$municipio = new Municipio();
	if (empty($_POST['provinciaID'])) { $provinciaID="1";} else { $provinciaID=$_POST['provinciaID'];}
	//$provinciaID=$_POST['provinciaID'];
	echo($provinciaID);
 
	$rspta = $municipio->select($provinciaID);
 
	while ($reg = $rspta->fetch_object())
	{
		echo '<option value=' . $reg->id . '>' . $reg->municipio . '</option>';
	}
	return $provinciaID;
	break;

Y por último, ese case llama a una función de otro fichero, que es esta:

1
2
3
4
5
6
7
8
public function select($provinciaID)
{
	//$sql="SELECT m.id, m.provincia, m.municipio, p.id FROM municipios m INNER JOIN provincias p ON m.provincia=p.id";
	//$sql="SELECT m.id, m.provincia, m.municipio FROM municipios m INNER JOIN provincias p ON m.provincia=p.id";
	$sql="SELECT * FROM municipios WHERE provincia='$provinciaID'";
	return ejecutarConsulta($sql);
 
}

Entonces, ¿cómo podría hacer para que los datos lleguen al fichero php que tiene el formulario y se añadan al select con ID municipio?

P.D: La query funciona bien. LLamando por el navegador a selectMunicipio y teniendo por defecto provinciaID = 1, me lista todos los municipios que corresponden a la provincia con ID =1 en la pantalla.
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 kip

Pasar valores a select de formulario

Publicado por kip (868 intervenciones) el 25/08/2017 15:20:14
Hola, primero debes borrar ese echo que haces de $provinciaID:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
case "selectMunicipio":
 
	require_once "../modelos/Municipios.php";
 
	$municipio = new Municipio();
	if (empty($_POST['provinciaID'])) { $provinciaID="1";} else { $provinciaID=$_POST['provinciaID'];}
	//$provinciaID=$_POST['provinciaID'];
	echo($provinciaID);
 
	$rspta = $municipio->select($provinciaID);
 
	while ($reg = $rspta->fetch_object())
	{
		echo '<option value=' . $reg->id . '>' . $reg->municipio . '</option>';
	}
	return $provinciaID;
	break;

Con eso y eliminando si tienes algun otro echo tendrias que tener solo esto(un solo echo):

1
echo '<option value=' . $reg->id . '>' . $reg->municipio . '</option>';

Que es lo que necesitas para tu select no ? deberia funcionarte de esa forma, si no funciona cuentanos que te esta retornando ya que con

1
$("#municipio").html(data);

Basta para agregar el html que te retorna el servidor(archivo PHP) al select en cuestion.
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 Georkis

Pasar valores a select de formulario

Publicado por Georkis (30 intervenciones) el 26/08/2017 02:03:30
Un ejemplo:
1
2
3
4
5
6
7
8
//Fichero PHP para obtener la JSON
if(isset($_POST['provincia'])){
$lista = [];
        foreach ($states as $s) {
            $lista [] =  array('id'=>$s->getId(), 'text'=>$s->getName());
        }
echo json_encode($lista), 200, array('Content-Type'=>'Application/json');
}

1
2
3
4
//Fichero HTML
//index.html
<select id="form_country" name="form[country]" required="required" class="form-control"><option value="" selected="selected">select your country</option><option value="2">Canada</option><option value="1">Estados Unidos</option><option value="3">Mexico</option></select>
<select id="form_state" name="form[state]" required="required" class="form-control" disabled="disabled"></select>
//Codigo JQUERY

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$('#form_state').children().remove();
var selectDisabled = $('#form_state').attr('disabled','disabled');
$('#form_country').change(function(event){
    event.preventDefault();
    if($('#form_country').val() != ""){
        $('#form_state').removeAttr('disabled');
        $.post('{{ path('state_combo_json') }}', {'form_country':$('#form_country').val()}, function(data){
            $('#form_state').html('<option>Select your state</option>');
            $.each( data, function( id, state ) {
                $('<option value="'+state.id+'">' + state.text + '</option>').appendTo("#form_state");
            });
        });
    }else{
        $('#form_state').attr('disabled', selectDisabled);
    }
 
});
 
//Este código originalmente lo he modifica para la adaptación como lo usas en tus códigos, Pues yo programo en Symfony3
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

Pasar valores a select de formulario

Publicado por Endika (14 intervenciones) el 28/08/2017 09:57:35
Hola¡
Ya he hecho las modificaciones. No tengo errores. Mediante firebug cuando hago click en una provincia de la lista, inspecciono y veo como respuesta una cadena tal que así
1
<option value=1183>Abajas</option><option value=1184>Adrada de Haza</option><option value=1185>Aguas Cándidas</option><option value=1186>Aguilar de Bureba</option><option value=1187>Albillos</option><option value=1188>Alcocero de Mola</option><option value=1189>Alfoz de Bricia</option><option value=1190>Alfoz de Quintanadueñas</option>

El tema es que aunque visualizo eso como valor devuelto, con $("#municipio").html(data); no se me están cargando en el select municipio del formulario y no se por qué...
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 kip

Pasar valores a select de formulario

Publicado por kip (868 intervenciones) el 28/08/2017 14:35:51
Intenta colocar las " luego del atributo value del option.

1
echo '<option value="' . $reg->id . '">' . $reg->municipio . '</option>';

Ahora bien, si aun no funciona verifica que exista solo un elemento select con id municipio.
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

Pasar valores a select de formulario

Publicado por Endika (14 intervenciones) el 29/08/2017 08:34:49
Buenas. Gracias a todos.

Ya he solucionado mi problema. Lo explico por si alguien más se encuentra esta situación. El envío de datos se hacía bien y la query era correcta... El problema era que los datos no se agregaban al selectpicker porque el AJAX enviaba los datos en JSON y la respuesta era texto plano. Quitando del AJAX la línea data type: 'json' queda solventado el problema y los valores de la query ya se guardan en el selectpicker. Comparto el código definitivo:

1) JS con la petición AJAX:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<script type="text/javascript">
$(document).ready(function(){
    $('#provincia').change(function(data){
        data.preventDefault();
        var provinciaID = $(this).val();
        var data = {'provinciaID': provinciaID};
 
        $.ajax({
            type:'POST',
            url:'../ajax/clientes.php?op=selectMunicipio',
            data: data,
            contentType: "application/x-www-form-urlencoded",
            success: function(data){
            $("#municipio").html(data);
            $('#municipio').selectpicker('refresh');
            }
        });
    });
});
 
</script>

2) Fichero PHP que recibe los datos que envía el AJAX, solo el case relevante para el ejemplo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
case "selectMunicipio":
 
	require_once "../modelos/Municipios.php";
	$municipio = new Municipio();
	if (empty($_POST['provinciaID']))
	{
	    $provinciaID="1";
	}
	else {
	    $provinciaID=$_POST['provinciaID'];
	}
 
	$rspta = $municipio->select($provinciaID);
 
	while ($reg = $rspta->fetch_object())
	{
	    echo '<option value=' . $reg->id . '>' . $reg->municipio . '</option>';
 
	}
 
	break;

3) Función de mi clase Municipio que monta la query, en otro fichero PHP diferente a los anteriores:

1
2
3
4
5
6
7
public function select($provinciaID)
{
 
    $sql="SELECT * FROM municipios WHERE provincia='$provinciaID'";
    return ejecutarConsulta($sql);
 
}
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
Revisar política de publicidad