Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

iuree

Problema com calculadora/calendário de preços

Recommended Posts

Oi pessoal. É meu primeiro tópico aqui no fórum, então se algo estiver errado por favor avisem...

 

É o seguinte, o que estou fazendo é uma calculadora de tarifas para uma pousada. O que ela faz é calcular quanto você irá gastar na data de entrada e de saída selecionadas no calendário.

Que é isso:

http://nautilus-ilhabela.com.br/portugese/rates.php

 

Aqui está a minha on-line:

http://www.recantodasaraucarias.com.br/teste/reservas/rates.php

 

Até aí tudo certo. Eu adaptei o layout do jeito que eu queria, e o calendário funciona ok. Porém quando eu seleciono as datas de entrada e saída, os preços não são carregados e a animação gif de carregamento fica alí. Já verifiquei os caminhos de todos os arquivos externos que essa página usa, e estão todos no diretório correto (espero). Sou um tanto novo com php, tô mais acostumado com o flash e o as, então desculpem se é uma dúvida muito estúpida. Desde já agradeço a quem puder ajudar...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi pessoal. É meu primeiro tópico aqui no fórum, então se algo estiver errado por favor avisem...

 

É o seguinte, o que estou fazendo é uma calculadora de tarifas para uma pousada. O que ela faz é calcular quanto você irá gastar na data de entrada e de saída selecionadas no calendário.

Que é isso:

http://nautilus-ilhabela.com.br/portugese/rates.php

 

Aqui está a minha on-line:

http://www.recantodasaraucarias.com.br/teste/reservas/rates.php

 

Até aí tudo certo. Eu adaptei o layout do jeito que eu queria, e o calendário funciona ok. Porém quando eu seleciono as datas de entrada e saída, os preços não são carregados e a animação gif de carregamento fica alí. Já verifiquei os caminhos de todos os arquivos externos que essa página usa, e estão todos no diretório correto (espero). Sou um tanto novo com php, tô mais acostumado com o flash e o as, então desculpem se é uma dúvida muito estúpida. Desde já agradeço a quem puder ajudar...

 

 

 

Posta o código pra que a gente possa estudar o problema.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok. Esse é o código da página, chamada "rates.php":

<!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>
<title>Pousada Recanto das Araucárias</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta name="Keywords" content="pousada,campos do jordão,pousadas,pousadas campos do jordão,pousada em campos do jordão,SP,orçamento online,tarifas,calendário,fériados de São Paulo" />
<meta name="Description" content="Simples. Como a vida deve ser." />
<meta name="abstract" content="Pousada Recanto das Araucárias, Orçamento Online" />
<meta name="Email" content="pousada@recantodasaraucarias.com.br" />
<meta name="Author" content="Hubsystem Informática" />
<meta name="Publisher" content="Hubsystem Informática" />
<meta name="Category" content="campos do jordão,são paulo,tour,turismo,guide,guia,brasil,hotéis,hotel,pousada" />
<meta name="Distribution" content="GLOBAL" />
<meta name="Rating" content="GENERAL" />
<meta http-equiv="Expires" content="0" />
<meta http-equiv="Vary" content="Content-language" />
<meta http-equiv="Content-language" content="portuguese, pt-BR" />
<meta name="language" content="portugese, pt-BR" />
<meta name="robots" content="INDEX,FOLLOW" />
<meta name="revisit-after" content="31 days" />
<meta name="audience" content="all" />
<style type="text/css" media="all">@import "cal.css";</style>
<style type="text/css" media="all">@import "jscal2.css";</style>
<style type="text/css" media="all">@import "border-radius.css";</style>
<style type="text/css" media="all">
@import "gold.css";.style1 {font-family: Arial, Helvetica, sans-serif}
.style2 {color: #FF6600}
body {
	background-color: #EAF3C7;
}
body,td,th {
	color: #333333;
}
</style>
<script type="text/javascript" src="jscal2.js"></script>
<script type="text/javascript" src="pt.js"></script>
<script>
var fromDate, untilDate;
var preimg = new Image();
var xmlHttp;
var SELECTED_RANGE = null;
var resCal = null;

window.addEventListener?window.addEventListener("load",initpage,false):window.attachEvent("onload",initpage);
preimg.src="spinner.gif";

function isDate(y, m, d){
	if(typeof y == "string" && m instanceof RegExp && d){
		if(!m.test(y)) return 1;
		y = RegExp["$" + d.y], m = RegExp["$" + d.m], d = RegExp["$" + d.d];
	}
	d = Math.abs(d) || 0, m = Math.abs(m) || 0, y = Math.abs(y) || 0;
	return arguments.length != 3 ? 1 : d < 1 || d > 31 ? 2 : m < 1 || m > 12 ? 3 : /4|6|9|11/.test(m) && d == 31 ? 4 : m == 2 && (d > ((y = !(y % 4) && (y % 1e2) || !(y % 4e2)) ? 29 : 28)) ? 5 + !!y : 0;
};

function getDates(){
	if (!(isDate(fromDate, /^([0-9]{4})-([0-9]{2})-([0-9]{2})$/, {d: 3, m: 2, y: 1}) && isDate(untilDate, /^([0-9]{4})-([0-9]{2})-([0-9]{2})$/, {d: 3, m: 2, y: 1}))) {
		document.getElementById("valueStd").innerHTML="<img src='spinner.gif'>";
		document.getElementById("valueLx").innerHTML="<img src='spinner.gif'>";
		document.getElementById("valueSlx").innerHTML="<img src='spinner.gif'>";
		document.getElementById("info_msg").innerHTML=" ";
		document.getElementById("fromDate").innerHTML=" ";
		document.getElementById("untilDate").innerHTML=" ";
		GetRates(fromDate + "///" + untilDate);
	}	
}
function GetRates(dateStr){
	var selObj = document.getElementById("persons");
	var	selIndex = selObj.selectedIndex;
	var persons=selObj.options[selIndex].value;
	pageTracker._trackEvent("Rates","GetRates");
	fromDate=dateStr.split('///')[0];
	untilDate=dateStr.split('///')[1];
	var url="getRates.php?fD=" + fromDate + "&uD=" + untilDate + "&p=" + persons + "&s=" + Math.random();
//	alert(url);
	xmlHttp.onreadystatechange=GetRatesStateChanged;
	xmlHttp.open("GET",url,true);
	xmlHttp.send(null);
}
function GetRatesStateChanged(){
	if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete"){
//		alert(xmlHttp.responseText);
		xmlDoc=xmlHttp.responseXML;
		document.getElementById("valueStd").innerHTML=xmlDoc.getElementsByTagName("valueStd")[0].childNodes[0].nodeValue;
		document.getElementById("valueLx").innerHTML=xmlDoc.getElementsByTagName("valueLx")[0].childNodes[0].nodeValue;
		document.getElementById("valueSlx").innerHTML=xmlDoc.getElementsByTagName("valueSlx")[0].childNodes[0].nodeValue;
		document.getElementById("fromDate").innerHTML=xmlDoc.getElementsByTagName("fromDate")[0].childNodes[0].nodeValue;
		document.getElementById("untilDate").innerHTML=xmlDoc.getElementsByTagName("untilDate")[0].childNodes[0].nodeValue;
		document.getElementById("info_msg").innerHTML=xmlDoc.getElementsByTagName("infomsg")[0].childNodes[0].nodeValue;
		if (document.getElementById("valueStd").innerHTML != "R$ -,--" ){
			inf = "<br>Clique <a style='color: #ff0000' href='#' onclick='sendRates()'>aqui</a> para mandar este orçamento ";
			inf += "para o seu email<br><br>ou<br><br>Clique no calendário para selecionar uma nova data de entrada.";
			document.getElementById("divInfo").innerHTML = inf;
		}
//		xmlHttp.close;
	}
}
function sendRates(){
	var email = prompt("Digite seu eMail abaixo","nome@dominio");
	var selObj = document.getElementById("persons");
	var	selIndex = selObj.selectedIndex;
	var persons=selObj.options[selIndex].value;
	pageTracker._trackEvent("Rates","sendRates");
	var url="sendRates.php?fD=" + document.getElementById("fromDate").innerHTML + "&uD=" + document.getElementById("untilDate").innerHTML;
	url += "&p=" + persons + "&s=" + Math.random() + "&std=" + document.getElementById("valueStd").innerHTML + "&lx=" + document.getElementById("valueLx").innerHTML;
	url += "&slx=" + document.getElementById("valueSlx").innerHTML + "&e=" + email;
	xmlHttp.onreadystatechange=sendRatesChanged;
	xmlHttp.open("GET",url,true);
	xmlHttp.send(null);

}
function sendRatesChanged(){
	if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete"){
		xmlDoc=xmlHttp.responseXML;
		document.getElementById("info_msg").innerHTML=xmlDoc.getElementsByTagName("info_msg")[0].childNodes[0].nodeValue;
		alert(xmlDoc.getElementsByTagName("info_msg")[0].childNodes[0].nodeValue);
//		xmlHttp.close;
	}
}
function initXMLRPC(){
	xmlHttp = false;
	try {
		xmlHttp=new XMLHttpRequest();
	}
	catch (e){
		try {
			xmlHttp=new ActiveXObject("Msxml2.XMLHTTP.6.0");
		}
		catch (e){
			try {
				xmlHttp=new ActiveXObject("Msxml2.XMLHTTP.5.0");
			}
			catch (e){
				try {
					xmlHttp=new ActiveXObject("Msxml2.XMLHTTP.4.0");
				}
				catch (e) {
					alert("Your browser does not support AJAX!");
					return false;
				}
			}
		}
	}
}
function getDateInfo(date, wantsClassName) {
	var as_number = Calendar.dateToInt(date);
if (as_number >= 20090904 && as_number <= 20090907)
	return {
		klass   : 'highlight2',
		tooltip : "<div style='color: #000000; text-align: center'>Independencia</div>"
	};
if (as_number >= 20091009 && as_number <= 20091012)
	return {
		klass   : 'highlight2',
		tooltip : "<div style='color: #000000; text-align: center'>Nossa Sra. Aparecida</div>"
	};
if (as_number >= 20091030 && as_number <= 20091102)
	return {
		klass   : 'highlight2',
		tooltip : "<div style='color: #000000; text-align: center'>Finados</div>"
	};
if (as_number >= 20091119 && as_number <= 20091122)
	return {
		klass   : 'highlight2',
		tooltip : "<div style='color: #000000; text-align: center'>Consciencia Negra</div>"
	};
if (as_number >= 20091226 && as_number <= 20100101)
	return {
		klass   : 'highlight2',
		tooltip : "<div style='color: #000000; text-align: center'>Reveillon</div>"
	};
if (as_number >= 20100212 && as_number <= 20100217)
	return {
		klass   : 'highlight2',
		tooltip : "<div style='color: #000000; text-align: center'>Carnaval</div>"
	};
if (as_number >= 20100401 && as_number <= 20100404)
	return {
		klass   : 'highlight2',
		tooltip : "<div style='color: #000000; text-align: center'>Pascoa</div>"
	};
if (as_number >= 20100416 && as_number <= 20100421)
	return {
		klass   : 'highlight2',
		tooltip : "<div style='color: #000000; text-align: center'>Tiradentes</div>"
	};
						
}
function getSelectionHandler() {
var startDate = null;
	var ignoreEvent = false;
	return function(cal) {
		var selectionObject = cal.selection;
		if (ignoreEvent) return;
		var selectedDate = selectionObject.get();
		if (startDate == null) {
			startDate = selectedDate;
			SELECTED_RANGE = null;
			document.getElementById("valueStd").innerHTML="R$ -,--";
			document.getElementById("valueLx").innerHTML="R$ -,--";
			document.getElementById("valueSlx").innerHTML="R$ -,--";
			document.getElementById("info_msg").innerHTML=" ";
			document.getElementById("fromDate").innerHTML=Calendar.printDate(Calendar.intToDate(startDate),"%Y-%m-%d");
			document.getElementById("untilDate").innerHTML=" ";
			document.getElementById("divInfo").innerHTML = "<br>Clique para selecionar<br>a data de saída";
			cal.args.min = Calendar.intToDate(selectedDate);
			cal.refresh();
		} else {
			ignoreEvent = true;
			selectionObject.selectRange(startDate, selectedDate);
			ignoreEvent = false;
			SELECTED_RANGE = selectionObject.sel[0];
			document.getElementById("valueStd").innerHTML="<img src='spinner.gif'>";
			document.getElementById("valueLx").innerHTML="<img src='spinner.gif'>";
			document.getElementById("valueSlx").innerHTML="<img src='spinner.gif'>";
			document.getElementById("info_msg").innerHTML=" ";
			document.getElementById("fromDate").innerHTML=Calendar.printDate(Calendar.intToDate(startDate),"%Y-%m-%d");
			document.getElementById("untilDate").innerHTML=Calendar.printDate(Calendar.intToDate(selectedDate),"%Y-%m-%d");
			document.getElementById("divInfo").innerHTML="<br>Clique no calendário para selecionar<br>uma nova data de entrada.";
			startDate = null;
			min_date = new Date();
			cal.args.min = min_date;
			cal.refresh();
			GetRates(selectionObject.print("%Y-%m-%d","///").join("\n"));
		}
	};
}
function initCal(){
	resCal=Calendar.setup({
		cont          : "calendar-container",
	//		animation     : false,
		fdow          : 1,
		selectionType : Calendar.SEL_SINGLE,
		selection     : Calendar.dateToInt(new Date()),
		onSelect      : getSelectionHandler(),
		bottomBar     : false,
		min           : Calendar.dateToInt(new Date()),
		max           : 20100430,
		dateInfo      : getDateInfo,
		titleFormat   : "%b %Y"
	});
}
function initpage(){
	initXMLRPC();
	initCal();
}
</script>
</head>
<body style="overflow: hidden; padding: 0px; margin: 0px">
<div style="width: 400px; height:480px">
<div align="center" class="NormTxt10C style1" id="divInfo" style="float: left; background: url(bg.png) no-repeat #ccc; -moz-border-radius: 7px; -webkit-border-radius: 7px; border: 1px solid #808080; padding: 10px; color:#000000; width:177px; height: 154px">
		<div align="left" class="style2"><br />
		Clique no calendário<br />
		para selecionar<br />
		a data de entrada	</div>
</div>
  <div id="calendar-container" style="float: left">
	</div>
	<div style="float: left; background: url(bg.png) no-repeat #ccc; -moz-border-radius: 7px; -webkit-border-radius: 7px; border: 1px solid #808080; padding: 0px; width: 378px; height:220px; padding: 10px" align="center">
		<table border='0px'>
			<colgroup>
				<col width="50%" />
				<col width="50%" />
			</colgroup>
			<tr>
				<td class="NormTxt10C" colspan="2" style="padding-bottom:10px">
					<div>
						Pessoas/Apto:
						<select id="persons" onchange="getDates()" class="NormTxt10">
							<option value='2'>1</option>
							<option value='2' selected="selected">2</option>
							<option value='3'>3</option>
							<option value='4'>4</option>
							<option value='5'>5</option>
						</select>
					</div>
				</td>
			</tr>
			<tr>
				<td colspan="2">
					<hr style="width: 70%; size: 1px" />
				</td>
			</tr>
			<tr>
				<td>
					<div id="fromDate" class="NormTxt10">
						 
					</div>
				</td>
				<td>
					<div id="untilDate" class="NormTxt10R">
						 
					</div>
				</td>
			</tr>
			<tr height="20px">
				<td class="NormTxt10">
					Apto. Std:
				</td>
				<td>
					<div id="valueStd" class="NormTxt10R">
						R$ -,--
					</div>
				</td>
			</tr>
			<tr height="20px">
				<td class="NormTxt10">
					Apto. Luxo:
				</td>
				<td>
					<div id="valueLx" class="NormTxt10R">
						R$ -,--
					</div>
				</td>
			</tr>
			<tr height="20px">
				<td class="NormTxt10">
					Apto. S.Luxo:
				</td>
				<td>
					<div id="valueSlx" class="NormTxt10R">
						R$ -,--
					</div>
				</td>
			</tr>
			<tr>
				<td colspan="2">
					<div id="info_msg" class="NormTxt10C">
						 
					</div>
				</td>
			</tr>
		</table>
	</div>
</div>
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
try {
	var pageTracker = _gat._getTracker("UA-8779153-1");
	pageTracker._trackPageview();
} catch(err) {}
</script>
</body>
</html>

Também há o arquivo "getRates.php", que é isso:

<?
xml version="1.0" encoding="ISO-8859-1"
?>
<rates>
<valueStd>R$ -,--</valueStd>
<valueLx>R$ -,--</valueLx>
<valueSlx>R$ -,--</valueSlx>
<fromDate>1969-12-30</fromDate>
<untilDate></untilDate>
<noDays>0</noDays>
<infomsg>Favor ligar para a nossa<br>Central de Reservas<br>no telefone (12) 3662-7073.</infomsg>
</rates>

...o arquivo "sendRates.php":

 

<response><info_msg>Erro no email</info_msg></response>

E o outro arquivo chama-se "jscal2.js" que é responsável pelo calendário, creio eu. Ele é bem extenso, se acharem que é preciso eu o coloco. Além desse tem outros arquivos de css.

Acho que o problema pode ser no php, por ter sido apenas copiado do código fonte e adaptado. Mas como não entendo de php, aí não sei...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim. Não tente copiar fontes php dessa forma. você não vai conseguir.

O arquivo:

sendRates.php deve fazer algum processamento interno com o banco de dados. Por isso que o teu não funciona, já que é impossível copíar código fonte php, sem ter acesso ao ftp.

 

Desenvola a tua aplicação, ficará bem mais fácil do que tentar copiar uma já existente. Além de você saber oque está acontecendo.

Sabe trabalhar com banco de dados ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Certo... Obrigado por me tirar essa dúvida.

 

Estou me empenhando pra desenvolver corretamente a aplicação, e estou na primeira casa, ou seja, lendo e estudando o php (além de ter apanhado com o Apache hoje...).

Não, não tenho experiência nenhuma com banco de dados (apenas uma idéia de como funciona...)

 

Então, você disse que o arquivo "sendRates.php" deve interagir com o banco de dados... Você tem alguma idéia de que tipo de informação ele poderia conter? Os valores das reservas em "R$" que aparecem na calculadora, por exemplo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.