• Home
  • Forum
  • Fare Web
  • PHP

php / mysql calcolo prezzo base preventivo per hotel

  • Creatore Discussione Creatore Discussione marco4001
  • Data di inizio Data di inizio 16 Mag 2014
Prec.
  • 1
  • 2
Primo Prec. 2 di 2
M

marco4001

Utente Attivo
28 Mar 2008
30
0
0
  • 23 Mag 2014
  • #21
no gli ho eseguiti direttamente su aruba, non vorrei sbagliarmi ma riadattando lo script di connessione si dovrebbe risolvere tutto
 

marino51

Utente Attivo
28 Feb 2013
3.205
207
63
Lombardia
  • 23 Mag 2014
  • #22
scusami, prima di buttare al macero tutta quella parte, prova a sostituire la riga
PHP:
    try { $this->db = new PDO($dbPDO.":Server=".$dbHOST.";Database=".$dbNAME, $dbUSER, $dbPASS); }
con questa,
PHP:
    try { $this->db = new PDO($dbPDO.":unix_socket=/var/run/mysql/mysql.sock;dbname=".$dbNAME, $dbUSER, $dbPASS,
                              array(PDO::ATTR_PERSISTENT => true)); }

se poi continua a non collegarsi, puoi usare una connessione che già utilizzi, cambiando solo

PHP:
require 'Config_DB.php';  // sostituisci con la connessione che già usi

$data = $db->Query_select($sql); // esegui la query composta, e ne ricavi i 2 risultati
$dbresult = count($data);
if ($dbresult) {
  $TotalDays = $data[0][0];
  $TotalCost = $data[0][1];
ciao
Marino
 
Ultima modifica: 23 Mag 2014

marino51

Utente Attivo
28 Feb 2013
3.205
207
63
Lombardia
  • 23 Mag 2014
  • #23
prima di fare le operazioni del post precedente,

prova a cambiare
PHP:
try { $this->db = new PDO($dbPDO.":Server=".$dbHOST.";Database=".$dbNAME, $dbUSER, $dbPASS); }
con
PHP:
try { $this->db = new PDO($dbPDO.":Server=".$dbHOST.";dbname=".$dbNAME, $dbUSER, $dbPASS); }
 
M

marco4001

Utente Attivo
28 Mar 2008
30
0
0
  • 24 Mag 2014
  • #24
Ho modificato lo script di connessione, ma niente da fare (lo so sono un disastro)
Riesci a correggerlo?

Questo e' l'errore
Codice:
Fatal error: Class 'Database' not found in /web/htdocs/MIOSITO.IT/home/test/connetti.php on line 96


Questo e' il codice:

Codice:
$dbhost = 'IP';
$dbusername = 'USERNAME';
$dbpasswd = 'PASSWORD';
$database_name = 'NOME_DATABASE';
$table = 'roomprices';

$connection = mysql_pconnect("$dbhost","$dbusername","$dbpasswd")
	or die ("Couldn't connect to server.");

$db = mysql_select_db("$database_name", $connection) 	or die("Couldn't select database.");


    //esegue una qualunque query, ritorna il risultato conforme alla query stessa
      function Query_exec($sql){
        $this->MyLog("SQL : $sql");
        try { return $this->db->exec($sql); }
        catch(PDOException $e){ $this->handle_sql_errors($sql, $e); }
      } 

    //select, per estrarre tutti i dati della tabella, ritorna array dei dati con FETCH_NUM
      function Query_select($sql){
        $this->MyLog("SQL : $sql");
        try { $sth = $this->db->prepare($sql); $sth->execute(); return $sth->fetchall(PDO::FETCH_NUM); }
        catch(PDOException $e){ $this->handle_sql_errors($sql, $e); }
      } 

    //select, per estrarre tutti i dati della tabella, ritorna array dei dati con FETCH_BOTH
      function Query_select_b($sql){
        $this->MyLog("SQL : $sql");
        try { $sth = $this->db->prepare($sql); $sth->execute(); return $sth->fetchall(PDO::FETCH_BOTH); }
        catch(PDOException $e){ $this->handle_sql_errors($sql, $e); }
      } 

    //prepare -> bind -> execute, query con parametri 
      function Query_bind($sql,
        $par1 ='', $par2 ='', $par3 ='', $par4 ='', $par5 ='', $par6 ='', $par7 ='', $par8 ='', $par9 ='', $par10='',
        $par11='', $par12='', $par13='', $par14='', $par15='', $par16='', $par17='', $par18='', $par19='', $par20=''){

        $this->MyLog("SQL : ".$sql);
        $x = substr_count($sql, "?");
        if ($x > 20) $this->MyErr("ERRORE : la query contiene più di 20 parametri, gestiti fino a 20");
        try {
          $sth = $this->db->prepare($sql); 
          if($x > 0)  { $sth->bindParam(1,  $par1); 
          if($x > 1)  { $sth->bindParam(2,  $par2); 
          if($x > 2)  { $sth->bindParam(3,  $par3); 
          if($x > 3)  { $sth->bindParam(4,  $par4); 
          if($x > 4)  { $sth->bindParam(5,  $par5); 
          if($x > 5)  { $sth->bindParam(6,  $par6); 
          if($x > 6)  { $sth->bindParam(7,  $par7); 
          if($x > 7)  { $sth->bindParam(8,  $par8); 
          if($x > 8)  { $sth->bindParam(9,  $par9); 
          if($x > 9)  { $sth->bindParam(10, $par10); 
          if($x > 10) { $sth->bindParam(11, $par11); 
          if($x > 11) { $sth->bindParam(12, $par12); 
          if($x > 12) { $sth->bindParam(13, $par13); 
          if($x > 13) { $sth->bindParam(14, $par14); 
          if($x > 14) { $sth->bindParam(15, $par15); 
          if($x > 15) { $sth->bindParam(16, $par16); 
          if($x > 16) { $sth->bindParam(17, $par17); 
          if($x > 17) { $sth->bindParam(18, $par18); 
          if($x > 18) { $sth->bindParam(19, $par19); 
          if($x > 19) { $sth->bindParam(20, $par20); } } } } } } } } } } } } } } } } } } } } 
          return $sth->execute(); }
        catch(PDOException $e){ $this->handle_sql_errors($sql, $e); }
      } 

      function close(){ 
        unset($this->db); 
      }

    //scrive un testo nel log di PHP
      function MyLog($text) {
        error_log($text, 0);        // commentare questa riga se in produzione, no log !
      }

    //scrive un errore nel log di PHP e interrompe l'esecuzione
      function MyErr($text) {
        error_log($text, 0);
        print "ERRORE INATTESO, contatta l'amministratore del sistema";
        die;
      }

    //gestisce gli errori delle query. vedi setAttribute più sopra
      function handle_sql_errors($sql, $e){
        error_log("SQL cmd    : $sql", 0);
        error_log("error code : ". $e->getCode(), 0);
        error_log("error info : ". $e->getMessage(), 0);
        print "ERRORE INATTESO, contatta l'amministratore del sistema";
        die;
    } 

    if (isset($_REQUEST['_SESSION'])) die("Get lost Muppet!");

    $db=new Database();
 

marino51

Utente Attivo
28 Feb 2013
3.205
207
63
Lombardia
  • 25 Mag 2014
  • #25
ciao,
la forma con cui si scrive la chiamata PDO è diversa tra MS-SQL e mysql, non lo è la sostanza, ma la forma è essenziale, mi sono letto
https://www.mrw.it/php/guida-utilizzo-pdo_7594.html
e ti chiedo cortesemente di provare lo script seguente, inserendo i dati necessari al collegamento postando il risultato
grazie
Marino
PHP:
<?php

# http://localhost/test_site/php/test/mysqlPDO.php

error_reporting(E_ALL);

class database {

  private $db; 
  public $OPtransaction = false;

  function __construct(
    $dbPDO  = 'mysql', 
    $dbHOST = '',
    $dbUSER = '',
    $dbPASS = '',
    $dbNAME = ''){ 

    try { $this->db = new PDO($dbPDO.":host=".$dbHOST.";dbname=".$dbNAME, $dbUSER, $dbPASS); }
    catch (PDOException $e) { $this->handle_sql_errors("PDO : OPEN DB", $e); }
    $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  } 

  function __destruct() { 
    $this->close(); 
  } 

  function close(){ 
    unset($this->db); 
  }

  function handle_sql_errors($sql, $e){
    if (PDO::inTransaction()) $this->db->rollBack(); 

    var_dump($sql);
    var_dump($e->getCode());
    var_dump($e->getMessage());
    print "ERRORE INATTESO, contatta l'amministratore del sistema";
    die;
} }  

if (isset($_REQUEST['_SESSION'])) die("Get lost Muppet!");

$db=new database();

print "connesso !";
?>
 
Ultima modifica: 25 Mag 2014
M

marco4001

Utente Attivo
28 Mar 2008
30
0
0
  • 26 Mag 2014
  • #26
Il database ora si connette da cmq errore:

Codice:
 connesso ! Fatal error: Call to undefined method database::Query_select() in /web/htdocs/www.miosito/home/dati/dati.php on line 23

Ti posto il codice (che e' quello iniziale)

Codice:
<?php

   

   include 'connetti.php';

    $idhotel = 1;
    $room    = 1;
    $DataArrivo  = '2014/04/04';
    $DataPartenza= '2014/05/17';
    $IDprezzo    = 'price';       // nome della colonna da cercare per tipologia di pensione

    $sql = PreparaSql($idhotel, $room, $DataArrivo, $DataPartenza, $IDprezzo);

    $data = $db->Query_select($sql);
    $dbresult = count($data);
    if ($dbresult) {
      $TotalDays = $data[0][0];
      $TotalCost = $data[0][1];
      print "Hotel     : " . $idhotel      . "<br /> 
             Camera    : " . $room         . "<br />
             Pensione  : " . $IDprezzo     . "<br />
             Arrivo    : " . $DataArrivo   . "<br />
             Partenza  : " . $DataPartenza . "<br />
             TotalDays : " . $TotalDays    . "<br /> 
             TotalCost : " . $TotalCost    . "<br />";
    }

    function PreparaSql($idhotel='', $room='', $DataArrivo='', $DataPartenza='', $IDprezzo='') {

      // inserire eventuali controlli di validità sui parametri se non fatti prima

      $sql = "declare @idhotel as int;";
      $sql.= "declare @room    as int;";
      $sql.= "declare @data_arrivo   as datetime;";
      $sql.= "declare @data_partenza as datetime;";

      $sql.= "set @idhotel = " . $idhotel . ";";
      $sql.= "set @room    = " . $room    . ";";
      $sql.= "set @data_arrivo   = '" . $DataArrivo   . "';";
      $sql.= "set @data_partenza = '" . $DataPartenza . "';";

      $sql.= "select sum(A.TotalDays) as TotalDays, sum(A.TotalCost) as TotalCost from (";
      $sql.= "select";
      $sql.= "  1 as tipo";
      $sql.= ", price_start";
      $sql.= ", price_end";
      $sql.= ", @data_arrivo as arrivo";
      $sql.= ", @data_partenza as partenza";
      $sql.= ", CASE WHEN @data_partenza <= price_end";
      $sql.= "    THEN DATEDIFF(day, @data_arrivo, @data_partenza)";
      $sql.= "    ELSE DATEDIFF(day, @data_arrivo, price_end) + 1";
      $sql.= "  END as TotalDays";
      $sql.= ", pernottamento";
      $sql.= ", pernottamento * (";
      $sql.= "    CASE WHEN @data_partenza <= price_end";
      $sql.= "      THEN DATEDIFF(day, @data_arrivo, @data_partenza)";
      $sql.= "      ELSE DATEDIFF(day, @data_arrivo, price_end) + 1";
      $sql.= "    END ) as TotalCost";
      $sql.= " from roomprices";
      $sql.= " where idhotel=@idhotel and room=@room";
      $sql.= " and @data_arrivo>=price_start and @data_arrivo<=price_end";

      $sql.= " union ";

      $sql.= "select";
      $sql.= "  2 as tipo";
      $sql.= ", price_start";
      $sql.= ", price_end";
      $sql.= ", @data_arrivo as arrivo";
      $sql.= ", @data_partenza as partenza";
      $sql.= ", DATEDIFF(day, price_start, @data_partenza) as TotalDays";
      $sql.= ", pernottamento";
      $sql.= ", pernottamento * ( DATEDIFF(day, price_start, @data_partenza) ) as TotalCost";
      $sql.= " from roomprices";
      $sql.= " where idhotel=@idhotel and room=@room";
      $sql.= " and @data_partenza>=price_start and @data_partenza<=price_end and @data_arrivo<price_start";
     
      $sql.= " union ";

      $sql.= "select";
      $sql.= "  3 as tipo";
      $sql.= ", price_start";
      $sql.= ", price_end";
      $sql.= ", @data_arrivo as arrivo";
      $sql.= ", @data_partenza as partenza";
      $sql.= ", 1+DATEDIFF(day, price_start, price_end) as TotalDays";
      $sql.= ", pernottamento";
      $sql.= ", pernottamento * ( 1+DATEDIFF(day, price_start, price_end) ) as TotalCost";
      $sql.= " from roomprices";
      $sql.= " where idhotel=@idhotel and room=@room";
      $sql.= " and price_start>@data_arrivo and price_end<@data_partenza";
      $sql.= ") A";

      return str_replace("pernottamento", $IDprezzo, $sql);
    }
    ?>

scusa il commento ma vorrei capire tu in questa riga
Codice:
   $sql = PreparaSql($idhotel, $room, $DataArrivo, $DataPartenza, $IDprezzo);
richiami una funzione di fatto prima di averla definita, poiche la definisci in fondo, e corretto?

ciao e grazie.
 

marino51

Utente Attivo
28 Feb 2013
3.205
207
63
Lombardia
  • 26 Mag 2014
  • #27
ciao ,

per eliminare l'errore

include 'connetti.php';

devi togliere queste due righe

if (isset($_REQUEST['_SESSION'])) die("Get lost Muppet!");
$db=new database();


dal file

include 'connetti.php';

ma poi tutto il suo contenuto, esclusa la connessione, va buttato

ora decidi quale via proseguire, se usare PDO o connessione mysql

se decidi per pdo fai la prova che ti ho suggerito
ciao
Marino

ps la posizione della funzione è ininfluente
 

marino51

Utente Attivo
28 Feb 2013
3.205
207
63
Lombardia
  • 26 Mag 2014
  • #28
ti sto suggerendo di utilizzare pdo per il motivo che puoi trovare in un post di criric, ma non solo

In ogni caso ti consiglio di abbandonare da subito l'estensione mysql che è già deprecata e verrà presto rrimossa.
una valida alternativa è mysqli , qui trovi alcune funzioni di base.
Clicca per allargare...
qui trovi il suo post
http://forum.mrwebmaster.it/php/39623-prima-pagina-php.html

almeno adeguati al suo suggerimento
ciao
Marino
 
Ultima modifica: 26 Mag 2014
M

marco4001

Utente Attivo
28 Mar 2008
30
0
0
  • 26 Mag 2014
  • #29
scusa ma non mi e' chiaro cosa eliminare e cosa lasciare mi potresti postare il codice con le correzioni del caso?
grazie
 

marino51

Utente Attivo
28 Feb 2013
3.205
207
63
Lombardia
  • 26 Mag 2014
  • #30
marco4001 ha scritto:
scusa ma non mi e' chiaro cosa eliminare e cosa lasciare mi potresti postare il codice con le correzioni del caso?
grazie
Clicca per allargare...

ciao,
credo che tu debba lasciare solo questo codice, eliminando tutto il resto
PHP:
<?php

$dbhost = 'IP';
$dbusername = 'USERNAME';
$dbpasswd = 'PASSWORD';
$database_name = 'NOME_DATABASE';
$table = 'roomprices';

$connection = mysql_pconnect("$dbhost","$dbusername","$dbpasswd")
	or die ("Couldn't connect to server.");

$db = mysql_select_db("$database_name", $connection) 	or die("Couldn't select database.");

?>

non ho però conoscenze sufficienti di mysql per seguirti su questa strada,
ti suggerisco di chiudere questa discussione che sta diventando inutilmente lunga,
avendo già un metodo di calcolo espresso nei primi post
e di aprire di volta in volta nuove discussioni se incontri problemi con mysql,
sicuramente troverai persone disponibili a risponderti
ciao
Marino
 
M

marco4001

Utente Attivo
28 Mar 2008
30
0
0
  • 27 Mag 2014
  • #31
ok, ultima domanda, dopo ti lascio in pace giuro, sarebbe possibile eseguire la query, senza l'ausilio della funzione che hai creato?

grazie.
 

marino51

Utente Attivo
28 Feb 2013
3.205
207
63
Lombardia
  • 27 Mag 2014
  • #32
questa è la query senza la funzione
ricorda che devi aver impostato i 5 parametri, $idhotel, $room, $DataArrivo, $DataPartenza, $IDprezzo

PHP:
  $sql = "declare @idhotel as int;";
  $sql.= "declare @room    as int;";
  $sql.= "declare @data_arrivo   as datetime;";
  $sql.= "declare @data_partenza as datetime;";
  $sql.= "set @idhotel = " . $idhotel . ";";
  $sql.= "set @room    = " . $room    . ";";
  $sql.= "set @data_arrivo   = '" . $DataArrivo   . "';";
  $sql.= "set @data_partenza = '" . $DataPartenza . "';";
  $sql.= "select sum(A.TotalDays) as TotalDays, sum(A.TotalCost) as TotalCost from (";
  $sql.= "select";
  $sql.= "  1 as tipo";
  $sql.= ", price_start";
  $sql.= ", price_end";
  $sql.= ", @data_arrivo as arrivo";
  $sql.= ", @data_partenza as partenza";
  $sql.= ", CASE WHEN @data_partenza <= price_end";
  $sql.= "    THEN DATEDIFF(@data_partenza, @data_arrivo)";
  $sql.= "    ELSE DATEDIFF(price_end, @data_arrivo) + 1";
  $sql.= "  END as TotalDays";
  $sql.= ", COLPREZZO";
  $sql.= ", COLPREZZO * (";
  $sql.= "    CASE WHEN @data_partenza <= price_end";
  $sql.= "    THEN DATEDIFF(@data_partenza, @data_arrivo)";
  $sql.= "    ELSE DATEDIFF(price_end, @data_arrivo) + 1";
  $sql.= "    END ) as TotalCost";
  $sql.= " from roomprices";
  $sql.= " where idhotel=@idhotel and room=@room";
  $sql.= " and @data_arrivo>=price_start and @data_arrivo<=price_end";
  $sql.= " union ";
  $sql.= "select";
  $sql.= "  2 as tipo";
  $sql.= ", price_start";
  $sql.= ", price_end";
  $sql.= ", @data_arrivo as arrivo";
  $sql.= ", @data_partenza as partenza";
  $sql.= ", DATEDIFF(@data_partenza, price_start) as TotalDays";
  $sql.= ", COLPREZZO";
  $sql.= ", COLPREZZO * ( DATEDIFF(@data_partenza, price_start) ) as TotalCost";
  $sql.= " from roomprices";
  $sql.= " where idhotel=@idhotel and room=@room";
  $sql.= " and @data_partenza>=price_start and @data_partenza<=price_end and @data_arrivo<price_start";
  $sql.= " union ";
  $sql.= "select";
  $sql.= "  3 as tipo";
  $sql.= ", price_start";
  $sql.= ", price_end";
  $sql.= ", @data_arrivo as arrivo";
  $sql.= ", @data_partenza as partenza";
  $sql.= ", 1+DATEDIFF(price_end, price_start) as TotalDays";
  $sql.= ", COLPREZZO";
  $sql.= ", COLPREZZO * ( 1+DATEDIFF(price_end, price_start) ) as TotalCost";
  $sql.= " from roomprices";
  $sql.= " where idhotel=@idhotel and room=@room";
  $sql.= " and price_start>@data_arrivo and price_end<@data_partenza";
  $sql.= ") A";
  $sql = str_replace("COLPREZZO", $IDprezzo, $sql);

ma lascia che ti suggerisca quella che per me è l'alternativa migliore,
inserisci la funzione nel file di connessione

PHP:
<?php 

$dbhost = 'IP'; 
$dbusername = 'USERNAME'; 
$dbpasswd = 'PASSWORD'; 
$database_name = 'NOME_DATABASE'; 
$table = 'roomprices'; 

$connection = mysql_pconnect("$dbhost","$dbusername","$dbpasswd") 
    or die ("Couldn't connect to server."); 

$db = mysql_select_db("$database_name", $connection)     or die("Couldn't select database."); 

function PreparaSql($idhotel='', $room='', $DataArrivo='', $DataPartenza='', $IDprezzo='') {
  $sql = "declare @idhotel as int;";
  $sql.= "declare @room    as int;";
  $sql.= "declare @data_arrivo   as datetime;";
  $sql.= "declare @data_partenza as datetime;";
  $sql.= "set @idhotel = " . $idhotel . ";";
  $sql.= "set @room    = " . $room    . ";";
  $sql.= "set @data_arrivo   = '" . $DataArrivo   . "';";
  $sql.= "set @data_partenza = '" . $DataPartenza . "';";
  $sql.= "select sum(A.TotalDays) as TotalDays, sum(A.TotalCost) as TotalCost from (";
  $sql.= "select";
  $sql.= "  1 as tipo";
  $sql.= ", price_start";
  $sql.= ", price_end";
  $sql.= ", @data_arrivo as arrivo";
  $sql.= ", @data_partenza as partenza";
  $sql.= ", CASE WHEN @data_partenza <= price_end";
  $sql.= "    THEN DATEDIFF(@data_partenza, @data_arrivo)";
  $sql.= "    ELSE DATEDIFF(price_end, @data_arrivo) + 1";
  $sql.= "  END as TotalDays";
  $sql.= ", COLPREZZO";
  $sql.= ", COLPREZZO * (";
  $sql.= "    CASE WHEN @data_partenza <= price_end";
  $sql.= "    THEN DATEDIFF(@data_partenza, @data_arrivo)";
  $sql.= "    ELSE DATEDIFF(price_end, @data_arrivo) + 1";
  $sql.= "    END ) as TotalCost";
  $sql.= " from roomprices";
  $sql.= " where idhotel=@idhotel and room=@room";
  $sql.= " and @data_arrivo>=price_start and @data_arrivo<=price_end";
  $sql.= " union ";
  $sql.= "select";
  $sql.= "  2 as tipo";
  $sql.= ", price_start";
  $sql.= ", price_end";
  $sql.= ", @data_arrivo as arrivo";
  $sql.= ", @data_partenza as partenza";
  $sql.= ", DATEDIFF(@data_partenza, price_start) as TotalDays";
  $sql.= ", COLPREZZO";
  $sql.= ", COLPREZZO * ( DATEDIFF(@data_partenza, price_start) ) as TotalCost";
  $sql.= " from roomprices";
  $sql.= " where idhotel=@idhotel and room=@room";
  $sql.= " and @data_partenza>=price_start and @data_partenza<=price_end and @data_arrivo<price_start";
  $sql.= " union ";
  $sql.= "select";
  $sql.= "  3 as tipo";
  $sql.= ", price_start";
  $sql.= ", price_end";
  $sql.= ", @data_arrivo as arrivo";
  $sql.= ", @data_partenza as partenza";
  $sql.= ", 1+DATEDIFF(price_end, price_start) as TotalDays";
  $sql.= ", COLPREZZO";
  $sql.= ", COLPREZZO * ( 1+DATEDIFF(price_end, price_start) ) as TotalCost";
  $sql.= " from roomprices";
  $sql.= " where idhotel=@idhotel and room=@room";
  $sql.= " and price_start>@data_arrivo and price_end<@data_partenza";
  $sql.= ") A";
  return str_replace("COLPREZZO", $IDprezzo, $sql);
}

?>

e nella tua applicazione la richiami semplicemente con una riga, dove vuoi e qunte volte vuoi
con parametri diversi

PHP:
$sql = PreparaSql($idhotel, $room, $DataArrivo, $DataPartenza, $IDprezzo);
$data = $db->Query_select($sql);

ciao
Marino

ps, puoi anche inserire la funzione in un file a se stante e includere il file come fai con quello della connessione
 
Ultima modifica: 27 Mag 2014
M

marco4001

Utente Attivo
28 Mar 2008
30
0
0
  • 5 Giu 2014
  • #33
Ciao, dopo un po' di studio sono arrivato ad una soluzione propria, che vorrei condividere con te per capirne le problematiche e suggerire migliorie - sempre se non ti sei stufato.

ho modicato la tabella cosi' lasciando solo una colonna data:

Codice:
CREATE TABLE IF NOT EXISTS `roomprices` (
  `idhotel` int(11) NOT NULL,
  `room` int(11) NOT NULL,
  `data` date NOT NULL,
  `pensionecompleta` float NOT NULL,
  `mezzapensione` float NOT NULL,
  `pernottamento` float NOT NULL,
  KEY `index1` (`idhotel`,`room`,`data`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

mentre il codice l'ho modificato cosi'
Codice:
<?php


$arrivo = "2014-06-06";

$partenza ="2014-06-10";

$tipo_pensione = "pernottamento";



// lavoro sulle date

// arrivo

$array_arrivo = explode("-", $arrivo);

$anno_arrivo = $array_arrivo[0];
$mese_arrivo = $array_arrivo[1];
$giorno_arrivo = $array_arrivo[2];


// partenza

$array_partenza = explode("-", $partenza);

$anno_partenza = $array_partenza[0];
$mese_partenza = $array_partenza[1];
$giorno_partenza = $array_partenza[2];

$notti = $giorno_partenza - 1;



$nottizero = "0".$notti;


$data_via = array($anno_partenza, $mese_partenza, $nottizero);

$data_partenza = implode("-", $data_via);


// giorni totali di permanenza

$datetime1 = new DateTime($data_partenza);
$datetime2 = new DateTime($arrivo);
$interval = $datetime1->diff($datetime2);

$giorni = $interval->format('%a');

// echo $nottizero;


// tolgo una notte



include "connetti.php";

// query per il totale da pagare
	  
$sql = "SELECT sum($tipo_pensione) AS tot FROM roomprices  WHERE data BETWEEN  '$arrivo' AND '$data_partenza'";

// echo $sql."<br><br>";

$result = mysql_query($sql);  
while($row=mysql_fetch_array($result)) { $totale = $row['tot']; }  

// stampo risultati

echo "<hr>";
echo "data di arrivo ".$arrivo;
echo "<br>";
echo "data di partenza ".$partenza;
echo "<br>";

// stampo le notti di permanenza

$totale_notti = $giorni+1;

if ($giorni == "0") { echo "notti totali di permanenza 1"; }
else {echo "notti totali di permanenza ".$totale_notti; }

echo "<br>";
echo "totale da pagare ".$totale." € ";


Lasciando perdere la parte iniziale, che serve solo a elaborare le date e i giorni di permanenza ho in pratica fatto un select sum between su un'unica colonna (pernottamento nell'esempio) tra la colonna data che contiene tutte le date della stagione (ad es. 2014-5-25, 2014-5-26 ecc... fino a 2014-10-30) le variabili $arrivo e $partenza (che saranno inviate da un form) saranno rispettivamente le date di check-in e check-out del cliente.

Commenti e migliorie sono graditi soprattutto sulla parte del calcolo delle notti - sicuramente migliorabile

Ciao e Grazie.
 

marino51

Utente Attivo
28 Feb 2013
3.205
207
63
Lombardia
  • 5 Giu 2014
  • #34
ciao,
non amo le date e cerco di evitarle quando possibile
quindi scusa se ho tolto tutte le operazioni sulle date, lasciando solo le indispensabili

PHP:
<?php

$hotel = 1;

$camera = 1;

$arrivo = "2014-06-06";

$partenza ="2014-06-10";

$tipo_pensione = "pernottamento";

// calcolo le notti di presenza
$datetime1 = new DateTime($partenza);
$datetime2 = new DateTime($arrivo);
$interval = $datetime1->diff($datetime2);
$totale_notti = $interval->format('%a');

print "<hr><br />";
print "hotel : ".$hotel."<br />";
print "camera : ".$camera."<br />";
print "data di arrivo : ".$arrivo."<br />";
print "data di partenza : ".$partenza."<br />";
print "notti totali di permanenza : ".$totale_notti."<br />";

if ($totale_notti < 1) die('ERRORE NELLE DATE DI ARRIVO E PARTENZA');

include "connetti.php";

$sql = "SELECT sum($tipo_pensione) AS tot FROM roomprices ";
$sql.= "WHERE idhotel=".$hotel;
$sql.= " AND room=".$camera;
$sql.= " AND data>='".$arrivo."'";   // giorno di arrivo e successivi
$sql.= " AND data<'".$partenza."'";  // esclusa la partenza

// print "sql : ".$sql."<br /><br />";

$result = mysql_query($sql);  
while($row=mysql_fetch_array($result)) { $totale = $row['tot']; }  

print "totale da pagare : ".$totale." €<br />";
?>

non ho provato la parte sql perché non ho mysql e ho la vecchia struttura della tabella
fammi sapere se va bene, grazie
ciao
Marino
 
M

marco4001

Utente Attivo
28 Mar 2008
30
0
0
  • 6 Giu 2014
  • #35
tutto ok un immenso grazie
 
Prec.
  • 1
  • 2
Primo Prec. 2 di 2
Devi accedere o registrarti per poter rispondere.

Discussioni simili

P
Codifica caratteri speciali mysql php
  • Peterrey76
  • 24 Ott 2022
  • PHP
Risposte
2
Visite
2K
PHP 23 Apr 2025
webest
F
Applicazione PHP/MySQL per prenotazioni: limitare il numero massimo di posti prenotabili
  • Fra_23
  • 25 Giu 2022
  • PHP
  • 2
Risposte
20
Visite
4K
PHP 16 Lug 2022
zorro
L
tipo boolean non funzionante su mariadb (mysql). E codice php 7.4.
  • luigi777
  • 18 Giu 2022
  • PHP
Risposte
0
Visite
786
PHP 18 Giu 2022
luigi777
L
M
PHP/MySQL - Estrarre valori min e max di ogni gruppo
  • Max61
  • 10 Giu 2022
  • PHP
Risposte
5
Visite
2K
PHP 13 Giu 2022
Max61
M
F
Ricreare struttura php+mysql su Xampp
  • francescoITA
  • 23 Ago 2021
  • Apache
Risposte
0
Visite
6K
Apache 23 Ago 2021
francescoITA
F
M
Array associativi php su 2 campi mysql
  • maxnegri2036
  • 14 Ago 2021
  • PHP
Risposte
10
Visite
2K
PHP 16 Ago 2021
zorro
L
php mysql non salva solo id
  • luigithen
  • 23 Apr 2021
  • PHP
  • 2
Risposte
21
Visite
2K
PHP 25 Apr 2021
luigithen
L
L
php mysql cerca e visualizza pagina
  • luigithen
  • 21 Apr 2021
  • PHP
Risposte
0
Visite
1K
PHP 21 Apr 2021
luigithen
L
R
Aggiornare record mysql con Ajax, jQuery e php
  • Riccardo Contu
  • 19 Apr 2021
  • Ajax
Risposte
2
Visite
6K
Ajax 19 Apr 2021
Tommy03
Z
MySql injection PHP
  • z.cristiano
  • 5 Apr 2021
  • PHP
Risposte
1
Visite
1K
PHP 6 Apr 2021
Daniele_Carrara
D
problema php mysql
  • dgianmarco
  • 16 Dic 2020
  • PHP
Risposte
1
Visite
2K
PHP 22 Dic 2020
zorro
D
  • Bloccata
problema php mysql
  • dgianmarco
  • 16 Dic 2020
  • PHP
Risposte
1
Visite
2K
PHP 16 Dic 2020
Max 1
L
Google chart php mysql
  • luigithen
  • 29 Set 2020
  • PHP
Risposte
2
Visite
2K
PHP 30 Set 2020
luigithen
L
L
  • Bloccata
Aiuto per programma web php/mySQL
  • Ludo83
  • 29 Giu 2020
  • PHP
Risposte
2
Visite
2K
PHP 30 Giu 2020
Max 1
S
Problemi delle funzioni eliminate con PHP e MySQL
  • Silvio0505
  • 20 Mag 2020
  • PHP
Risposte
4
Visite
2K
PHP 20 Mag 2020
Silvio0505
S
C
Aiuto compiuto scuola PHP/MySQL
  • Claudia Colanera
  • 5 Mag 2020
  • PHP
Risposte
2
Visite
2K
PHP 6 Mag 2020
Max 1
G
Problema caricamento tabelle MySql da PhP
  • Gian72Luca
  • 6 Apr 2020
  • PHP
Risposte
0
Visite
1K
PHP 6 Apr 2020
Gian72Luca
G
L
update tabelle in php mysql [risolto]
  • luigithen
  • 31 Mar 2020
  • PHP
Risposte
6
Visite
2K
PHP 31 Mar 2020
luigithen
L
F
Passare una variabile php dal DB mysql alla pagina
  • fabio di rauso
  • 9 Gen 2020
  • PHP
Risposte
3
Visite
3K
PHP 10 Gen 2020
macus_adi
B
Fare calcoli con php da tabella mysql
  • bipolare75
  • 4 Gen 2020
  • PHP
Risposte
2
Visite
1K
PHP 5 Gen 2020
macus_adi
Condividi:
Facebook X (Twitter) LinkedIn WhatsApp e-mail Condividi Link
  • Home
  • Forum
  • Fare Web
  • PHP
  • Italiano
  • Termini e condizioni d'uso del sito
  • Policy Privacy
  • Aiuto
  • Home
Community platform by XenForo® © 2010-2024 XenForo Ltd. | Traduzione a cura di XenForo Italia
Menu
Accedi

Registrati

  • Home
  • Forum
    • Nuovi Messaggi
    • Cerca...
  • Novità
    • Featured content
    • Nuovi Messaggi
    • Ultime Attività
X

Privacy & Transparency

We use cookies and similar technologies for the following purposes:

  • Personalized ads and content
  • Content measurement and audience insights

Do you accept cookies and these technologies?

X

Privacy & Transparency

We use cookies and similar technologies for the following purposes:

  • Personalized ads and content
  • Content measurement and audience insights

Do you accept cookies and these technologies?