AJAX - PHP+MYSQL+AJAX

   
Vista:

PHP+MYSQL+AJAX

Publicado por Jose Garrido (4 intervenciones) el 22/04/2015 14:51:01
Hola que tal , estoy haciendo un ejercicio con estos tres lenguajes y tengo un problema que no consigo solucionar ,

tengo tres tablas
centro , cursos , alumnos

en la tabla centro la pk es id_centro

en la tabla cursos la PK es id_curso y tiene una clave foranea referenciando a centro fk_centro

en la tabla alumnos la PK es el dni y tiene una clave foranea referenciando a centro fk_centro

asi


Captura

quiero leer a traves de la web ( uso xampp ) la asignatura de un curso , en el que esta el alumno , y segun la estructura que tengo uso esta sentencia ( en phpmyadmin )

select cursos.asignatura from cursos,centro,alumnos where cursos.fk_centro=centro.id_centro and centro.id_centro=alumnos.fk_centro and alumnos.dni_a='1234567a' and alumnos.nivel_curso=cursos.curso

y me devuelve la asignatura de ese curso asi


Captura2

el alumno tiene el dni mostrado esta en esl siguiente curso

Captura3

y en este curso hay una asignatura que es


Captura4

asi que yo lo veo correcto

ahora , estoy creando una pagina web desde la cual al seleccionar el dni del alumno me cargara las asignaturas entre las que puede elegir para crear un plan de estudio

Captura5

para uso el codigo de la pagina



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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<!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>
 
<script src="js/jquery.js"></script>
<script src="js/ptimyjava.js"></script>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento sin título</title>
</head>
 
<body>
 
<h2>Plan de trabajo individualizado</h2>
 
 
<form name="formpti" id="formpti" method="post">
Elija el alumno
<select name="dnipti" id="dnipti">
			<?php
 
                $conn=mysqli_connect('localhost','root','root','alumnos_hnp');
 
                $query = 'SELECT * FROM alumnos ';
 
                $result =mysqli_query($conn,$query);
                  while ( $row = $result->fetch_array() )
                    {
                ?>
 
            <option value=" <?php echo $row['dni_a']?> " selected="selected" >
            <?php echo "D.N.I. ".$row['dni_a']." <--->".$row['apellidos']." , ".$row['nombre'] ?>
            </option>
 
            <?php
            }
            ?>
  </select> Si no aparece el alumno puede insertarlo <a href="crear_alumno.php">AQUI</a>
  <br /><br />
 
 	Asignatura
 
 
		<select  id="asigpti">
 
  		</select>
 
</form>
 
</body>
</html>


como se ve en la cabecera uso una funcion ajax que recoje el value del select con el id"dnipti" , la funcion es asi:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$(function(){
 
	//FUNCIONES PARA LA PAGINA Crear_pti
 
	//carga la asignatura segun el curso del alumno
 
 
	$('#dnipti').on('change', function(){
 
	var id= $('#dnipti').val();
	var url = '../cargaasignaturapti.php';
	$.ajax({
		type:'POST',
		url:url,
		data:'id='+id,
		success: function(data){
			$('#asigpti option').remove();
			$('#asigpti').append(data);
		}
	});
	return false;
	});
 
});

al recoger el dni lo manda a esta pagina cargaasignaturapti.php , cuyo codigo es

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
 
$id = $_POST['id'];
 
$conn=mysqli_connect('localhost','root','root','alumnos_hnp');
 
if ($conn){
 
 
	$res=mysqli_query($conn,"select cursos.asignatura from cursos,centro,alumnos where cursos.fk_centro=centro.id_centro and centro.id_centro=alumnos.fk_centro and alumnos.nombre='$id' and alumnos.nivel_curso=cursos.curso ");
 
 
	if(mysqli_num_rows($res)>0){
		echo $id;
		echo '<option selected="selected" disabled="disabled">Elija la asignatura</option>';
		while($asignaturas = mysqli_fetch_array($res)){
			echo '<option value="'.$asignaturas['asignatura'].'">'.$asignaturas['asignatura'].'</option>';
		}
 
	}
	else {echo "error";}
 
}else {echo "error al conectar";}
?>

pues bien tras esto deberia desplegarse en la diguiente lista las asignaturas del curso donde esta el alumno como antes se veia en phpmyadmin ya que le paso el dni para ello pero me aparece los siguiente


Captura6

el cual es el error que yo pongo si no encuentra asignaturas , la sentencia es la misma que en phpmyadmin solo que en este caso ya trae ajax el dni pero no se carga nada en la lista de asignaturas y deberia aparecer LENGUA como se ve en phpmyadmin

ahora quito el if de la pagina cargaasignatura.php


Captura7
y aparece esto



Captura8

y no entiendo porque , ya que en php myadmin se ve claro que la sentencia esta bien escrita y devuelve el valor que debe , si alguien sabe porque me pasa esto se lo agradeceria porque me trae de cabeza de verdad , espero que se entienda bien el problema, un saludo.
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 Vainas

PHP+MYSQL+AJAX

Publicado por Vainas (71 intervenciones) el 22/04/2015 18:29:05
Buenas:

Te recomiendo que para comprobar que el ajax funciona hagas varias pruebas:

1. llama a cargaasignaturapti.php y mira si el codigo regresa como debe ser. puedes usar herramientas como "Advance Rest cliente" que es una extension de chrome para comprobarla. Le puedes pasar los parametros por post. Con esto compruebas que no tengas ningun fallo en la llamada.

2. Por otro lado en la misma consola de chrome en la seccion "network" puedes mirar que se realice la llamada desde el navegador y que no te da ningun fallo. con esto puedes comprobar que estas haciendo la llamada bien en el cliente.

Como recomendacion te diria (no se si es standar pero suele ser lo comun en codigos) que no desvuelvas etiquetas sueltas sino con una raiz y dentro las etiquetas. Es decir, en vez de llevar al cliente el dato:

<option ...>
<option....>

Mejor enviale esto:

<select..>
<option...>
<option...>
</select>

No se si me he explicado. donde tengas el selec coloca un div y ya dentro de el borras el select y agregas el nuevo. Ya te digo que no es estandard esto pero suele ser lo que veo por alli.

Espero que te sirva. Ya nos contaras mas.

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

PHP+MYSQL+AJAX

Publicado por Jose Garrido (4 intervenciones) el 23/04/2015 08:11:10
Gracias vainas , probare tus consejos y a ver que pasa, un saludo.
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

PHP+MYSQL+AJAX

Publicado por Jose (4 intervenciones) el 23/04/2015 19:21:51
Me gusta tu idea y he probado a hacerlo pero no aparece nada en el div
probé asi

Captura
Captura2
Captura3

agradeceria tu orientacion , un saludo.
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

PHP+MYSQL+AJAX

Publicado por Jose garrido (4 intervenciones) el 24/04/2015 09:15:13
Hola de nuevo , escribo este ultimo mensaje para decir que he conseguido lo del ultimo post , en cuanto al error del primer mensaje , gracias por la ayuda , un saludo.
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 Vainas

PHP+MYSQL+AJAX

Publicado por Vainas (71 intervenciones) el 24/04/2015 16:30:57
Buenas:

No he podido pasarme antes. Me alegra que lo pudieras solucionar. Si nos dijeras como estaria bien para el foro.

Lo que te decia es que colocases un div fuera del while

algo asi:

1
2
3
4
5
echo "<div>";
while(....){
...
}
echo "</div>";

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

PHP+MYSQL+AJAX

Publicado por angel (1 intervención) el 20/05/2015 00:06:41
Hola me parece muy buena información, frecuentemente se nos presentan errores que interrumpen el buen funcionamiento de la base de datos.
Saludos!!

Trabajando para detalles comunion
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