Foros del Web » Programando para Internet » Javascript » Frameworks JS »

Recoger y usar parámetros Ajax con PHP

Estas en el tema de Recoger y usar parámetros Ajax con PHP en el foro de Frameworks JS en Foros del Web. Buenos día a todos. Parece un foro movidito así que espero me echen un cable. Intento fusionar en PHP y Ajax utilizando Prototype y consultas ...
  #1 (permalink)  
Antiguo 30/12/2009, 04:40
 
Fecha de Ingreso: junio-2009
Mensajes: 31
Antigüedad: 15 años, 5 meses
Puntos: 0
Recoger y usar parámetros Ajax con PHP

Buenos día a todos. Parece un foro movidito así que espero me echen un cable.

Intento fusionar en PHP y Ajax utilizando Prototype y consultas a mysql.

Poseo un index.php principal con un formulario con dos select y consultas a mysql mediante php externos (secciones.php y departamentos.php).

Primer select: se carga según consulta a departamentos.php y obtiene dos parámetros. Todo bien.

Segundo selectr: según parámetro seleccionado en el primero, realiza consulta a secciones.php pasándole ese parámetro.

Esto es lo que no consigo, pasar ese parámetro recogido con javascript y utilizarlo con php para la consulta. Intento algo como :

Código PHP:
Ver original
  1. $sql = "SELECT * FROM secciones WHERE id_departamento = "+<script>$F(param)</script>;

Obtengo el error:

Código PHP:
Ver original
  1. Parse error:  syntax error, unexpected '<' in ...

y me quedo ahí, he probado varias formas pero me parece la mejor!


Muchísimas gracias de antemano y Feliz Año para todos!

Última edición por Salami; 30/12/2009 a las 04:41 Razón: Código
  #2 (permalink)  
Antiguo 30/12/2009, 19:26
 
Fecha de Ingreso: noviembre-2008
Mensajes: 24
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Recoger y usar parámetros Ajax con PHP

Me parece que tu fallo está en el "+<script>$F(param)</script>". Creo que esa sintaxis no es correcta.

Si pusieras el código javascript con el que recoges el parámetro y haces la petición Ajax, y de paso el código PHP con el que recoges los datos sería de ayuda. Como no, te pongo un ejemplillo de ambos códigos, no los he probado pero creo que deberían funcionar.

Un saludo!

Código Javascript:
Ver original
  1. // La función javascript que recoge el parámetro y hace la petición
  2. function obtenerSecciones(){
  3.    // Obtienes el valor de la opción seleccionada
  4.    var departamento = document.getElementById('idDeTuSelect').value; //No sé cómo se hace con Prototype
  5.  
  6.    // Si usas la librería Prototype
  7.    new Ajax.Request('/ruta/hasta/pagina/secciones.php', {
  8.      method: 'post',
  9.      postBody: 'parametro='+opcion,
  10.      onSuccess: procesaRespuesta,
  11.    });
  12. }

Y el archivo PHP recibe la petición con
Código PHP:
Ver original
  1. $departamento= $_POST['parametro'];
  2. $sql = "SELECT * FROM secciones WHERE id_departamento = ".$departamento;
  #3 (permalink)  
Antiguo 31/12/2009, 02:41
 
Fecha de Ingreso: junio-2009
Mensajes: 31
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Recoger y usar parámetros Ajax con PHP

El problema es que, por circunstancias que no vienen al caso, necesito hacerlo por el método 'GET'., aunque parece coherente tu código. Lo que no pillo es el posBody, ya que suelo programar por el GET y por lo que leo este parámetro sólo vale para el POST.

La forma de recoger el parámetro de un formulario en Prototype es "$F('parametro')". También me interesaría realizarlo de esta forma, por si alguien supiera.

La función que utilizo para cargar el segundo select:
Código Javascript:
Ver original
  1. function carga_secciones(){
  2.         //Recojo la variable que me interesa para la consulta
  3.     var param = $F('id_departamento');
  4.     //Variable para el archivo PHP que realiza la consulta
  5.     var url="seccion.php";
  6.         //Creo el objeto
  7.     var ajaxRequest = new Ajax.Request(
  8.        
  9.         url,
  10.         {
  11.             method : 'get',
  12.             parameters: param,
  13.             asynchronous: true,
  14.                         //Función que mostrará en el select el resultado de la consulta
  15.             onComplete: showSeccion
  16.         });
  17.  
  18. }

Y el código de "seccion.php" que realiza la consulta:

Código PHP:
Ver original
  1. <?PHP
  2.  
  3.     //CONEXIÓN A BASE DE DATOS
  4.     $con=@MYSQL_connect($server, $usuario, $password)
  5.         or die ("Error de conexión");
  6.        
  7.     //SELECCIÓN DE BASE DE DATOS
  8.     MYSQL_select_db($bbdd,$con)
  9.         or die("Error de selección");
  10.  
  11.     //Recojo el parámetro que necesito
  12.         $param=$_GET['param'];
  13.         //Y la consulta que realizo:
  14.     $sql = "SELECT * FROM secciones WHERE id_departamento =".$param;
  15.    
  16.     $resultado = @MYSQL_query($sql, $con)
  17.         or die("Error de consulta");
  18.    
  19.     //Para cada elemento...
  20.     while($fila = MYSQL_fetch_assoc($resultado)){
  21.             //Tratamiento de los datos, que tampoco viene al caso...
  22.         echo $fila['id_seccion'].";".$fila['seccion']."<br>";
  23.    
  24.     }
  25.        
  26. ?>

El error que me da:

Código PHP:
Ver original
  1. Notice:  Undefined index: param in ...seccion.php on line 16

Y es referente a la línea de la consulta. Hay una tecla con la que no logro dar y me está volviendo loco! Gracias por la información, lo probaré por si lo necesito en otra ocasión, pero realmente necesito la otra manera.


Gracias por tu tiempo y Feliz Año!

Última edición por Salami; 04/01/2010 a las 01:43 Razón: Código
  #4 (permalink)  
Antiguo 04/01/2010, 06:13
 
Fecha de Ingreso: junio-2009
Mensajes: 31
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Recoger y usar parámetros Ajax con PHP

De verdad nadie puede orientarme? Es algo que necesito de verdad implementar, pero debo estar haciendo algo mal... Una orientación please!
  #5 (permalink)  
Antiguo 04/01/2010, 06:23
 
Fecha de Ingreso: noviembre-2008
Mensajes: 24
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Recoger y usar parámetros Ajax con PHP

Perdona, no vi tu respuesta.
Sea por GET o por POST, los parámetros hay que enviarlos en formato query string (parametro1=valor1&parametro2=valor2).

Creo que debería funcionar si la línea parameters: param, la cambias por algo como: parameters: "parametro="+param, y luego recoges el valor en PHP mediante $_GET['parametro']. O le das el nombre que quieras a las variables, la cuestión es que esté en ese formato.

Pruébalo y comenta qué tal
  #6 (permalink)  
Antiguo 08/01/2010, 06:19
 
Fecha de Ingreso: junio-2009
Mensajes: 31
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Recoger y usar parámetros Ajax con PHP

Pues todo perfecto! La solución fue esta:

Recoger parámetro en Javascript:

Código Javascript:
Ver original
  1. parametro = $F('id_departamento');

Pasar el parámetro al crear Ajax.Request:

Código Javascript:
Ver original
  1. var ajaxRequest = new Ajax.Request(
  2.  
  3.                     url,
  4.                     {
  5.                        
  6.                         method: "GET",
  7.                         parameters: "param="+parametro,
  8.                         asynchronous: true,
  9.                         onComplete: showSeccion        
  10.                    
  11.                     });

Para usar el parámetro en la página PHP:

$param = $_GET['id_departamento'];

No es que me quede muy claro pasar el parámetro poor JS y recogerlo así, ya que así es como se hace normalmente con PHP sin nada de Ajax.

Te lo agradezco en el alma. Sabría alguien como pasar varios parámetros?

El caso es que ahora quiero hacer insert en MySQL y sería lo mismo, recoger el formulario, pasarlo por Ajax y recogerlo en php. La función JS:

Código Javascript:
Ver original
  1. function insertar(){
  2.  
  3.                 nombre = 'nombre='+$F('nombre');
  4.                 apellido1 = 'apellido1='+$F('apellido1');
  5.                 apellido2 = 'apellido2='+$F('apellido2');
  6.                 url = "inserta_usuario.php";
  7.                
  8.                 ajaxRequest = Ajax.Request(
  9.                
  10.                     url,
  11.                     {
  12.                    
  13.                         method: 'GET',
  14.                         parameters: {
  15.                            
  16.                                 nombre: "nombre="+nombre,
  17.                                     apellido1: "apellido1"+apellido1,
  18.                                                                 apellido2: "apellido2"+apellido1
  19.                             }
  20.                         asynchronous: true,
  21.                         onComplete: insertaUsuario
  22.                    
  23.                     });

Y para recoger en PHP hago esto:
Código PHP:
Ver original
  1. $nombre = $_GET['nombre'];
  2. $apellido1 = $_GET['apellido1'];
  3. $apellido2 = $_GET['apellido2'];
  4.  
  5. $query = sprintf("INSERT into usuarios (nombre, apellido1, apellido2)
  6.             values ('%s', %s', %s')", $nombre, $apellido1, $apellido2);
  7.  
  8. $resultado = MYSQL_query($query);


Soy un coñazo, pero tampoco va, y le he dado unas cuantas vueltas ya....


Gracias de antemano con la ayuda en la carga y si alguien ayuda con esto pues más todavía.

Saludos.

Última edición por Salami; 08/01/2010 a las 06:32 Razón: Código
  #7 (permalink)  
Antiguo 08/01/2010, 08:58
 
Fecha de Ingreso: noviembre-2008
Mensajes: 24
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Recoger y usar parámetros Ajax con PHP

Me alegro de que te haya funcionado, al menos en principio. Vamos con lo siguiente.

Para enviar varios parámetros no tienes más que concatenarlos al igual que se hace con PHP, parametro1=valor1&parametro2=valor2. En javascript sería algo como
Código Javascript:
Ver original
  1. "parametro1="+variable1+"&parametro2="+variable2+...
Muy importante el carácter &.



Cuando dices que no va, ¿te da algún tipo de error o algo? Si usas firebug sería de ayuda que pusieses aquí la respuesta de la petición o el error que te de. Si no lo usas, te recomiendo que lo hagas, es muy útil especialmente para Ajax.

Para no dejarlo en nada, te comento los dos posibles errores que veo ahí a primera vista, al menos en el código Javascript, que mysql domino lo justo.

El primero, y no estoy seguro de que sea tenga yo razón, es que estás pasando como parámetro un objeto JSON. Sé que jQuery admite esto, pero de Prototype no tengo la información. No sé ni sí ni no, pero te lo comento por si acaso.

El segundo, y este me parece más posible, es repites el nombre del parámetro. Me explico: cuando asignas las variables que vas a pasar mediante Ajax lo haces de la forma
Código Javascript:
Ver original
  1. nombre = 'nombre='+$F('nombre');
  2.                 apellido1 = 'apellido1='+$F('apellido1');
  3.                 apellido2 = 'apellido2='+$F('apellido2');
y después vuelves a repetirle el proceso en
Código Javascript:
Ver original
  1. parameters: {
  2.                            
  3.                                 nombre: "nombre="+nombre,
  4.                                     apellido1: "apellido1"+apellido1,
  5.                                                                 apellido2: "apellido2"+apellido1
  6.                             }

Aprovechando la asignación que haces al principio, yo pasaría los parámetros de esta manera:
Código Javascript:
Ver original
  1. nombre = 'nombre='+$F('nombre');
  2. apellido1 = 'apellido1='+$F('apellido1');
  3. apellido2 = 'apellido2='+$F('apellido2');
  4. ......
  5. parameters: nombre+"&"+apellido1+"&"+apellido2;

O directamente
Código Javascript:
Ver original
  1. parameters: "nombre="+$F('nombre')+"&apellido1="+$F('apellido1')+"&apellido2="+$F('apellido2');

Combinaciones posibles hay muchas, la cuestión es que al final los parámetros lleguen en el formato correcto.

Espero haberme hecho entender, porque no soy muy buen profesor. Inténtalo y si no lo que te dije al principio, alguna información sobre el error o lo que sea.
  #8 (permalink)  
Antiguo 11/01/2010, 07:18
 
Fecha de Ingreso: junio-2009
Mensajes: 31
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Recoger y usar parámetros Ajax con PHP

Ok, sí que estaba mal seguro. En realidad quería hacer lo que tú, pero de tanto darle vueltas al código al final lo dejé peor... Ahora tengo:


Por un lado, la función Javascript:

Código Javascript:
Ver original
  1. function insertar(){
  2.                
  3.                 param = 'nombre='+$F('nombre');
  4.                 param = param+'&apellido1='+$F('apellido1');
  5.                 param = param+'&apellido2='+$F('apellido2');
  6.                 param = param+'&dni='+$F('dni');
  7.                 param = param+'&usuario='+$F('usuario');
  8.                 param = param+'&password='+$F('password');
  9.                 param = param+'&id_departamento='+$F('id_departamento');
  10.                 param = param+'&id_seccion='+$F('id_seccion');
  11.                
  12.                            
  13.                 url = "inserta_usuario.php";
  14.                 alert("1. Objeto ajaxRequest");
  15.                 ajaxRequest = Ajax.Request(
  16.                
  17.                     url,
  18.                     {
  19.                    
  20.                         method: 'GET',
  21.                         parameters: param,
  22.                         asynchronous: true,
  23.                         onComplete: insertaUsuario
  24.                    
  25.                     });
  26.                     alert("3. INSERTADO");     
  27.            
  28.             }

Al punto "3. INSERTADO" no logro que llegue.


Por otra parte, la página PHP:

Código PHP:
Ver original
  1. $server = 'localhost';
  2.     $usuario = 'root';
  3.     $password = '';
  4.     $bbdd = 'AJAX';
  5.  
  6.     $parametro = $_GET['param'];   
  7.         echo "<script language="javascript">alert("2. Recogido");</script>"
  8.     $con = MYSQL_connect($server, $usuario, $password)
  9.                 or die ("Error de conexión");
  10.    
  11.     MYSQL_select_db($bbdd, $con)
  12.                 or die ("Error de selección");
  13.    
  14.  
  15.                                            
  16.     $query = sprintf("INSERT into usuarios
  17.                     (nombre, apellido1, apellido2, dni, usuario, password, id_departamento, id_seccion)
  18.                     values ('%s')", $param) );                                     
  19.     $resultado = MYSQL_query($query);


Cuando digo que no va no es que dé error, sino que no lanza los alert que pongo. Por ejemplo, el alert "2. INSERTADO" debe aparecer cuando por fin se haga la inserción en BD. Pero ese no llega a lanzarse nunca, sin embargo el primero sí.

En PHP he puesto el alert "2. Recogido" para saber cuando se ha recogido al menos el parámetro, pero tampoco llega nunca ahí.


Es un fastidio, porque un parámetro sí que logro pasar, pero no consigo pasar más de uno....


Muy agradecido Si se te ocurre algo más.... Seguiré bicheando.
  #9 (permalink)  
Antiguo 11/01/2010, 11:54
 
Fecha de Ingreso: noviembre-2008
Mensajes: 24
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Recoger y usar parámetros Ajax con PHP

Bueno, a ver si conseguimos solucionarlo por fin. Esta vez a primera vista no he visto ningún motivo por el debería fallar el código. Así que he descargado la librería Prototype, y he copiado tu código javascript (reduciéndo un poco lo que me sobraba) para probarlo, y efectivamente se comporta como dices.

Lo que te decía anteriormente de Firebug es importante, porque gracias a él he encontrado el problema. El error concreto que me daba era:
" this.initialize is undefined " -- prototype.js (línea 89)
Es decir, da error en el propio código de Protoype. Como es algo bastante raro, he buscado en Google el problema y me encontré con esto:
http://groups.google.com/group/rubyonrails-spinoffs/browse_thread/thread/048a9062a0387de0?pli=1

Como comentan ahí, necesitas poner la palabra "new" en el Ajax.Request de forma que en vez de:
Código Javascript:
Ver original
  1. ajaxRequest = Ajax.Request(

tengas:
Código Javascript:
Ver original
  1. new Ajax.Request(

Así lo he probado y el código se ejecuta entero.
Prueba con eso, a ver.
  #10 (permalink)  
Antiguo 13/01/2010, 06:54
 
Fecha de Ingreso: junio-2009
Mensajes: 31
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Recoger y usar parámetros Ajax con PHP

Quŕ crack!!

Al final ha salido. Aparte de lo que mencionas he retocado algunas cosas más como me ha parecido y terminó saliendo. Copio y pego el código por si a alguien le interesa:

Recojo con Ajax los datos del formulario y los paso a otra página PHP que los insertará:
Código Javascript:
Ver original
  1. function insertar(){
  2.                
  3.                 param = 'nombre='+$F('nombre');
  4.                 param = param+'&apellido1='+$F('apellido1');
  5.                 param = param+'&apellido2='+$F('apellido2');
  6.                 param = param+'&dni='+$F('dni');
  7.                 param = param+'&usuario='+$F('usuario');
  8.                 param = param+'&password='+$F('password');
  9.                 param = param+'&id_departamento='+$F('id_departamento');
  10.                 param = param+'&id_seccion='+$F('id_seccion');
  11.                
  12.                            
  13.                 url = "inserta_usuario.php";
  14.                
  15.                 ajaxRequest = new Ajax.Request(
  16.                
  17.                     url,
  18.                     {
  19.                    
  20.                         method: 'GET',
  21.                         parameters: param,
  22.                         asynchronous: true,
  23.                         onComplete: insertaUsuario
  24.                    
  25.                     });
  26.    
  27.            
  28.             }


Página en PHP que los inserta:
Código PHP:
Ver original
  1. <?PHP
  2.     $server = 'localhost';
  3.     $usuario = 'root';
  4.     $password = '';
  5.     $bbdd = 'AJAX';
  6.    
  7.     $resultado = "mal";
  8.        
  9.     $con = MYSQL_connect($server, $usuario, $password)
  10.                 or die ("Error de conexión");
  11.    
  12.     MYSQL_select_db($bbdd, $con)
  13.                 or die ("Error de selección");
  14.    
  15.     $query = sprintf("INSERT into usuarios
  16.                                             (nombre, apellido1, apellido2, dni, usuario, password, id_departamento, id_seccion)
  17.                                             values ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')",
  18.                                             MYSQL_real_escape_string($_GET['nombre']),
  19.                                             MYSQL_real_escape_string($_GET['apellido1']),                                          
  20.                                             MYSQL_real_escape_string($_GET['apellido2']),
  21.                                             MYSQL_real_escape_string($_GET['dni']),
  22.                                             MYSQL_real_escape_string($_GET['usuario']),
  23.                                             MYSQL_real_escape_string($_GET['password']),
  24.                                             MYSQL_real_escape_string($_GET['id_departamento']),
  25.                                             MYSQL_real_escape_string($_GET['id_seccion'])
  26.                                             );
  27.                                            
  28.    
  29.        
  30.                    
  31.     MYSQL_query($query) or die (mysql_error());
  32.    
  33.    
  34.    
  35. ?>

Siempre he usado la función MYSQL_query de la forma:


Código PHP:
Ver original
  1. $variable = MYSQL_query($query) or die (mysql_error());


En esta ocasión he eliminado la variable y todo va bien. Imagino que para los insert no se necesita...


Bueno pues todo un placer y una hazaña por suspuesto sloy! Muy agradecido, en serio.

Un saludo.
  #11 (permalink)  
Antiguo 13/01/2010, 11:41
 
Fecha de Ingreso: noviembre-2008
Mensajes: 24
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Recoger y usar parámetros Ajax con PHP

Nada, pues me alegro de que al final todo haya acabado bien. Sí que ha sido un reto interesante para mi, que también empiezo con Ajax.

Un saludo, ¡y más suerte en el futuro !
  #12 (permalink)  
Antiguo 14/01/2010, 02:32
 
Fecha de Ingreso: junio-2009
Mensajes: 31
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Recoger y usar parámetros Ajax con PHP

Yo también recien empiezo, la verdad es que parece el futuro y hay que saber aplicarlo a bases de datos.

Somos novatos hasta en el foro, llevamos los mismos mensajes :P

Nos leemos ;)
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




La zona horaria es GMT -6. Ahora son las 13:37.