Gracias otra vez ,mastermind por tu tiempo , veras , he decidido buscar otra funcion que haga lo mismo pero mas simplificado si se puede decir , me he descargado tambien los archivos y doy fe de que funciona , cuando deja de funcionar es cuando adapto las variables a mi base de datos , intentare explicarlo todo detalladamente a ver si podemos dar con el fallo
el primer archivo es este conexion.php
<?php
$conexion = mysql_connect('127.0.0.1', 'root', 'root');
mysql_select_db('lugares', $conexion);
?>
y yo lo dejo asi
<?php
$conexion = mysql_connect('localhost', 'root', 'root');
mysql_select_db('alumnos', $conexion);
?>
no falla al conectar , por lo que creo que eso no es
segundo archivo index.php
<!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=utf-8" />
<title>Nuevo</title>
<link href="../css/estilo.css" rel="stylesheet">
<script src="../js/jquery.js"></script>
<script src="../js/myjava.js"></script>
</head>
<body>
<header>
PETICION DE DATOS CON EL OBJETO "SELECT"
</header>
<section>
<select id="ciudad">
<?php require('../php/conexion.php');
$lug = mysql_query("SELECT * FROM ciudad ORDER BY nomb_ciudad");
echo '<option selected="selected" disabled="disabled">Elija su Ciudad</option>';
while($lug2 = mysql_fetch_array($lug)){
echo '<option value="'.$lug2['id_ciudad'].'">'.$lug2['nomb_ciudad'].'</option>';
}
?>
</select><br /><br />
<select id="provincia">
</select><br /><br />
<select id="distrito">
</select>
</section>
</body>
</html>
y yo lo dejo asi
<!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=utf-8" />
<title>Nuevo</title>
<link href="../css/estilo.css" rel="stylesheet">
<script src="../js/jquery.js"></script>
<script src="../js/myjava.js"></script>
</head>
<body>
<header>
PETICION DE DATOS CON EL OBJETO "SELECT"
</header>
<section>
<select id="ciudad">
<?php require('../php/conexion.php');
$lug = mysql_query("SELECT * FROM alumnos ");
echo '<option selected="selected" disabled="disabled">Elija Alumno</option>';
while($lug2 = mysql_fetch_array($lug)){
echo '<option value="'.$lug2['dni_a'].'">'.$lug2['nombre'].'</option>';
}
?>
</select><br /><br />
<select id="provincia">
</select><br /><br />
<select id="distrito">
</select>
</section>
</body>
</html>
lo unico que cambio como ves es el select que esta probado en la base de datos y arroja resultados , y dentro del option el value dni_a que contiene el dni del alumno que en ese momento esta elegido y el campo que se mostrara en la lista de la seleccion que es el nombre del alumno ( aunque el valor que se usara para relacionar las tablas debe ser el dni porque es la primary key )
tercer archivo myjava.js
$(function(){
//Aqui se coge el elemento ciudad y con la propiedad .on que requiere dos parametros : change (cuando el valor de ese id cambie, que es cuando se elige otra opcion en la desplegable)y ejecutar la siguiente funcion cuando se haga change
$('#ciudad').on('change', function(){
//el primer parametro de la funcion y lo primero que hace , es obtener el valor con .val() el valor (lo que esta seleccionado despues de elegir de la lista que aparece)del elemento con el id ciudad que es el que corresponde a la primera lista desplegable y lo mete en la variable $id
var id = $('#ciudad').val();
// lo segundo que hace la funcion es encontrar la pagina donde se va va enviar el valor guardado en $id a traves del metodo POST , en esta pagina esta la consulta mysql y la variable $id se podra usar en ella para obtener por ejemplo un SELECT * FROM provincia WHERE id_ciudad = '$id' , ya que $id en el paso anterior se cargo con el valor que se obtuvo de la lista desplegable que tenia el id ciudad , esta pagina se almacena tambien en una variable llamada url
var url = '../php/agrega_provincias.php';
//en esta parte se le da la informacion a ajax para que trabaje: como se enviara la informacion (POST)
$.ajax({
//como se enviara la informacion (POST)
type:'POST',
//la pagina (guardada antes en la variable url)
url:url,
//el valor de $id recogido antes
data:'id='+id,
// los datos que los echo de los dos option que estan en la pagina guardada en la variable url
success: function(data){
//con esto de abajo se borraran los datos que tuviera la siguiente select para evitar que si en la primera se cambia de ciudad en la segunda select no se quede una provincia que no sea la de la ciudad del primer select , o sea que borra el segundo select si el primero se cambia
$('#provincia option').remove();
//con esto despues de borrarlo se añade otra vez la lista de opciones referente a la del primer select
$('#provincia').append(data);
}
});
return false;
});
$('#provincia').on('change', function(){
var id = $('#provincia').val();
var url = '../php/agrega_distritos.php';
$.ajax({
type:'POST',
url:url,
data:'id='+id,
success: function(data){
$('#distrito option').remove();
$('#distrito').append(data);
}
});
return false;
});
});
aqui no he cambiado nada porque los id de los select me da igual cambiarlos ya que a efectos del programa no se ven aunque es conveniene cambiarlos para este ejemplo no lo hago por comodidad , este archivo es el que procesa la informacion de index.php
archivo agrega_provincias.php que es el que cargara el select con todas las provincias relacionadas con la ciudad ( en mi caso con el curso relacionado con el alumno a traves del dni
<?php
require('conexion.php');
$id = $_POST['id'];
$prov = mysql_query("SELECT * FROM provincia WHERE id_ciudad = '$id' ORDER BY nomb_provincia");
if(mysql_num_rows($prov)>0){
echo '<option selected="selected" disabled="disabled">Elija su Provincia</option>';
while($prov2 = mysql_fetch_array($prov)){
echo '<option value="'.$prov2['id_provincia'].'">'.$prov2['nomb_provincia'].'</option>';
}
}
?>
yo lo dejo asi
<?php
require('conexion.php');
//llega la variable desde el proceso de ajax ( en el proceso ajax se le llama id y se envia por post )a traves del metodo post y se guarda en la variable $id , que contiene el dni del alumno
$id = $_POST['id'];
//sencilla consulta que devuelve el curso donde el dni del alumno es igual al de la variable $id ( que no se debe tocar ya que almacena el dni )
$prov = mysql_query("SELECT curso FROM cursos , alumnos WHERE dni_a='id' AND curso=ncurso ");
if(mysql_num_rows($prov)>0){
echo '<option selected="selected" disabled="disabled">Elije el curso</option>';
while($prov2 = mysql_fetch_array($prov)){
echo '<option value="'.$prov2['curso'].'">'.$prov2['curso'].'</option>';
}
}
?>
cambio solo la sentencia select , tambien probada en la base de datos en phpmyadmin y funciona ya que ncursos es foranea de curso en cursos , tambien cambio el value del option para que quede preparado en el siguiente select donde se mostraran las asignaturas de ese curso , pero no consigo que se cargue el primer select , y como digo he probado con el ejemplo introduciendo las tablas del archivo sql que habia en el ejemplo y funciona a la perfeccion , asi que no se que puede ser , como no sea que yo tengo las tablas en utf8 general y el en latin swedish , pero no creo que sea eso porque una vez llegue a cargar el priimer select , pero era integramente php y tenia que reenviar informacion al servidos y validar asi que me decidi por ajax sel cual se poco aunque esta funcion es sencilla , bueno despues de este rollo espero aclarar algo porque estoy mas quemao ya...
gracias y un saludo
edito para agregar una cosa, he abierto el inspector de firefox y al mirar en el elemento select me sale un mensaje que dice :
warning include conexion.php : failed to open stream: no such file or directory in C:\xampp\htcdocs\vistas\index.php on line 16
y debajo otro
warning include() : failed opening 'conexion.php for inclusion (include_path'.;C:\xampp\php\PEAR') in C:\xampp\htcdocs\vistas\index.php on line
vuelvo a editar : cuaderno de bitacora ,capitan picard , fecha estelar..... bueno parece que avanzamos a trompicones , he editado el fichero index.html y he añadido
$conn=mysqli_connect('localhost','root','root','alumnos_hnp') ; usando mysqli en vez de mysql
$lug = mysql
i_query
($conn,"SELECT * FROM alumnos "
);
y me carga el primer select con los nombres ...pero en el segundo select no carga nada, esto es pa mear y no echar gota ...voy a hacer lo mismo en el archivo agrega_provincias.php a ver que pasa.