problemi calcolo prezzo

pinoshine

Utente Attivo
15 Set 2012
95
0
0
Ciao a tutti, sto cercando di modificare uno script che mi calcola il prezzo di un hotel in base alla ricerca effettuata tra differenti date, lo script funziona bene solo che mi restituisce il totale del prezzo solo sull'ultimo prezzo inserito vi faccio un'esempio: ho la tabella prezzi con id,id_hotel, from, to, room_type, price, ho queste date: dal 10-05-13 al 12-05-13 il prezzo 100 poi dal 12-0513 al 14-05-13 il prezzo 50, se effettuo una ricerca dal dal 11 al 13 maggio invece di calcolare 150 mi calcola 100 praticamente ricava solo il valore dell'ultimo prezzo:
questo e' il codice:
PHP:
<?php
	session_start();
	if(!isset($_GET['hid'])){
		header("Location:index.php");
	}
	if(!isset($_SESSION['to'])||!isset($_SESSION['from'])){
		header("Location:index.php");
	}
	if($_SESSION['to']<=$_SESSION['from']){
		header("Location:index.php");
	}
	include "includes/configuration.php";
	$con=mysql_connect($location,$username,$password);
	mysql_select_db($database_name);
	mysql_set_charset('utf8',$con);
	include "includes/database_add.php";
	include "includes/language.php";
	//Set language
	if(isset($_GET['lang'])){
		$_SESSION['lang']=$_GET['lang'];
		$lang=$_SESSION['lang'];
	}else if(isset($_SESSION['lang'])){
		$lang=$_SESSION['lang'];
	}else{
		$lang="English";
	}
	//end of set language
	$query="DELETE * FROM book WHERE expires<'".date("Y-m-d H:i:s")."'";
	mysql_query($query);
?>
<?php
	$query="SELECT * FROM roomtypes WHERE hotel_id=".$_GET['hid'];
	$roomsresult=mysql_query($query);
	$roomsnum=mysql_num_rows($roomsresult)-1;
	$query="SELECT * FROM hotel JOIN countries ON hotel.country_id=countries.id JOIN cities ON hotel.city_id=cities.id WHERE hotel_id='".$_GET['hid']."'";
	$result=mysql_query($query);
	$info=mysql_fetch_array($result);
?>
var roomnum=<?php echo $roomsnum;?>;
</script>

</head>

<body>
<div id="maincontent">
	<h1><?php echo $info['name'];?></h1>
	<div id="address">
		<?php echo $info['hotel_address'].",".$info['city'].",".$info['country'];?>
	</div>
	<div id="fields">
		<div id="roomsfields">
		<table width="100%">
			<tr style="font-weight:bold"><td><?php echo get_word($lang,"Room Type")."</td><td>".get_word($lang,"Available Rooms")."</td><td>".get_word($lang,"Price")."</td><td>".get_word($lang,"No of Rooms")."</td>";
			$i=0;
			$roomsbooked=array();
			$ratestable=array();
			$query="SELECT * FROM roomtypes WHERE hotel_id='".$_GET['hid']."'";
			$result=mysql_query($query);
			while($row=mysql_fetch_array($result)){
				$roomsbooked[$row['room_type']]=0;
				for($i=0;$i<8;$i++)
					$ratestable[$row['room_type']][$i]=0;
			}
			 $from = $_GET['from'];
			  $to = $_GET['to'];
           $hotel_id = $_GET['hid'];

$query = "SELECT id_hotel, room_type, price, (DATEDIFF($to, $from)  * price) as total FROM rooms";
		   
			$result=mysql_query($query);
			while($row=mysql_fetch_array($result)){
				$ratestable[$row['room_type']][0]=$row['price'];
				
			}
			$from=array();
			$tok=strtok($_SESSION['from'],"-");
			while($tok){
				$from[]=$tok;
				$tok=strtok("-");
			}
			$to=array();
			$tok=strtok($_SESSION['to'],"-");
			while($tok){
				$to[]=$tok;
				$tok=strtok("-");
			}
			$query="SELECT * FROM book WHERE hotel_id='".$_GET['hid']."' AND 
			((check_in<='".$from[2]."-".$from[1]."-".$from[0]."' AND check_out>='".$from[2]."-".$from[1]."-".$from[0]."') OR
			(check_in>='".$from[2]."-".$from[1]."-".$from[0]."' AND check_out<='".$to[2]."-".$to[1]."-".$to[0]."') OR
			(check_in<='".$from[2]."-".$from[1]."-".$from[0]."' AND check_out>='".$to[2]."-".$to[1]."-".$to[0]."') OR
			(check_in<'".$to[2]."-".$to[1]."-".$to[0]."' AND check_out>='".$to[2]."-".$to[1]."-".$to[0]."'))";
			$result=mysql_query($query);
			while($row=mysql_fetch_array($result)){
					$roomsbooked[$row['room_type']]++;
			}
			while(($row=mysql_fetch_array($roomsresult))!=NULL){
				$roomsleft=$row['rooms_number']-$roomsbooked[$row['room_type']];
				echo "<tr><td>".$row['room_type']."</td><td>".$roomsleft."</td>";
				
				$price=0;
				$_SESSION['totaldays']=0;
				$date=strtotime($from[2]."-".$from[1]."-".$from[0]);
				while($date<strtotime($to[2]."-".$to[1]."-".$to[0])){
					$_SESSION['totaldays']++;
					$dayofweek=date("N",$date);
					if($ratestable[$row['room_type']][$dayofweek]!=0)
						$price+=$ratestable[$row['room_type']][$dayofweek];
					else
						$price+=$ratestable[$row['room_type']][0];
					$date+=86400;
				}
				echo "<td><div id=\"price".$row['room_type']."\">".$price."</td></div>";
				?>
				<form name="roomsform" id="roomsform" method="POST" action="bookroom.php?roomtype=<?php echo $row['room_type']."&hid=".$_GET['hid']; ?>">
				<?php
				if($roomsleft<=0)
					$disabled="disabled";
				else
					$disabled="";
				echo "<td><select name=\"numberofrooms".$row['room_type']."\"  style=\"width:40px\" ".$disabled." id=\"numberofrooms".$row['room_type']."\" onchange=\"getPrice(this.value,".$price.",'".$row['room_type']."');\">";
				$_SESSION['price'.$row['room_type']]=$price;
				for($i=1;$i<=$roomsleft;$i++){
					echo "<option value=\"".$i."\">".$i."</option>";
				}
				echo "</select></td>";
				
				echo "<td><input type=\"submit\" ".$disabled." name=\"submit".$row['room_type']."\" id=\"submit".$row['room_type']."\" value=\"".get_word($lang,"Book!")."\"></td>";
				echo "</tr>";
				echo "</form>";
			}
			?>
				
		</table>
		</table>
		</div>
	</div>
	<div style="clear:both"></div>
</div>
<?php
	mysql_close($con);
?>
Non riesco prorpio a capire dove e' lo sbaglio
Grazie
 

pinoshine

Utente Attivo
15 Set 2012
95
0
0
ho cambiato la query in questo modo:
PHP:
$query = "SELECT room_type, 
                 SUM(price) total
            FROM rooms
           WHERE from >= '$from' 
             AND to <= '$to'
             AND id_hotel = $hotel_id
           GROUP BY room_type";

ma purtroppo non funziona mi da questo errore: Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in \gethotel.php on line 162 la linea e' questa:
PHP:
while($row=mysql_fetch_array($result)){
proprio non riesco ad uscirne!!
 

pinoshine

Utente Attivo
15 Set 2012
95
0
0
Grazie per la risposta, ma non vuole funzionare mi da come risultato 0 e non mi moltiplica i prezzo per i giorni!! se scrivo questa query funziona ma mi calcola il prezzo in base alla quantità di giorni e non in base alla data sceta come vorrei fare io
PHP:
$query="SELECT * FROM rates WHERE hotel_id='".$_GET['hid']."'";
non riesco prorpio a capire forse è qui' il problema?
PHP:
$result=mysql_query($query);
			while($row=mysql_fetch_array($result)){
				$ratestable[$row['room_type']][0]=$row['default_price'];

Grazie

EDIT: Forse devo recuperare i valori 'from' e 'to' con un 'session' ?
 
Ultima modifica:

pinoshine

Utente Attivo
15 Set 2012
95
0
0
Mi sono accorto che ho fatto un errore ed Ho corretto
PHP:
$result=mysql_query($query);
            while($row=mysql_fetch_array($result)){
                $ratestable[$row['room_type']][0]=$row['price'];
ma la query continua a nn funzionare, non mi recupera i giorni dal from e to, ce' un modo per recuperarli?
Grazie
 

pinoshine

Utente Attivo
15 Set 2012
95
0
0
Sto impazzendo con questa query che non vuole proprio funzionare!! ho aggiunto all'apertura della pagina sotto
PHP:
session_start();
questo
PHP:
$_SESSION['from']=$_GET['from'];
	$from=$_SESSION['from'];
	$_SESSION['to']=$_GET['to'];
	$to=$_SESSION['to'];
ed ho cambiata la quesry cosi':
PHP:
$query = "SELECT hotel_id, room_type, default_price, ((DATEDIFF($to, $from) + 1) * default_price) as total FROM rates WHERE $from >='to' AND $to <= 'from'";
e mi da come risultato sempre 0 :mad: se tolgo questo:
PHP:
WHERE $from >='to' AND $to <= 'from'
mi da come risultato solo l'ultimo prezzo inserito invece di calcolarlo in base alla data richiesta
ragazzi un piccolo aiuto vi prego!!! :(
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Ciao, prova a mettere le date tra apici
PHP:
DATEDIFF('$to', '$from')
senza la funzione restituisce NULL
puoi testarla su phpmyadmin in questo modo
cosi non va
Codice:
select DATEDIFF(2013-05-30, 2013-05-28)
cosi si
Codice:
select DATEDIFF('2013-05-30', '2013-05-28')
 

pinoshine

Utente Attivo
15 Set 2012
95
0
0
grazie per la risposta, ma continua a non andare, ho cambito come mi hai consigliato ma continua a trovare il risultato sbagliato ignorando la query ma che casino!!
nella barra dell'indirizzo mi da questo risultato
Codice:
www.miosito.com/gethotel.php?hid=1&from=30-05-2013&to=31-05-2013
mi sono accorto solo adesso che la formattazione della data e' sbagliata ho controllato il file java ma sta scritta benecioe' yyyy-mm-dd tu che dici?
 
Ultima modifica:

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
stampa la query per vedere come esce
PHP:
echo $query;
 

pinoshine

Utente Attivo
15 Set 2012
95
0
0
stampa la query per vedere come esce
PHP:
echo $query;

Ciao, scusa il ritardo ma stavo senza internet :p la query ma stampa questo:
Codice:
SELECT hotel_id, room_type, default_price, ((DATEDIFF(01-06-2013, 03-06-2013) + 1) * default_price) as total FROM rooms
praticamente mi da come risultato la query che ho scritto, pero' invece del $from, $to mi da le date che ho scelto nel form di ricerca, qualche idea?
Grazie
 
Ultima modifica:

pinoshine

Utente Attivo
15 Set 2012
95
0
0
Ho cambiato nuavamente la quesry:
PHP:
$query = "SELECT 
    hotel_id, room_type, SUM(total) as total_sum 
FROM 
(
    SELECT 
        hotel_id, 
        room_type,
        default_price, 
        (DATEDIFF('$from', '$to') * default_price) as total 
    FROM 
        rates
) as t 
GROUP BY 
    hotel_id, room_type";
la quesry non da errori pero' ho riscontrato uno su questo codice
PHP:
$ratestable[$row['room_type']] =$row['default_price'];
Praticamente non mi vuole stampare il prezzo calcolato nella quesry come lo posso recuperarlo?
Grazie

Edit: ho cambiato cosi' per stampare il risultato :
PHP:
$ratestable[$row['room_type']] = $result['total'];
non mi da errori ma nn mi stampa niente!!! mammamia che casino !!!
 
Ultima modifica:

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
riprendendo l'echo della query
SELECT hotel_id, room_type, default_price, ((DATEDIFF(01-06-2013, 03-06-2013) + 1) * default_price) as total FROM rooms
il primo errore è che non hai messo gli apici, cos che in teoria hai risolto con la query sucessiva

il secondo errore è nel formato delle date, mysql vuole una formattazione ben precisa : aaaa-mm-gg
 

pinoshine

Utente Attivo
15 Set 2012
95
0
0
L'avevo pensato gia' un po' di tempo fa la formattazione delle date poi me ne ero del tutto dimenticato, adesso aggiusto il calendario java per la formattazione e provo nuovamente la quesry, cmq la query sta scritta bene?
Grazie per l'aiuto!!!
 

pinoshine

Utente Attivo
15 Set 2012
95
0
0
Grazie per l'aiuto, adesso la quesry funziona in parte ti spiego: la quesry e' questa:
PHP:
$query = "SELECT hotel_id, room_type, default_price, ((DATEDIFF('$to', '$from') + 1 ) *  default_price) as total FROM rates ";
mi trova il risultato pero' e tutto sballato ti faccio un esempio, ho 2 date una va dal 01 al 03 giugno e il prezzo è 50,00 la seconda data val dal 03 al 06 giungo ed il prezzo è 100,00 se faccio una ricerca dal 02 al 04 mi esce questo come risultato della quesry che stampo a video per vedere se funziona questo:
Codice:
SELECT hotel_id, room_type, default_price, ((DATEDIFF('2013-06-04', '2013-06-02') + 1 ) * default_price) as total FROM rates 150
ed e' corretto perche ho un giorno con 50 e l'altro con 100 pero' come risultato che mi da dopo il ciclo while che e lo stampo con :
PHP:
$ratestable[$row['room_type']][0]=$record['total'];
è 300 mi fa 150 della query moltiplicato x 2 che casino!!
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
scusate se intervengo e se, non avendo seguito tutto il 3d, posso dire delle ca...te
prima una piccola osservazione, tu dici:
...ho 2 date una va dal 01 al 03 giugno e il prezzo è 50,00 la seconda data val dal 03 al 06 giungo ed il prezzo è 100,00...
non so se è un errore di scrittura, ma il 03 giugno la stanza costa 50 o 100?

detto questo dici che se fai la query tra il 02 e lo 03 il prezzo deve essere 50+100=150 ma dopo il while trovi 300 cioè 150*2 o 150+150.
prova a fare una prova su tre gg es da 02 al 04, in questo caso il prezzo dovvrebbe essere 50+100+100=250, se ti risulta dopo il while 250+3=250+250+250=750
vuol dire che dentro il while ti somma tale prezzo ad ogni ciclo, mettendo dei var_dump o degli echo dentro il while cerca di individuare dove ti capita tale somma iterata
 

pinoshine

Utente Attivo
15 Set 2012
95
0
0
Ciao e grazie per l'intervento, purtroppo rispondo tardi per lavoro di notte e di giorno purtroppo dormo!! :cool: cmq mi ero espresso male dal 01 al 03 (il 03 e'compreso) il prezzo è di 50,00 e dal 04 al 07 (07 e' compreso) il prezzo e di 100 facendo la quesry come mi hai consigliato il prezzo dovrebbe essere 02 e 03 di 50,00 e per il 04 100 quindi riassumendo 50+50+100= 200 la query mi riporta questo:
Codice:
SELECT hotel_id, room_type, default_price, ((DATEDIFF('2013-06-05', '2013-06-02') + 1 ) * default_price) as total FROM rates 200
la query come si vede e' corretta, invece nel ciclo while mi da 600 io non riesco a capire se me li moltiplica oppure me li addiziona e troppo strano!!! ma come posso fare per stampare il ciclo While?
Grazie

Edit: vi allego una foto: foto.gif
 
Ultima modifica:

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
secondo me, a lume di naso, il problema potrebbe stare qui
fai la query
SELECT hotel_id, room_type, default_price, ((DATEDIFF('2013-06-05', '2013-06-02') + 1 ) * default_price) as total FROM rates
dove estrai il prezzo della giornata moltiplicato per il numero dei gg
poi, almeno così mi sembra, nel while rifai la somma
$price+=$ratestable[$row['room_type']][$dayofweek]; (o l'altro dopo nell'else)

cioè comunque il qualche punto dello script stai facendo un errore di "logica" e spesso gli errori di logica sono molto più difficile da individuare di quelli di sintassi.
 

pinoshine

Utente Attivo
15 Set 2012
95
0
0
Cosa difficile allora da individuare!! quindi nn e' un problema di query, almeno cosi' posso gia' escludera!! grazie
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Borgo ha ragione
però bisogna cambiare la query, prova questa
PHP:
$query = "SELECT hotel_id, room_type, SUM(default_price) as total 
                 FROM rates WHERE date BETWEEN '$from' AND '$to'";
 
Ultima modifica:

pinoshine

Utente Attivo
15 Set 2012
95
0
0
Grazie ma non funziona mi riporta questo errore:
Codice:
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in gethotel.php on line 153
che la linea 153 e' questa:
PHP:
while($row=mysql_fetch_array($result)){
la vedo molto dura!!!
 
Discussioni simili
Autore Titolo Forum Risposte Data
P Problemi di calcolo tra due date PHP 37
N php problemi a visualizzare video PHP 3
T problemi con dati menu a tendina HTML e CSS 2
T problemi di connessione MySQL 2
M Upload immagine con javascript problemi con FormData() Javascript 1
F Problemi visualizzazione mappa Android studio Sviluppo app per Android 0
S Problemi Javascript + Aruba Javascript 2
A Problemi con move_uploaded_file PHP 7
M Problemi con la stampa dei valori in php PHP 1
L Problemi con il login PHP 2
L Problemi form Pagina php HTML e CSS 3
R Tutto su utf-8 ma ancora problemi con i caratteri speciali in mysql MySQL 1
Z problemi con foreach insert into PHP 10
B javascript per problemi con pdf e Safari Javascript 0
N Problemi kit videosorveglianza IP Cam e Videosorveglianza 0
M Problemi con creazione maschere Presentati al Forum 1
M Problemi con query a più tabelle PHP 3
R Problemi anomalo insermento in db PHP 9
S Problemi delle funzioni eliminate con PHP e MySQL PHP 4
S Problemi di un principiante PHP 3
M Problemi con blog Grav CMS (Content Management System) 0
F Problemi di visualizzazione di un sito su più browser WordPress 0
S Problemi di visualizzazione form contatti sito web HTML e CSS 2
S incoerenza di stampa. problemi con il magenta Photoshop 3
A problemi con paypall Java 1
A Problemi di accesso da remoto a Ipcam IP Cam e Videosorveglianza 5
michele81 [WordPress] problemi plug meteo api key WordPress 4
E Problemi in registrazione telecamere Dahua IP Cam e Videosorveglianza 6
S Problemi con modulo upload video php (help!) PHP 0
felino [Windows 8.1] Problemi con connessione WiFi Windows e Software 0
M [PHP] Problemi su inserimento array nel db PHP 7
E [PHP] problemi nuova riga con fwrite su piattaforma android PHP 5
M [PHP] Problemi di salvataggio su campo calcolato PHP 0
O [HTML] problemi con la regola "background-attachment: fixed" in EDGE HTML e CSS 0
M [PHP] Problemi con query unione PHP 11
M [PHP] Problemi con select PHP 6
Spown [WordPress] Problemi visualizzazione su più browser + voci menu in movimento WordPress 1
ANDREA20 [HTML] problemi con il footer HTML e CSS 1
D [MS Access] problemi con inserimento campo in una maschera MS Access 6
M [PHP] Problemi con il riconoscimento login. PHP 21
A [WordPress] problemi con xampp WordPress 2
M Problemi con database Apache/2.4.37 (Win32) OpenSSL/1.1.1a PHP/7.3.1 PHP 6
P Problemi comunicazioni Comunicazioni dallo Staff 8
G I problemi non vengono solo per nuocere Presentati al Forum 0
A Problemi Wi-Fi Fastweb Reti LAN e Wireless 4
C [WordPress] Url vulnerability e problemi sito da mobile WordPress 0
S [PHP] problemi con le sessioni PHP 3
B Problemi accesso Instagram Smartphone e tablet 1
T [PHP] problemi con il browser PHP 0
M [Flash] Problemi conversione formato swf Flash 20

Discussioni simili