Hola a todos
Les cuento. Estoy tratando de cargar un combobox haciendo una consulta, pero esa consulta depende de la seleccion de otro combobox de mas arriba, pero no me resulta.
<tbody>
<tr> <td> Hora inicio </td> <td> <input type="text" maxlength="5" name="hora_inicio" id="hora_inicio" /> </td> </tr>
<tr> <td> Hora Fin </td> <td> <input type="text" maxlength="5" name="hora_fin" id="hora_fin" /> </td> </tr>
<tr> <td> dia </td> <td> <input type="text" maxlength="9" name="dia" id="dia" /> </td> </tr>
<tr> <td> Carreras </td> <td>
<select name="carrera" size="1">
<?php
$sql = "SELECT DISTINCT carrera FROM alumno";
$stmt = $bd->ejecutar($sql);
if ($stmt > 0) {
while ($rowEmp = $bd->obtener_fila($stmt,0)){
$carrera = $rowEmp['carrera'];
?>
<option value="<?php echo $carrera ?>"> <?php echo $rowEmp['carrera']?> </option>
<?php } }?>
</select></td> </tr>
<tr> <td> Asignatura </td> <td>
<select name="asignatura" size="1">
<?php
$sql = "SELECT idasignatura,nombre FROM asignatura";
$stmt = $bd->ejecutar($sql);
if ($stmt > 0) {
while ($rowEmp = $bd->obtener_fila($stmt,0)){
?>
<option value="<?php echo $rowEmp['idasignatura'] ?>"> <?php echo $rowEmp['nombre']?> </option>
<?php } }?>
</select></td> </tr>
<tr> <td> Alumno </td> <td>
<select name="alumno" size="1">
<?php // aqui debo hacer la consulta dependiendo del otro combobox
$sql = "SELECT rut,nombres,apellido_p,apellido_m FROM alumno WHERE carrera = $carrera";
$stmt = $bd->ejecutar($sql);
if ($stmt > 0) {
while ($rowEmp = $bd->obtener_fila($stmt,0)){
?>
<option value="<?php echo $rowEmp['rut'] ?>"> <?php echo $rowEmp['nombres'] . " " . $rowEmp['apellido_p']?> </option>
<?php } }?>
</select></td> </tr>
</tbody>
(http://www.imagengratis.org/images/sinttulowm1zw.jpg)
- Al seleccionar una carrera debe cargar en el combobox alumnos esos alumnos. Ayuda plz
Saludos
si lo ke kieres es ke solo al seleccionar un combobox se llene el otro, con puro php no vas a poder.
Para eso se utiliza ajax
Hola @ch1n0, primero que nada no se puede probar el código que haces ya que utilizas datos de alguna Base de Datos y no tengo la base de datos para probar.
Al parecer usas alguna clase propia para realizar consultas hacia la BD y no se cual es. Es un poco tedioso tratar de suponer lo que hace cada metodo.
Ahora bueno, creo que el problema no tiene nada que ver con PHP.
Al parecer quieres cargar dinamicamente datos de la BD, osea que cuando se seleccione alguna opción cargue automáticamente el Combox Alumno.
Lo que quieres hacer se hace con Ajax, pero necesitaras aprender Javascript y DHTML(HTML dinamico).
Saludos.
Ok muchas gracias, ahora me dedico a investigar :D
No tienes permitido ver enlaces.
Registrate o Entra a tu cuenta
Ok muchas gracias, ahora me dedico a investigar :D
Bueno como tengo un rato libre me dedike a ayudarte man
http://www.mediafire.com/?4s6kfw97f1gh7xj
es un code ke acabo de modificar para hacerlo dinamico
el code original lo saké de akí
http://pixelar.me/selects-dependientes-con-jquery/
usamos php, mysql y jquery
espero te sirva
cualkier duda aki andámos
No tienes permitido ver enlaces.
Registrate o Entra a tu cuenta
No tienes permitido ver enlaces.
Registrate o Entra a tu cuenta
Ok muchas gracias, ahora me dedico a investigar :D
Bueno como tengo un rato libre me dedike a ayudarte man
http://www.mediafire.com/?4s6kfw97f1gh7xj
es un code ke acabo de modificar para hacerlo dinamico
el code original lo saké de akí
http://pixelar.me/selects-dependientes-con-jquery/
usamos php, mysql y jquery
espero te sirva
cualkier duda aki andámos
Guau, muchas gracias, a todos.
acostumbrate a usar llaves primarias en vez de strings
tienes esto en el combobox
<option value="<?php echo $carrera ?>">
y en el jquery estas lanzando el id
$("#select2").load('genera-select.php?id='+id);
usa mejor la llave primaria en el value de la lista y la carrera para mostrarla, algo asi:
<option value="<?php echo $id ?>"> <?php echo $rowEmp['carrera']?> </option>
Gracias por responder, pero creo q el problema esta en genera-select.php
<?php
include("conexion.php");
$bd=Db::getInstance();
//include("conexion/conexion.php");
$carrera = $_GET['id'];
$sql = "SELECT * FROM alumno WHERE carrera = '$carrera'";
$stmt = $bd->ejecutar($sql);
//$consulta = "SELECT * from alumno WHERE rut = ".$_GET['id'];
//$query = mysql_query($consulta);
//while ($fila = mysql_fetch_array($query)) {
if ($stmt > 0) {
while ($rowEmp = $bd->obtener_fila($stmt,0)){
//echo "<option value=$rowEmp['rut']> $rowEmp['nombres'] </option>";
echo '<option value="'.$rowEmp['nombres'].'">'.$carrera.'</option>';
}
}
?>
nose, pero creo que no llega el id. porque no me muestra nada, y si pongo manualmente
$sql = "SELECT * FROM alumno WHERE carrera = 'ing en informatica'";
nose que sera :S
pon los dos completos, el index y el genera...
el index es un poco largo :D
<?php
session_start();
if($_SESSION['acceso']!=true) {
echo('Acceso restringido');
} else {?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252" />
<title> Sistema de Administracion </title>
<script type="text/javascript" src="js/ajax.js"></script>
<script type="text/javascript" src="js/jquery-1.4.2.min.js"></script>
<?php
include("conexion.php");
$bd=Db::getInstance();
?>
<link href="css/horario.css" rel="stylesheet" type="text/css" />
<link href="css/tabla.css" rel="stylesheet" type="text/css" />
<script language="JavaScript" type="text/JavaScript">
$(document).ready(function(){
$("#carrera").change(function(event){
var id = $("#carrera").find(':selected').val();
$("#select2").load('genera-select.php?id='+id);
});
});
</script>
</head>
<body>
<div id="contenedor">
<div id="encabezado">
<h1 align="center">Sistema de Administracion </h1>
</div>
<div id="menu">
<ul id="barra">
<li><a href="./administracion.php"> inicio </a> </li>
<li><a href="javascript:Enviar('ingresarAlumno.php','contenido')">Ingresar Alumno</a></li>
<li><a href="javascript:Enviar('actualizarAlumnos.php','contenido')">Actualizar Alumno</a></li>
<li><a href="javascript:Enviar('ingresarProfesor.php','contenido')">Ingresar Profesor</a></li>
<li><a href="javascript:Enviar('actualizarProfesor.php','contenido')">Actualizar Profesor</a></li>
<li><a href="javascript:Enviar('ingresarAsignatura.php','contenido')">Ingresar Asignatura</a></li>
<li><a href="javascript:Enviar('actualizarAsignatura.php','contenido')">Actualizar Asignatura</a></li>
<li><a href="javascript:Enviar('ingresarHorario.php','contenido')">Ingresar Horario</a></li>
<li><a href="javascript:Enviar('actualizarHorario.php','contenido')">Actualizar Horario</a></li>
<li><a href="./salir.php">Salir</a></li>
</ul>
</div>
<div align="center" id="contenido">
<form name="form1" id="form1" method="post" action="./ingresa_horario.php">
<table border="1">
<thead>
<tr> <td colspan="2" align="center"> Ingresar Horario </td> </tr>
</thead>
<tbody>
<tr> <td> Hora inicio </td> <td> <input type="text" maxlength="5" name="hora_inicio" id="hora_inicio" /> </td> </tr>
<tr> <td> Hora Fin </td> <td> <input type="text" maxlength="5" name="hora_fin" id="hora_fin" /> </td> </tr>
<tr> <td> dia </td> <td> <input type="text" maxlength="9" name="dia" id="dia" /> </td> </tr>
<tr> <td> Asignatura </td> <td>
<select name="asignatura" size="1">
<?php
$sql = "SELECT idasignatura,nombre FROM asignatura";
$stmt = $bd->ejecutar($sql);
if ($stmt > 0) {
while ($rowEmp = $bd->obtener_fila($stmt,0)){
?>
<option value="<?php echo $rowEmp['idasignatura'] ?>"> <?php echo $rowEmp['nombre']?> </option>
<?php } }?>
</select></td> </tr>
<tr> <td> Carreras </td> <td>
<select name="carrera" id="carrera" size="1">
<?php
$sql = "SELECT DISTINCT rut,carrera FROM alumno";
$stmt = $bd->ejecutar($sql);
if ($stmt > 0) {
while ($rowEmp = $bd->obtener_fila($stmt,0)){
$id = $rowEmp['carrera'];
//$rut = $row['rut'];
?>
<option value="<?php echo $id ?>"> <?php echo $rowEmp['carrera']?> </option>
<?php } }?>
</select></td> </tr>
<!--
<tr> <td> Alumno </td> <td>
<select name="alumno" id="alumno" size="1">
-->
<?php /* // aqui debo hacer la consulta dependiendo del otro combobox
$sql = "SELECT rut,nombres,apellido_p,apellido_m FROM alumno WHERE carrera = $carrera";
$stmt = $bd->ejecutar($sql);
if ($stmt > 0) {
while ($rowEmp = $bd->obtener_fila($stmt,0)){
?>
<option value="<?php echo $rowEmp['rut'] ?>"> <?php echo $rowEmp['nombres'] . " " . $rowEmp['apellido_p']?> </option>
<?php } } */?>
</select><!--</td> </tr>-->
<tr> <td> Alumno </td> <td>
<select name="select2" id="select2">
</select>
</td> </tr>
</tbody>
<tfoot>
<tr> <td colspan="2" align="right"> <input type="submit" name="guardar" value="Guardar" /> </td> </tr>
</tfoot>
</table>
</form>
</div>
</div>
</body>
</html>
<?php
}
?>
genera:
<?php
//include("conexion.php");
//$bd=Db::getInstance();
include("./conexion2.php");
$carrera = $_GET['id'];
//$sql = "SELECT * FROM alumno WHERE rut = '17217511-2'";
//$stmt = $bd->ejecutar($sql);
$consulta = "SELECT * from alumno WHERE carrera= ".$_GET['id'];
$query = mysql_query($consulta);
while ($fila = mysql_fetch_array($query)) {
echo '<option value="'.$fila['nombres'].'">'.$fila['nombres'].'</option>';
//if ($stmt > 0) {
/*while ($rowEmp = $bd->obtener_fila($stmt,0)){
//echo "<option value=$rowEmp['rut']> $rowEmp['nombres'] </option>";
echo '<option value="'.$rowEmp['rut'].'">'.$rowEmp['rut'].'</option>';
}*/
//}
}
?>
intenta cambiar la consulta en el genera por ejemplo
SELECT * from alumno WHERE carrera= 'informatica'
y dime si asi te funciona
otra cosa
tienes el jquery en el mismo archivo ke tu index??
o mejor dicho en esta ruta??
js/jquery-1.4.2.min.js
$consulta = "SELECT * from alumno WHERE carrera= ".$_GET['id'];
cambia eso por:
$carrera = $_GET['id'];
$consulta = "SELECT * from alumno WHERE carrera = '$carrera' ";
SELECT * from alumno WHERE carrera= 'informatica'
si me funciona. y el jquery esta en esa ruta.
pero probe lo siguiente
<tr> <td> Carreras </td> <td>
<select name="select1" id="select1">
<option value="">Selecciona</option>
<option value="informatica">ing en informatica</option>
<option value="17217514-7">Tec enfermeria</option>
</select></td> </tr>
y
<?php
//include("conexion.php");
//$bd=Db::getInstance();
include("./conexion2.php");
$carrera = $_GET['id'];
//$sql = "SELECT * FROM alumno WHERE rut = '17217511-2'";
//$stmt = $bd->ejecutar($sql);
$consulta = "SELECT * FROM alumno WHERE carrera = 'ing en informatica'";
$query = mysql_query($consulta);
while ($fila = mysql_fetch_array($query)) {
echo '<option value="'.$fila['rut'].'">'.$fila['nombres'].'</option>';
//if ($stmt > 0) {
/*while ($rowEmp = $bd->obtener_fila($stmt,0)){
//echo "<option value=$rowEmp['rut']> $rowEmp['nombres'] </option>";
echo '<option value="'.$rowEmp['rut'].'">'.$rowEmp['rut'].'</option>';
}*/
//}
}
?>
funciona perfecto. pero si en el index coloco el codigo php que genera el combobox, no funciona. por ai debe estar el problema.
EDITO. Tambien funciona con el codigo php en el index :D
ok entonces solo haz esto
$carrera = $_GET['id'];
$consulta = "SELECT * from alumno WHERE carrera = '$carrera' ";
sino te funciona con eso, entonces checa ke efectivamente se muestren y se pasen correctamente los valores en el select carrera
simplemente crea otro .php e imprime la variable $_POST[carrera];
para ke veas se te está pasando bien los valores o no
compañero la siguiente consulta funciona.
$consulta = "SELECT * FROM alumno WHERE carrera = '$carrera'";
pero al seleccionar la carrera informatica, pero si selecciono ing en informatica no funciona, debe ser por los espacios. porque tengo otra carrera con espacios y no muestra
Saludos.
EDITO: Definitivamente es por los espacios
No tienes permitido ver enlaces.
Registrate o Entra a tu cuenta
compañero la siguiente consulta funciona.
$consulta = "SELECT * FROM alumno WHERE carrera = '$carrera'";
pero al seleccionar la carrera informatica, pero si selecciono ing en informatica no funciona, debe ser por los espacios. porque tengo otra carrera con espacios y no muestra
Saludos.
EDITO: Definitivamente es por los espacios
entonces checa ke efectivamente se muestren y se pasen correctamente los valores en el select carrera
simplemente crea otro .php e imprime la variable $_POST[carrera];
para ke veas se te está pasando bien los valores o no
tambien pueden ser los acentos o los espacios como dices
si me imrpime la variable. con espacios y todo.
pero en un .php aparte.
tengo esto:
<script language="JavaScript" type="text/JavaScript">
$(document).ready(function(){
$("#select1").change(function(event){
var id = $("#select1").find(':selected').val();
//var pagina = './imprime.php?id='+id;
//document.location.href=pagina;
$("#select2").load('genera-select.php?id='+id);
});
});
</script>
cuando en el combobox selecciono "informatica" me muestra el correspondiente nombre.
pero si en el combobox selecciono "ing en informatica" no me muestra nada.
creo que javascript no le esta pasando completamente la id.
pero lo pruebo enviando la id a otra pagina .php y me la muestra de lo mas bien :S
mandame por mp tu base de datos y tu index y te lo checo man xq yo lo uso con espacios y sin problemas
Devilboy solucione el problema, lo que hice fue guardar en la base de datos las carreras remplazando los "espacios" por "guiones bajos", y despues parar mostrar la carrera solo cambio los "_" por " ".
Saludos.
Otra cosa, si los espacios estan al principio y al final de la cadena puedes usar la función trim(). Es lo mejor para ese tipo de cosas.
Saludos!
Bueno te comento ke ya solucioné tu problema.
El error no era ni del index ni del genera sino en tu base de datos.
Unas recomendaciónes, crea siempre llaves primarias de tipo int y autoincrement, ademas no le des ningun valor en chrset y collations.
En el index al valor del select dale siempre el valor de tu llave primarias asi no tendrás problemas con acentos, espacios o
caracteres especiales.
te mando el archivo por MP
pruebalo y me comentas, solo cambia los valores del conexion y la variable session de false a true.
ok muchas gracias. :D