Foros del Web » Programando para Internet » PHP »

¿Rellenar un combobox a partir de otro?

Estas en el tema de ¿Rellenar un combobox a partir de otro? en el foro de PHP en Foros del Web. A ver, tengo dos combobox, que el segundo se rellenara dependiendo la opcion que se seleccione en el primero. Código: function recorrerCategorias(){ $bd = mysql_connect('localhost', ...
  #1 (permalink)  
Antiguo 13/03/2007, 10:23
 
Fecha de Ingreso: febrero-2007
Ubicación: Valencia
Mensajes: 457
Antigüedad: 17 años, 1 mes
Puntos: 0
¿Rellenar un combobox a partir de otro?

A ver, tengo dos combobox, que el segundo se rellenara dependiendo la opcion que se seleccione en el primero.

Código:
function recorrerCategorias(){
	$bd = mysql_connect('localhost', 'root', '');
	if (!$bd)  {
  	echo "Error, no puede encontrarse a la base de datos";
  	exit;
	}
	mysql_select_db('soft');
	$query="SELECT * FROM categoria";
	$resultado=mysql_query($query);
	$num_filas = mysql_num_rows($resultado);
?>
	<select name="categoria" onChange="<? recorrerProductos() ?>">
<?
	while($nombre=mysql_fetch_assoc($resultado)){
		$nom=$nombre["nombre"];
		$id=$nombre["codigo"];
?>
		<option value="<? echo $id ?>"> <? echo $nom ?> </option>		
<?
	}
?>
	</select>
<?
}

function recorrerProductos(){ 
	$bd = mysql_connect('localhost', 'root', '');
	if (!$bd)  {
  	echo "Error, no puede encontrarse a la base de datos";
  	exit;
	}
	mysql_select_db('soft');
	$query="SELECT * FROM producto WHERE categoria=?¿?¿?¿?¿";
	$resultado=mysql_query($query);
	$num_filas = mysql_num_rows($resultado);
?>
	<select name="producto">
<?
	while($nombre=mysql_fetch_assoc($resultado)){
		$nom=$nombre["nombre"];
		$id=$nombre["codigo"];
?>
		<option value="<? echo $id ?>"> <? echo $nom ?> </option>		
<?
	}
?>
	</select>
<?
}
?>
No se si esta claro, mi intencion es que en el evento onchange llame a la funcion recorrerProductos para que se rellene el combobox... A ver si me podeis hechar una mano.

Gracias!!!!

Última edición por Capi666; 13/03/2007 a las 14:09
  #2 (permalink)  
Antiguo 13/03/2007, 10:31
 
Fecha de Ingreso: marzo-2007
Mensajes: 78
Antigüedad: 17 años, 1 mes
Puntos: 0
Re: Rellenar un combobox a partir de otro

Hola Capi666
El código php se ejecuta en el servidor, no en el cliente. Por eso una vez cargada la página no podrás llamar a la función. De hecho, seguramente cuando hagas un cambio en el select en la barra del navegador se mostrará un error porque intentará ejectura una función javascript que no existe.

Eso que intas lo puedes hacer con AJAX, o más rudimentario haciendo que cada vez que se cambie el select se recargue la página pasando ciertos parámetros.
  #3 (permalink)  
Antiguo 13/03/2007, 10:34
 
Fecha de Ingreso: febrero-2007
Ubicación: Valencia
Mensajes: 457
Antigüedad: 17 años, 1 mes
Puntos: 0
Re: Rellenar un combobox a partir de otro

Cita:
Iniciado por IngProd Ver Mensaje
Hola Capi666
El código php se ejecuta en el servidor, no en el cliente. Por eso una vez cargada la página no podrás llamar a la función. De hecho, seguramente cuando hagas un cambio en el select en la barra del navegador se mostrará un error porque intentará ejectura una función javascript que no existe.

Eso que intas lo puedes hacer con AJAX, o más rudimentario haciendo que cada vez que se cambie el select se recargue la página pasando ciertos parámetros.

Exacto, mi intencion era recargar la pagina cada vez... pero no se como hacerlo...
  #4 (permalink)  
Antiguo 14/03/2007, 12:13
 
Fecha de Ingreso: febrero-2007
Ubicación: Valencia
Mensajes: 457
Antigüedad: 17 años, 1 mes
Puntos: 0
Re: ¿Rellenar un combobox a partir de otro?

Alguien me puede indicar como hacerlo recargando la pagina...

Gracias!!!
  #5 (permalink)  
Antiguo 15/03/2007, 06:13
 
Fecha de Ingreso: febrero-2007
Ubicación: Valencia
Mensajes: 457
Antigüedad: 17 años, 1 mes
Puntos: 0
Re: ¿Rellenar un combobox a partir de otro?

Por favor, una ayuda, por mas que lo intento no me sale... Estoy buscando información, pero no lo se hacer, no me aclaro...
  #6 (permalink)  
Antiguo 15/03/2007, 08:46
Avatar de xempro  
Fecha de Ingreso: marzo-2007
Ubicación: Chile
Mensajes: 222
Antigüedad: 17 años, 1 mes
Puntos: 6
Re: ¿Rellenar un combobox a partir de otro?

Yaa!, te ganastes un curso de: "¿Cómo realizar búsquedas en Google?"
  #7 (permalink)  
Antiguo 15/03/2007, 09:16
Avatar de xempro  
Fecha de Ingreso: marzo-2007
Ubicación: Chile
Mensajes: 222
Antigüedad: 17 años, 1 mes
Puntos: 6
Re: ¿Rellenar un combobox a partir de otro?

# index.php
Código PHP:
<?
$hostname_testing 
"localhost";
$database_testing "testing";
$username_testing "testing";
$password_testing "testing";
$testing mysql_connect($hostname_testing$username_testing$password_testing) or trigger_error(mysql_error(),E_USER_ERROR);
mysql_select_db($database_testing$testing);
$query_combo1 "SELECT * FROM municipios";
$combo1 mysql_query($query_combo1$testing) or die(mysql_error());
$row mysql_fetch_assoc($combo1);
?>
<html>
<head>
<title>Combos</title>
<script language="JavaScript" type="text/javascript" src="ajax.js"></script>
</head>
<body>
<form name="f1" method="post">
<select name="municipios" onChange="optionMuni();">
<option value="0">[ Seleccione ]</option>
<? do { ?>
<option value="<? echo $row['id_muni']?>"><? echo $row['nom_muni']?></option>
<? } while ($row mysql_fetch_assoc($combo1)); ?>
</select>
<div id="localidad"><select><option>[ Seleccione ]</option></select></div>
</form>
</body>
</html>
<? mysql_free_result($combo1); ?>

# ajax.js
Código HTML:
function objetoAjax(){
var xmlhttp=false;
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (E) {
xmlhttp = false;
}
}

if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
xmlhttp = new XMLHttpRequest();
}
return xmlhttp;
}
function optionMuni(){
divResultado = document.getElementById('localidad');
id_muni=document.f1.municipios.value;
ajax=objetoAjax();
ajax.open("POST", "localidad.php",true);
ajax.onreadystatechange=function() {
if (ajax.readyState==4) {
divResultado.innerHTML = ajax.responseText
}
}
ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
ajax.send("id_muni="+id_muni)
}
# localidad.php
Código PHP:
<?
$hostname_testing 
"localhost";
$database_testing "testing";
$username_testing "testing";
$password_testing "testing";
$testing mysql_connect($hostname_testing$username_testing$password_testing) or trigger_error(mysql_error(),E_USER_ERROR);
mysql_select_db($database_testing$testing);
mysql_select_db($database_testing$testing);
$query_localidades "SELECT localidades.id_local, localidades.nom_local FROM localidades WHERE localidades.id_muni="$_POST['id_muni'];
$localidades mysql_query($query_localidades$testing) or die(mysql_error());
$row mysql_fetch_assoc($localidades);
?>
<select name="localidades">
<option value="0">[ Seleccione ]</option>
<? do { ?>
<option value="<? echo $row['id_local']?>"><? echo $row['nom_local']?></option>
<? } while ($row mysql_fetch_assoc($localidades));?>
</select>
<? mysql_free_result($localidades); ?>
Espero te sirva.

Sorry por el desorden, pero este script lo había publicado antes en otro sitio el cual al publicar alinea todo a la izquierda y ahora me dió flojera ordenarlo
  #8 (permalink)  
Antiguo 15/03/2007, 12:39
 
Fecha de Ingreso: febrero-2007
Ubicación: Valencia
Mensajes: 457
Antigüedad: 17 años, 1 mes
Puntos: 0
Re: ¿Rellenar un combobox a partir de otro?

uffff!!!! Muchisimas gracias, creo que me servira, ahora mismo voy a intentarlo.
  #9 (permalink)  
Antiguo 15/03/2007, 14:05
 
Fecha de Ingreso: febrero-2007
Ubicación: Valencia
Mensajes: 457
Antigüedad: 17 años, 1 mes
Puntos: 0
Re: ¿Rellenar un combobox a partir de otro?

Muchas gracias, ya lo he conseguido!!!!!
  #10 (permalink)  
Antiguo 15/03/2007, 14:09
Avatar de xempro  
Fecha de Ingreso: marzo-2007
Ubicación: Chile
Mensajes: 222
Antigüedad: 17 años, 1 mes
Puntos: 6
Re: ¿Rellenar un combobox a partir de otro?

¿A nombre de quién tengo que hacer la boleta de honorarios?
  #11 (permalink)  
Antiguo 07/08/2009, 04:09
 
Fecha de Ingreso: agosto-2009
Mensajes: 3
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: ¿Rellenar un combobox a partir de otro?

Hola (ya se que es viejo el post) , haber si me podeis ayudar... He ido siguiendo los pasos de los ficheros que pusistes y no me funciona. Soy un negado en javascript.
PD:Son para un componente joomla.

default.php
Cita:
<html>
<head>
<script language="JavaScript" type="text/javascript" src="ajax.js"></script>
</head>
<body>
<form name="f1" method="post">

<?php

$database=mysql_query("SELECT * FROM jos_area" );
if ($fila = mysql_fetch_array($database)){

echo '<select name="id_area" onChange="optionArea();">';
echo '<option value="0" SELECTED>Choose One </option>';
do {
echo '<option value= "'.$fila["id_area"].'">'.$fila["area"].'</option>';
} while ($fila = mysql_fetch_array($database));
echo '</select>';

}
?>
<div id="combotema"><select><option>[ Seleccione ]</option></select></div>

</form>
</body>
</html>
ajax.js
Cita:
function objetoAjax(){
var xmlhttp=false;
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (E) {
xmlhttp = false;
}
}

if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
xmlhttp = new XMLHttpRequest();
}
return xmlhttp;
}

function optionArea(){
divResultado = document.getElementById('combotema');
/*divResultado = dijit.byId('combotema');*/
id=document.f1.id_area.value;
ajax=objetoAjax();
ajax.open("POST", "combotema.php",true);
ajax.onreadystatechange=function() {
if (ajax.readyState==4) {
divResultado.innerHTML = ajax.responseText
}
}
ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
ajax.send("id="+id)
}
combotema.php
Cita:
<?php
$database=mysql_query("SELECT * FROM jos_tema WHERE id_area =". $_POST['id'] );
if ($fila = mysql_fetch_array($database)){

echo '<select name= "id_tema">';
echo '<option value="0" SELECTED>Choose One </option>';
do {
echo '<option value= "'.$fila["id_tema"].'">'.$fila["tema"].'</option>';
} while ($fila = mysql_fetch_array($database));
echo '</select>';

}

?>

A alguien se le ocurre pk no funciona? creo que ni accede al js :S

Lo unico que va son los accesos a la BD

Gracias!

Última edición por lits88; 07/08/2009 a las 05:32
  #12 (permalink)  
Antiguo 07/08/2009, 06:05
 
Fecha de Ingreso: agosto-2009
Mensajes: 3
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: ¿Rellenar un combobox a partir de otro?

Bueno ya parece que leyo el js, ahora el problema viene con la variable $_POST , no consigue hacer esta consulta:

$database=mysql_query("SELECT * FROM jos_tema WHERE id_area =". $_POST['id'] );

Esta mal la sintaxis o algo?
  #13 (permalink)  
Antiguo 09/08/2012, 12:41
 
Fecha de Ingreso: agosto-2012
Mensajes: 1
Antigüedad: 11 años, 8 meses
Puntos: 0
De acuerdo Respuesta: Re: ¿Rellenar un combobox a partir de otro?

Cita:
Iniciado por xempro Ver Mensaje
# index.php
Código PHP:
<?
$hostname_testing 
"localhost";
$database_testing "testing";
$username_testing "testing";
$password_testing "testing";
$testing mysql_connect($hostname_testing$username_testing$password_testing) or trigger_error(mysql_error(),E_USER_ERROR);
mysql_select_db($database_testing$testing);
$query_combo1 "SELECT * FROM municipios";
$combo1 mysql_query($query_combo1$testing) or die(mysql_error());
$row mysql_fetch_assoc($combo1);
?>
<html>
<head>
<title>Combos</title>
<script language="JavaScript" type="text/javascript" src="ajax.js"></script>
</head>
<body>
<form name="f1" method="post">
<select name="municipios" onChange="optionMuni();">
<option value="0">[ Seleccione ]</option>
<? do { ?>
<option value="<? echo $row['id_muni']?>"><? echo $row['nom_muni']?></option>
<? } while ($row mysql_fetch_assoc($combo1)); ?>
</select>
<div id="localidad"><select><option>[ Seleccione ]</option></select></div>
</form>
</body>
</html>
<? mysql_free_result($combo1); ?>

# ajax.js
Código HTML:
function objetoAjax(){
var xmlhttp=false;
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (E) {
xmlhttp = false;
}
}

if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
xmlhttp = new XMLHttpRequest();
}
return xmlhttp;
}
function optionMuni(){
divResultado = document.getElementById('localidad');
id_muni=document.f1.municipios.value;
ajax=objetoAjax();
ajax.open("POST", "localidad.php",true);
ajax.onreadystatechange=function() {
if (ajax.readyState==4) {
divResultado.innerHTML = ajax.responseText
}
}
ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
ajax.send("id_muni="+id_muni)
}
# localidad.php
Código PHP:
<?
$hostname_testing 
"localhost";
$database_testing "testing";
$username_testing "testing";
$password_testing "testing";
$testing mysql_connect($hostname_testing$username_testing$password_testing) or trigger_error(mysql_error(),E_USER_ERROR);
mysql_select_db($database_testing$testing);
mysql_select_db($database_testing$testing);
$query_localidades "SELECT localidades.id_local, localidades.nom_local FROM localidades WHERE localidades.id_muni="$_POST['id_muni'];
$localidades mysql_query($query_localidades$testing) or die(mysql_error());
$row mysql_fetch_assoc($localidades);
?>
<select name="localidades">
<option value="0">[ Seleccione ]</option>
<? do { ?>
<option value="<? echo $row['id_local']?>"><? echo $row['nom_local']?></option>
<? } while ($row mysql_fetch_assoc($localidades));?>
</select>
<? mysql_free_result($localidades); ?>
Espero te sirva.

Sorry por el desorden, pero este script lo había publicado antes en otro sitio el cual al publicar alinea todo a la izquierda y ahora me dió flojera ordenarlo
barbaro!!! me has ayudado genial! ahora aplicarlo a mi proyecto, solo tube algo de problemas con el modo de conexion pero todo solucionado
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 15:33.