Foros del Web » Programando para Internet » PHP »

header o form en un include con ajax

Estas en el tema de header o form en un include con ajax en el foro de PHP en Foros del Web. Hola, Tengo una página con un formulario html con un archvo include php. Al darle a enviar el formulario se envia por post a la ...
  #1 (permalink)  
Antiguo 16/02/2014, 06:08
 
Fecha de Ingreso: mayo-2009
Mensajes: 382
Antigüedad: 14 años, 10 meses
Puntos: 6
header o form en un include con ajax

Hola,
Tengo una página con un formulario html con un archvo include php.
Al darle a enviar el formulario se envia por post a la misma página y el include calcula precios y si no esta disponible vuelca un mensaje,
y si está disponible quiero de alguna manera redigir a la página de reservas.
El formulario también funciona con Ajax pero con php de fondo por si javascript está desactivado.
Todo funciona menos la redirección.

No pude poner el include arriba en el documento para poner un header porque el Ajax no funciona con el include a principio del documento.

En el include php si esta disponible debe de venir la accion en un else {
funciona ya que un echo despues de else se imprime correctamente.

He medito el header dentro del else y he usado ob_start etc para que el header se ejecute. Esto funciona con javascript desactivado pero no con javascript activado.

Entonces desesperada en el else he metido un formulario que se envia automáticamente con javascript y con un boton noscript.
Y aque viene lo raro, al menos para mi.
Hago el calculo con javascript desactivado, calcula correctamente y me sale el boton del else.
Le doy clic, y no se ejecuta el action sino la página refresca.
No me explico. Hay otros formularios pero ninguno con el mismo nombre, ni en la pagina ni en el include. No se puede tener un formulario en un include?
En fin, lo correcto es enviar mediante un header, pero no sé como.
Alguna idea?
Gracias
  #2 (permalink)  
Antiguo 16/02/2014, 06:53
lolainas
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: header o form en un include con ajax

Pega aquí el código
  #3 (permalink)  
Antiguo 16/02/2014, 10:52
Avatar de EstebanC  
Fecha de Ingreso: mayo-2009
Mensajes: 98
Antigüedad: 14 años, 11 meses
Puntos: 10
Respuesta: header o form en un include con ajax

Hola Helen,

Coincido con Lolainas, compartenos el código fuente aquí y te ayudamos :)
__________________
NEOLO.COM - El hosting de las 3 B: Bueno, bonito, y barato :) Desde 2002: Web Hosting, Hosting Reseller, Dominios, SSL.
  #4 (permalink)  
Antiguo 16/02/2014, 12:16
 
Fecha de Ingreso: mayo-2009
Mensajes: 382
Antigüedad: 14 años, 10 meses
Puntos: 6
Respuesta: header o form en un include con ajax

El script es tan largo que no cabe.
He leido en este post y varios otros que no se puede usar header con Ajax,
Debe de hacerse la redirección desde el script ajax, pero no sé como:
http://www.daniweb.com/web-developme...cation-problem
Lo de meter un formulario no es lo mejor, lo correcto es un header, hace falta por si javascript esta desactivado, pero no me gusta usar ob_start etc.
Pego parte del codigo quitando HTML etc.

Primera pagina que tiene el incluye al php y al Ajax
Código PHP:
<?php
ini_set
("session.cookie_lifetime","3600");
ini_set("session.gc_maxlifetime","3600");
session_start();
header('Content-type: text/html; charset=utf-8'); 
if  ( !
$_SERVER['HTTPS'] )
        {
                
$host $_SERVER['HTTP_HOST'];
                
$request_uri $_SERVER['REQUEST_URI'];
                
$good_url "https://" $host $request_uri;

                
header"HTTP/1.1 301 Moved Permanently" );
                
header"Location: $good_url" );
                exit;
        }
$propiedad 'Bambo _1FE'
if(!isset(
$_SESSION['reservas'])){
$_SESSION['reservas'] = array();
}
include 
'../conexpdo.php';
    
?>
<?php
//anulamos reserva si reservado pero no pagado
if(isset($_SESSION['reservas']['paso4']['id'])){
 
$ids=$_SESSION['reservas']['paso4']['id'];
$query $dbh->prepare("SELECT id, statement from orders WHERE statement = 'unpaid' AND booked='booked' AND id = :ids");
$query->execute(array(
    
'ids' => $ids
)); 
  while (
$row $query->fetch()){           
$sql $dbh->prepare("DELETE FROM bookings WHERE id= :ids");
$sql->bindParam(':ids'$ids);
$sql->execute();
$sql $dbh->prepare("UPDATE orders SET booked='deleted' WHERE id = '$ids'");
$sql->bindParam(':ids'$ids);
$sql->execute();
unset(
$_SESSION['reservas']['paso4']['id']);
  }
//end while
  
}//end if isset id 

if(isset($_SESSION['reservas']['paso4']['nodisponible'])){
echo 
"<p class='red'>We are sorry, $propiedad has just been rented out and is not available for those dates anymore, please try some other dates. </p>";
unset(
$_SESSION['reservas']['paso4']);
    }
//end  no disponible
if(isset($_SESSION['reservas']['paso1'])){
unset(
$_SESSION['reservas']['paso1']);
}
if(isset(
$_SESSION['reservas']['paso2'])){
unset(
$_SESSION['reservas']['paso2']);
}
if(isset(
$_SESSION['reservas']['paso3'])){
unset(
$_SESSION['reservas']['paso3']);
}
?>
<form name="solicitud" class="formenquirer" id="solicitud" action="elecciones.php?propiedad=<?php echo $propiedad?>" method="post">
<input type="text" id="propiedad" name="propiedad" value="<?php print($propiedad); ?>">
        <p>Arrival: <?php include '../includes/day.php'?> php include '../includes/month.php'; ?>Departure: <?php include '../includes/day2.php'?> php include '../includes/month2.php'; ?> 
<p>Texto <br>
 <input name="percentage" class="required" type="radio" value="25"><br>
<input name="percentage" class="required" type="radio" value="50"> </p>    
 <p><input name="terms" class="required" type="checkbox" title="Please accept terms" value="terms">
</p>
<p><br><input class="boton roundedcorner border" size="10" type="submit" onClick="enviarDatosSolicitud();" name="enviar" id="enviar" value="Calculate/Check">
</p><br>
<?php
include 'calculadora.php';
    <
script type="text/javascript">
    
//Going to hide the formbutton and text since the above will work.
    
document.getElementById('enviar').type 'button';
    
document.getElementById('calc').style.display 'none';
</script>
<div id="resultado"> <!--calculadora ajax--> </div> 
</form>
<script type="text/javascript" src=" /ajaxcalculadora.js"></script>
Pagina php calculadora.php
Código PHP:
include '../conexpdo.php';
 if (isset(
$_POST['enviar'])){
if (!empty(
$percentage) && !empty($terms)) {    
if (
$salida $llegada){
$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
    
)); 
$query->setFetchMode(PDO::FETCH_OBJ);
     if (
$row $query->fetch()) {
       if (
$row->tiporeserva=="larga"){ echo "<p>This property is available only for long term rentals, consult us for a price.</p>
"
; } 
else { 
$propiedad str_replace("_"" "$propiedad); 
echo 
"<p>$propiedad is not available from $arrival_display to $departure_display.</p>"
echo 
"<p>$propiedad is occupied from "$row->lleg ." until "$row->sal ."</p>"
}
 
}
//fin mirar si disponible query fetch
else{
header('Location: https://www.sitios.com/reservainstantanea.php');
}
//end else if available
  
}//end if salida mayor
 
else {echo "<span class=\"red\"><p>There is an error with the dates please try again, arrival: $arrival_display  and departure: $departure_display</p> </span>";} 
 }
//end if !empty form

 
else { echo "<p>Please fill in bookingoptions choosen (25% or 50%) and accept booking terms and conditions to proceed with the booking.</p>"; }
        }    
 
?> 
El archivo Ajax
Código Javascript:
Ver original
  1. // Función para recoger los datos de PHP según el navegador, se usa siempre.
  2. function objetoAjax(){
  3.     var xmlhttp=false;
  4.     try {
  5.         xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
  6.     } catch (e) {
  7.  
  8.     try {
  9.         xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  10.     } catch (E) {
  11.         xmlhttp = false;
  12.     }
  13. }
  14.  
  15. if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
  16.       xmlhttp = new XMLHttpRequest();
  17.     }
  18.     return xmlhttp;
  19. }
  20.  //Función para esconder el resultado al cambiar
  21.  function dataChanged() {
  22. document.getElementById("resultado").style.display = "none";
  23. }
  24. //Función para recoger los datos del formulario y enviarlos por post  
  25. function enviarDatosSolicitud(){
  26.   //div donde se mostrará lo resultados
  27. var divResultado = document.getElementById('resultado');
  28. divResultado.style.display = "block";
  29.   //recogemos los valores de los inputs
  30.   propiedad = document.solicitud.propiedad.value;
  31.   terms = document.solicitud.propiedad.value;
  32.   percentage = document.solicitud.propiedad.value;
  33.   day = document.solicitud.day.options[document.solicitud.day.selectedIndex].value;
  34.   day2 = document.solicitud.day2.options[document.solicitud.day2.selectedIndex].value;
  35.   month = document.solicitud.month.options[document.solicitud.month.selectedIndex].value;
  36.   month2 = document.solicitud.month2.options[document.solicitud.month2.selectedIndex].value;
  37.  
  38.   //instanciamos el objetoAjax
  39.   ajax=objetoAjax();
  40.  
  41.   ajax.open("POST", " calculadora.php ",true);
  42.   //cuando el objeto XMLHttpRequest cambia de estado, la función se inicia
  43.   ajax.onreadystatechange=function() {
  44.       //la función responseText tiene todos los datos pedidos al servidor
  45.     if (ajax.readyState==4) {
  46.         //mostrar resultados en esta capa
  47.         divResultado.innerHTML = ajax.responseText
  48.         //llamar a funcion para limpiar los inputs, en este caso no se hace
  49.         LimpiarCampos();
  50.     }
  51.  }
  52.     ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
  53.     //enviando los valores a registro.php para que inserte los datos
  54.     ajax.send("propiedad="+propiedad+"&enviar="+enviar+"&day="+day+"&day2="+day2+"&month="+month+"&month2="+month2+"&percentage="+percentage+"&terms="+terms+"")
  55. }

Etiquetas: ajax, form, formulario, header, html, include
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 17:25.