[SOLUCIONADO] Consulta sobre combobox

Iniciado por ch1n0, Junio 22, 2011, 01:30:45 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Junio 22, 2011, 01:30:45 PM Ultima modificación: Marzo 22, 2014, 02:16:14 PM por Expermicid
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.

Código: php

<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>




- 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

Veo Una Energia Que Con Deceo de Justicia... Veo Mas Alla de LAs Letras Escritas...
Veo Un Hacktivismo Puro... Nacido De lo Mas Profundo De un Corazon..
Con La Mirada Firme En Defender Mis Ideales...


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.

Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.

Ok muchas gracias, ahora me dedico a investigar :D

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Ok muchas gracias, ahora me dedico a investigar :D

Bueno como tengo un rato libre me dedike a ayudarte man

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

es un code ke acabo de modificar para hacerlo dinamico

el code original lo saké de akí

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta


usamos php, mysql y jquery

espero te sirva

cualkier duda aki andámos

Veo Una Energia Que Con Deceo de Justicia... Veo Mas Alla de LAs Letras Escritas...
Veo Un Hacktivismo Puro... Nacido De lo Mas Profundo De un Corazon..
Con La Mirada Firme En Defender Mis Ideales...


No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Ok muchas gracias, ahora me dedico a investigar :D

Bueno como tengo un rato libre me dedike a ayudarte man

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

es un code ke acabo de modificar para hacerlo dinamico

el code original lo saké de akí

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta


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

Código: php
<option value="<?php echo $carrera ?>">


y en el jquery estas lanzando el id

Código: php
$("#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:

Código: php
<option value="<?php echo $id ?>"> <?php echo $rowEmp['carrera']?> </option> 

Veo Una Energia Que Con Deceo de Justicia... Veo Mas Alla de LAs Letras Escritas...
Veo Un Hacktivismo Puro... Nacido De lo Mas Profundo De un Corazon..
Con La Mirada Firme En Defender Mis Ideales...


Junio 22, 2011, 06:24:40 PM #7 Ultima modificación: Junio 22, 2011, 06:26:53 PM por ch1n0
Gracias por responder, pero creo q el problema esta en genera-select.php

Código: 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...

Veo Una Energia Que Con Deceo de Justicia... Veo Mas Alla de LAs Letras Escritas...
Veo Un Hacktivismo Puro... Nacido De lo Mas Profundo De un Corazon..
Con La Mirada Firme En Defender Mis Ideales...


el index es un poco largo :D

Código: php

<?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:
Código: php

<?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>';
}*/
//}
}
?>

Junio 22, 2011, 06:47:24 PM #10 Ultima modificación: Junio 22, 2011, 06:55:08 PM por Devilboy
intenta cambiar la consulta en el genera por  ejemplo

Código: php
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




Código: php
$consulta = "SELECT * from alumno WHERE carrera= ".$_GET['id'];


cambia eso por:

$carrera = $_GET['id'];

$consulta = "SELECT * from alumno WHERE carrera = '$carrera' ";

Veo Una Energia Que Con Deceo de Justicia... Veo Mas Alla de LAs Letras Escritas...
Veo Un Hacktivismo Puro... Nacido De lo Mas Profundo De un Corazon..
Con La Mirada Firme En Defender Mis Ideales...


Junio 22, 2011, 06:54:15 PM #11 Ultima modificación: Junio 22, 2011, 06:56:47 PM por ch1n0
Código: php

SELECT * from alumno WHERE carrera= 'informatica'


si me funciona. y el jquery esta en esa ruta.

pero probe lo siguiente

Código: php

<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
Código: php

<?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

Junio 22, 2011, 06:55:57 PM #12 Ultima modificación: Junio 22, 2011, 06:59:36 PM por Devilboy
ok entonces solo haz esto


Código: php
$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

Veo Una Energia Que Con Deceo de Justicia... Veo Mas Alla de LAs Letras Escritas...
Veo Un Hacktivismo Puro... Nacido De lo Mas Profundo De un Corazon..
Con La Mirada Firme En Defender Mis Ideales...


Junio 22, 2011, 06:59:25 PM #13 Ultima modificación: Junio 22, 2011, 07:02:43 PM por ch1n0
compañero la siguiente consulta funciona.

Código: php

$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 los links. Registrarse o Entrar a mi cuenta
compañero la siguiente consulta funciona.

Código: php

$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

Veo Una Energia Que Con Deceo de Justicia... Veo Mas Alla de LAs Letras Escritas...
Veo Un Hacktivismo Puro... Nacido De lo Mas Profundo De un Corazon..
Con La Mirada Firme En Defender Mis Ideales...


Junio 22, 2011, 07:12:09 PM #15 Ultima modificación: Junio 22, 2011, 07:33:42 PM por ch1n0
si me imrpime la variable. con espacios y todo.

pero en un .php aparte.

tengo esto:
Código: php

<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

Veo Una Energia Que Con Deceo de Justicia... Veo Mas Alla de LAs Letras Escritas...
Veo Un Hacktivismo Puro... Nacido De lo Mas Profundo De un Corazon..
Con La Mirada Firme En Defender Mis Ideales...


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!
Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.

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.

Veo Una Energia Que Con Deceo de Justicia... Veo Mas Alla de LAs Letras Escritas...
Veo Un Hacktivismo Puro... Nacido De lo Mas Profundo De un Corazon..
Con La Mirada Firme En Defender Mis Ideales...