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// Función para recoger los datos de PHP según el navegador, se usa siempre.
function objetoAjax(){
var xmlhttp=false;
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (E) {
xmlhttp = false;
}
}
if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
xmlhttp = new XMLHttpRequest();
}
return xmlhttp;
}
//Función para esconder el resultado al cambiar
function dataChanged() {
document.getElementById("resultado").style.display = "none";
}
//Función para recoger los datos del formulario y enviarlos por post
function enviarDatosSolicitud(){
//div donde se mostrará lo resultados
var divResultado = document.getElementById('resultado');
divResultado.style.display = "block";
//recogemos los valores de los inputs
propiedad = document.solicitud.propiedad.value;
terms = document.solicitud.propiedad.value;
percentage = document.solicitud.propiedad.value;
day = document.solicitud.day.options[document.solicitud.day.selectedIndex].value;
day2 = document.solicitud.day2.options[document.solicitud.day2.selectedIndex].value;
month = document.solicitud.month.options[document.solicitud.month.selectedIndex].value;
month2 = document.solicitud.month2.options[document.solicitud.month2.selectedIndex].value;
//instanciamos el objetoAjax
ajax=objetoAjax();
ajax.open("POST", " calculadora.php ",true);
//cuando el objeto XMLHttpRequest cambia de estado, la función se inicia
ajax.onreadystatechange=function() {
//la función responseText tiene todos los datos pedidos al servidor
if (ajax.readyState==4) {
//mostrar resultados en esta capa
divResultado.innerHTML = ajax.responseText
//llamar a funcion para limpiar los inputs, en este caso no se hace
LimpiarCampos();
}
}
ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
//enviando los valores a registro.php para que inserte los datos
ajax.send("propiedad="+propiedad+"&enviar="+enviar+"&day="+day+"&day2="+day2+"&month="+month+"&month2="+month2+"&percentage="+percentage+"&terms="+terms+"")
}