Foros del Web » Programando para Internet » PHP »

Pdo prepared statements con ajax

Estas en el tema de Pdo prepared statements con ajax en el foro de PHP en Foros del Web. Hola, Ya me estoy tirando de los pelos!!!!!! No sé si debe de ir aqui o en javascript. Tengo un script con pdo consulta preparada ...
  #1 (permalink)  
Antiguo 10/02/2014, 15:55
 
Fecha de Ingreso: mayo-2009
Mensajes: 382
Antigüedad: 15 años
Puntos: 6
Pdo prepared statements con ajax

Hola,
Ya me estoy tirando de los pelos!!!!!!
No sé si debe de ir aqui o en javascript.
Tengo un script con pdo consulta preparada que funciona.
Estoy intentando añadir Ajax y no se ejecuta la consulta preparada.
En la consulta como uso la misma variable varias veces tuve que llamarlo de distinas maneras en el query pero la variable es la misma.

En este los echos se imprimen correctamente pero no se ejecuta la consulta (con Ajax)

Código PHP:
$percentage  htmlspecialchars($_POST['percentage']);  
$propiedad  htmlspecialchars($_POST['propiedad']); 
$terms  htmlspecialchars($_POST['terms']);
$day htmlspecialchars($_POST['day']);
$month htmlspecialchars($_POST['month']);
$day2 htmlspecialchars($_POST['day2']);
$month2 htmlspecialchars($_POST['month2']);
 
$llegada $month."-".$day;
  
$salida $month2."-".$day2;
if (
$salida $llegada){
    echo 
$salida;
    echo 
$llegada;
//miramos si disponible
$query $dbh->prepare("SELECT DATE_FORMAT(llegada, '%e %b %Y') as lleg, DATE_FORMAT(salida, '%e %b %Y') as sal, 
tiporeserva, propiedad, TO_DAYS(:salida) - TO_DAYS(:llegada) as dias from bookings where ( propiedad = :propiedad )
AND ((:llegada2 BETWEEN llegada AND date_sub(salida, interval +1 day)) 
or (:salida2 BETWEEN date_sub(llegada, interval -1 day) AND salida) or (llegada <= :llegada3 AND salida >= :salida3) 
or (llegada >= :llegada4 AND salida <= :salida4))"
);
$query->execute(array(
 
'salida' => $salida
     
'llegada' => $llegada
   
'propiedad' => $propiedad
    
'llegada2' => $llegada
    
'salida2' => $salida
    
'llegada3' => $llegada
        
'salida3' => $salida
    
'llegada4' => $llegada
    
'salida4' => $salida
    
)); 
En el javascript declaro los variables del formulario asi y funciona en las paginas que no usa pdo.
Debo de declarar las todas las variables que figura en la consulta preparada?:
Código Javascript:
Ver original
  1. function enviarDatosSolicitud(){
  2.  
  3.   //div donde se mostrará lo resultados
  4.   divResultado = document.getElementById('resultado');
  5.   //recogemos los valores de los inputs
  6.   propiedad = document.solicitud.propiedad.value;
  7.   day = document.solicitud.day.options[document.solicitud.day.selectedIndex].value;
  8.   day2 = document.solicitud.day2.options[document.solicitud.day2.selectedIndex].value;
  9.   month = document.solicitud.month.options[document.solicitud.month.selectedIndex].value;
  10.   month2 = document.solicitud.month2.options[document.solicitud.month2.selectedIndex].value;
  11.     ajax.send("propiedad="+propiedad+"&enviar="+enviar+"&day="+day+"&day2="+day2+"&month="+month+"&month2="+month2+""

Última edición por helenp; 10/02/2014 a las 16:01
  #2 (permalink)  
Antiguo 10/02/2014, 16:45
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Pdo prepared statements con ajax

¿que hace tu método ajax.send?
  #3 (permalink)  
Antiguo 10/02/2014, 16:55
 
Fecha de Ingreso: mayo-2009
Mensajes: 382
Antigüedad: 15 años
Puntos: 6
Respuesta: Pdo prepared statements con ajax

Cita:
Iniciado por GatorV Ver Mensaje
¿que hace tu método ajax.send?
Pues si no lo entiendo mal, envia las variables a un include que tengo donde estan las consultas.
Pero vamos, el mismo script lo tengo ya funcionando en la web, es una calculadora y ver disponibilidad y funciona con ajax, pero en la web aun usa mysql obsoleto.
  #4 (permalink)  
Antiguo 10/02/2014, 17:05
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 16 años
Puntos: 528
Respuesta: Pdo prepared statements con ajax

En principio ajax no tiene que ver con las forma en que usas la base de datos, sea mediante las funciones clásicas mysql de php o pdo, así que te sugiero que hagas un var_dump a POST

var_dump($_POST); para ver si recibes los datos, que sospecho que los vas a recibir por _GET

Por cierto, usando PDO, ¿qué necesidad tienes de usar htmlspecialchars?
  #5 (permalink)  
Antiguo 10/02/2014, 17:13
 
Fecha de Ingreso: mayo-2009
Mensajes: 382
Antigüedad: 15 años
Puntos: 6
Respuesta: Pdo prepared statements con ajax

Cita:
Iniciado por ocp001a Ver Mensaje
En principio ajax no tiene que ver con las forma en que usas la base de datos, sea mediante las funciones clásicas mysql de php o pdo, así que te sugiero que hagas un var_dump a POST

var_dump($_POST); para ver si recibes los datos, que sospecho que los vas a recibir por _GET

Por cierto, usando PDO, ¿qué necesidad tienes de usar htmlspecialchars?
Si las recibo, se imprimen correctamente.
Es una pagina que envia a si mismo por post y tiene un archivo .php como include si se envia el formulario.
Pues es verdad, como estoy rehaciendo una pagina de antes, pues puedo quitar el htmlspecialchars.

El var dump imprime esto:
2014-02-182014-02-01Beach_1array(6) { ["propiedad"]=> string(16) "Beach_1" ["enviar"]=> string(25) "[object HTMLInputElement]" ["day"]=> string(2) "01" ["day2"]=> string(2) "18" ["month"]=> string(7) "2014-02" ["month2"]=> string(7) "2014-02" }
los tres primeros son los importantes,
salida, llegada y propiedad que es lo que se usa en la consulta
  #6 (permalink)  
Antiguo 10/02/2014, 17:15
 
Fecha de Ingreso: mayo-2009
Mensajes: 382
Antigüedad: 15 años
Puntos: 6
Cita:
Iniciado por ocp001a Ver Mensaje

var_dump($_POST); para ver si recibes los datos, que sospecho que los vas a recibir por _GET
El action es por post, pero envia una variable por get (por si quieren copiar y pegar el url)

method="post" action="ajaxbookingchoices.php?propiedad=<?php echo $propiedad; ?>">

si desactivo el javascript no recibo la variable propiedad, por alli van los tiros,
aunque lo paso por un hidden por post y en el action por get
esto imprime:
2014-02-202014-02-01array(5) { ["day"]=> string(2) "01" ["month"]=> string(7) "2014-02" ["day2"]=> string(2) "20" ["month2"]=> string(7) "2014-02" ["enviar"]=> string(8) "Book now" }

Vaya,
si pongo
$propiedad = $_REQUEST['propiedad'];
funciona con javascript desactivado,
pero con el ajax sigue sin ejecutarse... imprime correctamente la variable
el ajax open es por post...
ajax.open("POST", "ajaxinstant.php",true);

Última edición por Triby; 10/02/2014 a las 19:18 Razón: Combinar mensajes seguidos
  #7 (permalink)  
Antiguo 10/02/2014, 17:30
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 16 años
Puntos: 528
Respuesta: Pdo prepared statements con ajax

Bueno, descartando el tema de si recibías o no los datos, ahora deberías ver si no hay un error en tu consulta, pidiendo a pdo que te muestre el error, para esto es buena idea usar bloques try catch

try{
//ejecutar consulta
}
catch(Exception $e){
echo $e->getMessage();
}
  #8 (permalink)  
Antiguo 10/02/2014, 17:32
 
Fecha de Ingreso: mayo-2009
Mensajes: 382
Antigüedad: 15 años
Puntos: 6
Respuesta: Pdo prepared statements con ajax

Cita:
Iniciado por ocp001a Ver Mensaje
Bueno, descartando el tema de si recibías o no los datos, ahora deberías ver si no hay un error en tu consulta, pidiendo a pdo que te muestre el error, para esto es buena idea usar bloques try catch

try{
//ejecutar consulta
}
catch(Exception $e){
echo $e->getMessage();
}
La consulta es correcta, ya que es una pagina que existe,
y con javascript desactivado funciona con REQUEST
el problema es ahora con el Ajax,
sera porque en el ajax pone por post:
ajax.open("POST", "ajaxinstant.php",true);

pero la variable propiedad se recibe tanto por post como por get?
  #9 (permalink)  
Antiguo 10/02/2014, 18:06
Avatar de Reedyseth  
Fecha de Ingreso: enero-2009
Ubicación: Chihuahua, México
Mensajes: 419
Antigüedad: 15 años, 3 meses
Puntos: 36
Respuesta: Pdo prepared statements con ajax

La consulta preparada no se esta realizando por que no estas ligando bien los parametros, si le dices que vas a ligar una variable que se llama ':llegada' eso mismo debes de ligarle en execute(Fijate que lleva dos puntos), lo que veo que estas haciendo mal es que tienes los nombres de tus variables sin los dos puntos, por lo tanto estas ligando variables completamente diferente.

Código PHP:
$query->execute(array(
 
'salida' => $salida
     
'llegada' => $llegada
   
'propiedad' => $propiedad
    
'llegada2' => $llegada
    
'salida2' => $salida
    
'llegada3' => $llegada
        
'salida3' => $salida
    
'llegada4' => $llegada
    
'salida4' => $salida
    
)); 
El problema no es de Ajax, es de PHP.

Saludos.
__________________
Reedyseth
Te ayudo? No olvides dar un +
blog:http://behstant.com/blog
En el blog:Tutoriales de Desarrollo Web PHP, Javascript, BD y más.
  #10 (permalink)  
Antiguo 11/02/2014, 02:49
 
Fecha de Ingreso: mayo-2009
Mensajes: 382
Antigüedad: 15 años
Puntos: 6
Respuesta: Pdo prepared statements con ajax

Cita:
Iniciado por Reedyseth Ver Mensaje
La consulta preparada no se esta realizando por que no estas ligando bien los parametros, si le dices que vas a ligar una variable que se llama ':llegada' eso mismo debes de ligarle en execute(Fijate que lleva dos puntos), lo que veo que estas haciendo mal es que tienes los nombres de tus variables sin los dos puntos, por lo tanto estas ligando variables completamente diferente.

Código PHP:
$query->execute(array(
 
'salida' => $salida
     
'llegada' => $llegada
   
'propiedad' => $propiedad
    
'llegada2' => $llegada
    
'salida2' => $salida
    
'llegada3' => $llegada
        
'salida3' => $salida
    
'llegada4' => $llegada
    
'salida4' => $salida
    
)); 
El problema no es de Ajax, es de PHP.

Saludos.
Como dije antes la consulta funciona si desactivo javascript en el navegador.
En los manuales que yo he seguido no hace falta los puntos en el array.
Aún asi lo he probado a ver.
Esto funciona con javascript desactivado y con activado no ejecuta el query
'salida' => $salida
, 'llegada' => $llegada
, 'propiedad' => $propiedad
, 'llegada2' => $llegada
, 'salida2' => $salida
, 'llegada3' => $llegada
, 'salida3' => $salida
, 'llegada4' => $llegada
, 'salida4' => $salida

)); [/PHP]

Esto también funciona con javascript desactivado pero con javascript activado no ejecuta el query tampoco
Código PHP:
$query->execute(array(
 
':salida' => $salida
     
':llegada' => $llegada
   
':propiedad' => $propiedad
    
':llegada2' => $llegada
    
':salida2' => $salida
    
':llegada3' => $llegada
        
':salida3' => $salida
    
':llegada4' => $llegada
    
':salida4' => $salida
    
)); 

Última edición por helenp; 11/02/2014 a las 02:57
  #11 (permalink)  
Antiguo 11/02/2014, 03:15
 
Fecha de Ingreso: mayo-2009
Mensajes: 382
Antigüedad: 15 años
Puntos: 6
Respuesta: Pdo prepared statements con ajax

Si intento ejecutar la consulta con javascript activado y con firebug abierto me salen estos errores:

"NetworkError: 400 Bad Request - https://www.misitio.com/ajaxinstant.php"
ReferenceError: LimpiarCampos is not defined


Si ejecuto el Ajax que tengo que si funciona pero no usa pdo solo sale este error en firebug:
ReferenceError: LimpiarCampos is not defined
LimpiarCampos();


He puesto las paginas en root, y ahora no me da el bad request pero tampoco se ejecuta,
puede ser porque propiedad recibo tanto por get como por post?

Última edición por helenp; 11/02/2014 a las 03:23
  #12 (permalink)  
Antiguo 11/02/2014, 04:16
 
Fecha de Ingreso: mayo-2009
Mensajes: 382
Antigüedad: 15 años
Puntos: 6
Respuesta: Pdo prepared statements con ajax

Ya he probado todo,
he cambiado el include php por otro que no lleva pdo y funciona perfectamente, por lo tanto el problema esta en el archivo php.
y hace los echos correctamente, lo que no ejecuta es la consulta:
De verdad no lo entiendo, y por los : en los variables del array no es
Código PHP:
Ver original
  1. if ($salida > $llegada){
  2.     echo $salida;
  3.     echo $llegada;
  4.     echo $propiedad;
  5.     var_dump($_POST);
  6. //miramos si disponible
  7. try {
  8.     echo "test";
  9. $query = $dbh->prepare("SELECT DATE_FORMAT(llegada, '%e %b %Y') as lleg, DATE_FORMAT(salida, '%e %b %Y') as sal,tiporeserva, propiedad, TO_DAYS(:salida) - TO_DAYS(:llegada) as dias from bookings where ( propiedad = :propiedad )
  10. AND ((:llegada2 BETWEEN llegada AND date_sub(salida, interval +1 day))
  11. or (:salida2 BETWEEN date_sub(llegada, interval -1 day) AND salida) or (llegada <= :llegada3 AND salida >= :salida3) or (llegada >= :llegada4 AND salida <= :salida4))");
  12. $query->execute(array(
  13.  ':salida' => $salida
  14.     , ':llegada' => $llegada
  15.    , ':propiedad' => $propiedad
  16.     , ':llegada2' => $llegada
  17.     , ':salida2' => $salida
  18.     , ':llegada3' => $llegada
  19.         , ':salida3' => $salida
  20.     , ':llegada4' => $llegada
  21.     , ':salida4' => $salida
  22.    
  23. ));
  24. }

el try y catch no vuelca error ninguno

Etiquetas: ajax, formulario, html, pdo, select, variable
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 12:50.