[PHP]Funzione di calcolo prezzo di una camera in un range di date

maxnegri

Utente Attivo
12 Ott 2004
87
0
6
Allora ho fatto tutto come mi hai indicato. Le query da sole funzionano correttamente ma se le inserisco nella funzione il risultato è sempre NULL. Ho modificato anche tutti i parametri date e room e non credo ci siano ancora errori.
Puoi testarla anche tu? Grazie!
PHP:
$hostname = "localhost";
$pass   = "PASSWORD";
$muser  = "USER";
$db ="DB";
$mysqli = @new mysqli($hostname, $muser, $pass, $db);
if( mysqli_connect_errno())
{
  die(mysqli_connect_error());
}

$room="1";
$start_date="2019-08-26"; // data di arrivo
$end_date="2019-08-30"; // data di partenza


function get_diff_Date($dt1,$dt2){
   $start_date=new DateTime($dt1);
   $end_date=new DateTime($dt2);
   $diff=$data_out->diff($start_date);
   $create_date=[];
   for ($i=1;$i<=$diff->days;$i++) {
      $start_date->add(new DateInterval('P1D'));
      $create_date[]=
         [
            'date'=>$start_date->format('d/m/Y'),
            'day'=>$start_date->format('w'),
            'label_day'=>$start_date->format('l')
         ];
   }
   return $create_date;
}

function find_sconto(){
   /*
      'sconto'=>0,
   //percentuale o fisso (fixed)
      'type'=>'percentage',
      'skip_if_0'=>TRUE
   /*/
   $model_return=['sconto'=>0,'type'=>'percentage','ship_0'=>TRUE];
   return $model_return;
}

function cal_price_($room,$start_date,$end_date){

   $date_diff=get_diff_Date($start_date,$end_date);
   $model_result=
      [
         'operation'=>
            [
               'plus'=>[
                  'custom'=>0,
                  'normal'=>0
               ],
               'minus'=>find_sconto()
            ],
         'total'=>0,
         'per_night'=>0
      ];


$query=$mysqli->query('SELECT * FROM room WHERE id = '.$room);
$data=json_decode(json_encode($query->fetch_all(MYSQLI_ASSOC)));
//print_r($data);


$query=$mysqli->query('SELECT * FROM room_custom_price WHERE (DATE(certain_date) BETWEEN "'.$start_date.'" AND "'.$end_date.'")');
$data_custom=json_decode(json_encode($query->fetch_all(MYSQLI_ASSOC)));
//print_r($data_custom);

   $map=['price_sun','price_mon','price_tue','price_wed','price_thu','price_fri','price_sat'];

   if(!empty($data_custom)){
      //non ci sono prezzi personalizzati
      foreach ($data_custom as $k=>$items){
         $model_result['operation']['plus']['custom']+=$items->price;
      }
   }
   foreach ($date_diff as $k=>$v){
      foreach ($data as $jey_q=>$value_q){
         $day=$map[$v['day']];
         $model_result['operation']['plus']['normal']+=$value_q->$day;
      }
   }
   foreach ($model_result['operation']['plus'] as $k=>$v){
      $model_result['total']+=$v;
   }
   $model_result['per_night']=$model_result['total']/count($date_diff);

   return $model_result;
}


var_dump($model_result);
 

macus_adi

Utente Attivo
5 Dic 2017
1.320
88
48
IT/SW
var_dump($model_result);
Certo che model_result è vuoto, è il ritorno della funzione....
Aggiungi mysqli dentro la funzione o lo passi alla funzione.
quindi....
PHP:
//intestazione funzione
function cal_price_($room,$start_date,$end_date){
$hostname = "localhost";
$pass   = "PASSWORD";
$muser  = "USER";
$db ="DB";
$mysqli =new mysqli($hostname,$muser,$pass,$db);
   $date_diff=get_diff_Date($start_date,$end_date);
........//tutto il contenuto sotto

}
//dopo la chiusura della funzione
print_r(cal_price_($room,$start_date,$end_date));
 

maxnegri

Utente Attivo
12 Ott 2004
87
0
6
Il problema non sta nelle query che se le utilizzo da sole sono corrette mi danno i risultati.
Se invece le inserisco nella funzione il risultato è null. Ho cambiato anche ci con mysqli ma nulla.
Puoi testare tutto il codice che ti posto anche tu?
PHP:
$hostname = "localhost";
$pass   = "PASSWORD";
$muser  = "USER";
$db ="DATABASE";
$mysqli = @new mysqli($hostname, $muser, $pass, $db);
if( mysqli_connect_errno()) 
{
  die(mysqli_connect_error());
}

$room="1";
$start_date="2019-08-26"; // data di arrivo
$end_date="2019-08-30"; // data di partenza


function get_diff_Date($dt1,$dt2){
   $start_date=new DateTime($dt1);
   $end_date=new DateTime($dt2);
   $diff=$data_out->diff($start_date);
   $create_date=[];
   for ($i=1;$i<=$diff->days;$i++) {
      $start_date->add(new DateInterval('P1D'));
      $create_date[]=
         [
            'date'=>$start_date->format('d/m/Y'),
            'day'=>$start_date->format('w'),
            'label_day'=>$start_date->format('l')
         ];
   }
   return $create_date;
}

function find_sconto(){
   /*
      'sconto'=>0,
   //percentuale o fisso (fixed)
      'type'=>'percentage',
      'skip_if_0'=>TRUE
   /*/
   $model_return=['sconto'=>0,'type'=>'percentage','ship_0'=>TRUE];
   return $model_return;
}

function cal_price_($room,$start_date,$end_date){
   $mysqli=&get_instance();
   $date_diff=get_diff_Date($start_date,$end_date);
   $model_result=
      [
         'operation'=>
            [
               'plus'=>[
                  'custom'=>0,
                  'normal'=>0
               ],
//da implementare le regole di calcolo
               'minus'=>find_sconto()
            ],
         'total'=>0,
         'per_night'=>0
      ];

$query=$mysqli->query('SELECT * FROM room WHERE id = '.$room);
$data=json_decode(json_encode($query->fetch_all(MYSQLI_ASSOC)));
print_r($data);


$query=$mysqli->query('SELECT * FROM room_custom_price WHERE (DATE(certain_date) BETWEEN "'.$start_date.'" AND "'.$end_date.'")');
$data_custom=json_decode(json_encode($query->fetch_all(MYSQLI_ASSOC)));
print_r($data_custom);

   $map=['price_sun','price_mon','price_tue','price_wed','price_thu','price_fri','price_sat'];

   if(!empty($data_custom)){
      //non ci sono prezzi personalizzati
      foreach ($data_custom as $k=>$items){
         $model_result['operation']['plus']['custom']+=$items->price;
      }
   }
   foreach ($date_diff as $k=>$v){
      foreach ($data as $jey_q=>$value_q){
         $day=$map[$v['day']];
         $model_result['operation']['plus']['normal']+=$value_q->$day;
      }
   }
   foreach ($model_result['operation']['plus'] as $k=>$v){
      $model_result['total']+=$v;
   }
   $model_result['per_night']=$model_result['total']/count($date_diff);

   return $model_result;
}


var_dump($model_result);
 

maxnegri

Utente Attivo
12 Ott 2004
87
0
6
Scusami ma hai testato il codice perché come da tue indicazioni comunque non mi stampa nulla.
Puoi cortesemente provare questo codice in una pagina test?

PHP:
function cal_price_($room,$start_date,$end_date){
$hostname = "localhost";
$pass   = "PASSWORD";
$muser  = "USER";
$db ="DATABASE";
$mysqli = @new mysqli($hostname, $muser, $pass, $db);
if( mysqli_connect_errno()) 
{
  die(mysqli_connect_error());
}

$room="1";
$start_date="2019-08-26"; // data di arrivo
$end_date="2019-08-30"; // data di partenza


function get_diff_Date($dt1,$dt2){
   $start_date=new DateTime($dt1);
   $end_date=new DateTime($dt2);
   $diff=$data_out->diff($start_date);
   $create_date=[];
   for ($i=1;$i<=$diff->days;$i++) {
      $start_date->add(new DateInterval('P1D'));
      $create_date[]=
         [
            'date'=>$start_date->format('d/m/Y'),
            'day'=>$start_date->format('w'),
            'label_day'=>$start_date->format('l')
         ];
   }
   return $create_date;
}

function find_sconto(){
   /*
      'sconto'=>0,
   //percentuale o fisso (fixed)
      'type'=>'percentage',
      'skip_if_0'=>TRUE
   /*/
   $model_return=['sconto'=>0,'type'=>'percentage','ship_0'=>TRUE];
   return $model_return;
}

function cal_price_($room,$start_date,$end_date){
   $mysqli=&get_instance();
   $date_diff=get_diff_Date($start_date,$end_date);
   $model_result=
      [
         'operation'=>
            [
               'plus'=>[
                  'custom'=>0,
                  'normal'=>0
               ],
//da implementare le regole di calcolo
               'minus'=>find_sconto()
            ],
         'total'=>0,
         'per_night'=>0
      ];
$query=$mysqli->query('SELECT * FROM room WHERE id = '.$room);
$data=json_decode(json_encode($query->fetch_all(MYSQLI_ASSOC)));
print_r($data);

$query=$mysqli->query('SELECT * FROM room_custom_price WHERE (DATE(certain_date) BETWEEN "'.$start_date.'" AND "'.$end_date.'")');
$data_custom=json_decode(json_encode($query->fetch_all(MYSQLI_ASSOC)));
print_r($data_custom);

   $map=['price_sun','price_mon','price_tue','price_wed','price_thu','price_fri','price_sat'];

   if(!empty($data_custom)){
      //non ci sono prezzi personalizzati
      foreach ($data_custom as $k=>$items){
         $model_result['operation']['plus']['custom']+=$items->price;
      }
   }
   foreach ($date_diff as $k=>$v){
      foreach ($data as $jey_q=>$value_q){
         $day=$map[$v['day']];
         $model_result['operation']['plus']['normal']+=$value_q->$day;
      }
   }
   foreach ($model_result['operation']['plus'] as $k=>$v){
      $model_result['total']+=$v;
   }
   $model_result['per_night']=$model_result['total']/count($date_diff);

   return $model_result;
}
}
//dopo la chiusura della funzione
print_r(cal_price_($room,$start_date,$end_date));
 

macus_adi

Utente Attivo
5 Dic 2017
1.320
88
48
IT/SW
Scusami ma hai testato il codice perché come da tue indicazioni comunque non mi stampa nulla.
Il dubbio non mi viene sul codice, ma su come lo chiami tu in quanto non richiami nulla!!!!
La connessione nella funziona non la passi e non la crei come fa a fare la query???

Se invece le inserisco nella funzione il risultato è null. Ho cambiato anche ci con mysqli ma nulla.
Ma la funzione tu non la chiami, come ti fa a dare risultato????

Qui l'esempio con il codice funzionante....
https://perms.madi-solution.it/test_calcolo


PHP:
/*$hostname = "localhost";
$pass   = "PASSWORD";
$muser  = "USER";
$db ="DATABASE";
$mysqli = @new mysqli($hostname, $muser, $pass, $db);
if( mysqli_connect_errno())
{
  die(mysqli_connect_error());
}*/

$room="1";
$start_date="2019-08-26"; // data di arrivo
$end_date="2019-08-30"; // data di partenza


function get_diff_Date($dt1,$dt2){
   $start_date=new DateTime($dt1);
   $end_date=new DateTime($dt2);
   $diff=$data_out->diff($start_date);
   $create_date=[];
   for ($i=1;$i<=$diff->days;$i++) {
      $start_date->add(new DateInterval('P1D'));
      $create_date[]=
         [
            'date'=>$start_date->format('d/m/Y'),
            'day'=>$start_date->format('w'),
            'label_day'=>$start_date->format('l')
         ];
   }
   return $create_date;
}

function find_sconto(){
   /*
      'sconto'=>0,
   //percentuale o fisso (fixed)
      'type'=>'percentage',
      'skip_if_0'=>TRUE
   /*/
   $model_return=['sconto'=>0,'type'=>'percentage','ship_0'=>TRUE];
   return $model_return;
}

function cal_price_($room,$start_date,$end_date){
 //  $mysqli=&get_instance();
 $mysqli=new mysqli('host','user','pass','database');
 $date_diff=get_diff_Date($start_date,$end_date);
   $model_result=
      [
         'operation'=>
            [
               'plus'=>[
                  'custom'=>0,
                  'normal'=>0
               ],
//da implementare le regole di calcolo
               'minus'=>find_sconto()
            ],
         'total'=>0,
         'per_night'=>0
      ];

$query=$mysqli->query('SELECT * FROM room WHERE id = '.$room);
$data=json_decode(json_encode($query->fetch_all(MYSQLI_ASSOC)));
print_r($data);


$query=$mysqli->query('SELECT * FROM room_custom_price WHERE (DATE(certain_date) BETWEEN "'.$start_date.'" AND "'.$end_date.'")');
$data_custom=json_decode(json_encode($query->fetch_all(MYSQLI_ASSOC)));
print_r($data_custom);

   $map=['price_sun','price_mon','price_tue','price_wed','price_thu','price_fri','price_sat'];

   if(!empty($data_custom)){
      //non ci sono prezzi personalizzati
      foreach ($data_custom as $k=>$items){
         $model_result['operation']['plus']['custom']+=$items->price;
      }
   }
   foreach ($date_diff as $k=>$v){
      foreach ($data as $jey_q=>$value_q){
         $day=$map[$v['day']];
         $model_result['operation']['plus']['normal']+=$value_q->$day;
      }
   }
   foreach ($model_result['operation']['plus'] as $k=>$v){
      $model_result['total']+=$v;
   }
   $model_result['per_night']=$model_result['total']/count($date_diff);

   return $model_result;
}


//var_dump($model_result);
var_dump(cal_price_($room,$start_data,$end_data));

QUI IL FILE FUNZIONANTE
PHP:
<?php
/**
* Created by PhpS.
* User: macus
* Date: 20/01/2019
* Time: 14:27
*/
/*$hostname = "localhost";
$pass   = "PASSWORD";
$muser  = "USER";
$db ="DATABASE";
$mysqli = @new mysqli($hostname, $muser, $pass, $db);
if( mysqli_connect_errno())
{
  die(mysqli_connect_error());
}*/

$room="1";
$start_data="2019-08-26"; // data di arrivo
$end_data="2019-08-30"; // data di partenza


function get_diff_Date($dt1,$dt2){
   $start_date=new DateTime($dt1);
   $end_date=new DateTime($dt2);
   $diff=$end_date->diff($start_date);
   $create_date=[];
   for ($i=1;$i<=$diff->days;$i++) {
      $start_date->add(new DateInterval('P1D'));
      $create_date[]=
         [
            'date'=>$start_date->format('d/m/Y'),
            'day'=>$start_date->format('w'),
            'label_day'=>$start_date->format('l')
         ];
   }
   return $create_date;
}

function find_sconto(){
   /*
      'sconto'=>0,
   //percentuale o fisso (fixed)
      'type'=>'percentage',
      'skip_if_0'=>TRUE
   /*/
   $model_return=['sconto'=>0,'type'=>'percentage','ship_0'=>TRUE];
   return $model_return;
}

function cal_price_($room,$start_date,$end_date){
   //  $mysqli=&get_instance();
   $mysqli=new mysqli('host','user','pass','database');
   $date_diff=get_diff_Date($start_date,$end_date);
   $model_result=
      [
         'operation'=>
            [
               'plus'=>[
                  'custom'=>0,
                  'normal'=>0
               ],
//da implementare le regole di calcolo
               'minus'=>find_sconto()
            ],
         'total'=>0,
         'per_night'=>0
      ];

   $query=$mysqli->query('SELECT * FROM room WHERE id = '.$room);
   $data=json_decode(json_encode($query->fetch_all(MYSQLI_ASSOC)));
   //print_r($data);


   $query=$mysqli->query('SELECT * FROM room_custom_price WHERE (DATE(certain_date) BETWEEN "'.$start_date.'" AND "'.$end_date.'")');
   $data_custom=json_decode(json_encode($query->fetch_all(MYSQLI_ASSOC)));
   //print_r($data_custom);

   $map=['price_sun','price_mon','price_tue','price_wed','price_thu','price_fri','price_sat'];

   if(!empty($data_custom)){
      //non ci sono prezzi personalizzati
      foreach ($data_custom as $k=>$items){
         $model_result['operation']['plus']['custom']+=$items->price;
      }
   }
   foreach ($date_diff as $k=>$v){
      foreach ($data as $jey_q=>$value_q){
         $day=$map[$v['day']];
         $model_result['operation']['plus']['normal']+=$value_q->$day;
      }
   }
   foreach ($model_result['operation']['plus'] as $k=>$v){
      $model_result['total']+=$v;
   }
   $model_result['per_night']=$model_result['total']/count($date_diff);

   return $model_result;
}


//var_dump($model_result);
var_dump(cal_price_($room,$start_data,$end_data));
 
Ultima modifica:

maxnegri

Utente Attivo
12 Ott 2004
87
0
6
Ho copiato il tuo codice ed inserito anche la parte mancante della funzione get_diff_Date
Ricevo questo errore: PHP Fatal error: Call to a member function diff() on null

Non riesco a capire perchè a te ti funzioni e a me no. Assurdo!
 

macus_adi

Utente Attivo
5 Dic 2017
1.320
88
48
IT/SW
Utilizzando Crhome...
vai qui:https://perms.madi-solution.it/_a/test/index.php
premi CTRL+U
entri in view-source
e leggi il codice!

Lo riporto anche sotto per comodità!
PHP:
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
$room="1";
$start_data="2019-08-26"; // data di arrivo
$end_data="2019-08-30"; // data di partenza


function get_diff_Date($dt1,$dt2){
   $start_date=new DateTime($dt1);
   $end_date=new DateTime($dt2);
   $diff=$end_date->diff($start_date);
   $create_date=[];
   for ($i=1;$i<=$diff->days;$i++) {
      $start_date->add(new DateInterval('P1D'));
      $create_date[]=
         [
            'date'=>$start_date->format('d/m/Y'),
            'day'=>$start_date->format('w'),
            'label_day'=>$start_date->format('l')
         ];
   }
   return $create_date;
}

function find_sconto(){
   /*
      'sconto'=>0,
   //percentuale o fisso (fixed)
      'type'=>'percentage',
      'skip_if_0'=>TRUE
   /*/
   $model_return=['sconto'=>0,'type'=>'percentage','ship_0'=>TRUE];
   return $model_return;
}

function cal_price_($room,$start_date,$end_date){
   //  $mysqli=&get_instance();
   include_once('params.php');
   $mysqli=new mysqli($host,$user,$pass,$db);
   $date_diff=get_diff_Date($start_date,$end_date);
   $model_result=
      [
         'operation'=>
            [
               'plus'=>[
                  'custom'=>0,
                  'normal'=>0
               ],
//da implementare le regole di calcolo
               'minus'=>find_sconto()
            ],
         'total'=>0,
         'per_night'=>0
      ];

   $query=$mysqli->query('SELECT * FROM room WHERE id = '.$room);
   $data=json_decode(json_encode($query->fetch_all(MYSQLI_ASSOC)));
   //print_r($data);


   $query=$mysqli->query('SELECT * FROM room_custom_price WHERE (DATE(certain_date) BETWEEN "'.$start_date.'" AND "'.$end_date.'")');
   $data_custom=json_decode(json_encode($query->fetch_all(MYSQLI_ASSOC)));
   //print_r($data_custom);

   $map=['price_sun','price_mon','price_tue','price_wed','price_thu','price_fri','price_sat'];

   if(!empty($data_custom)){
      //non ci sono prezzi personalizzati
      foreach ($data_custom as $k=>$items){
         $model_result['operation']['plus']['custom']+=$items->price;
      }
   }
   foreach ($date_diff as $k=>$v){
      foreach ($data as $jey_q=>$value_q){
         $day=$map[$v['day']];
         $model_result['operation']['plus']['normal']+=$value_q->$day;
      }
   }
   foreach ($model_result['operation']['plus'] as $k=>$v){
      $model_result['total']+=$v;
   }
   $model_result['per_night']=$model_result['total']/count($date_diff);

   return $model_result;
}



//QUI LA VARIABILE NON É DICHIARATA E FORSE SONO PATATE
echo 'la prima volta è errore in quanto model_result è dichiarato nella funzione e non accessibile dall\'esterno<br>';
var_dump($model_result);

echo 'il risultato della funzione <br>';
//QUI CI VA LA FUNZIONE NON model_result
var_dump(cal_price_($room,$start_data,$end_data));
 

maxnegri

Utente Attivo
12 Ott 2004
87
0
6
Si adesso finalmente ricevo i risultati. Grazie mille!!!
Un consiglio per utilizzare anche gli sconti aggiungo i campi nella tabella room_custom_price giusto?
 

maxnegri

Utente Attivo
12 Ott 2004
87
0
6
Scusami ultima cosa perchè quando provo a stampare il totale complessivo causa un errore?
PHP:
echo $model_result['total'];
dovrebbe essere così oppure come al solito continuo a sbagliare.
 

macus_adi

Utente Attivo
5 Dic 2017
1.320
88
48
IT/SW
La funzione torna un valore di natura array.... non puoi accedere a "model_result" fuori la funzione....
PHP:
$risultato_da_funzione=cal_price_($room,$start_data,$end_data);
echo $risultato_da_funzione['total'];
 

maxnegri

Utente Attivo
12 Ott 2004
87
0
6
Ciao, ho la seguente query che mi prende le camere disponibili per ogni struttura ricettiva disponibile:
PHP:
$sqlselezione="SELECT * FROM room c WHERE c.coupon_shop='".$shopid."' AND c.capacita >= '".$ospiti."' AND c.coupon_city='1'  AND c.coupon_status='A' AND c.coupon_startdate <=now() AND c.coupon_enddate > now() AND c.id NOT IN ( SELECT couponid FROM coupons_purchase AS p WHERE ( p.stato='A' AND p.data_partenza > ".$data_post_arrivo_convertita." AND p.data_arrivo < ".$data_post_partenza_convertita." ) OR ( p.stato='A' AND p.data_partenza <= ".$data_post_arrivo_convertita." AND p.data_partenza >= ".$data_post_partenza_convertita." )) ORDER BY DESC LIMIT 1";
$resultselezione = mysqli_query($conn, $sqlselezione);
Come posso prendere la camera che ha il prezzo totale più basso ricavato dalla funzione di calcolo
PHP:
$risultato_da_funzione=cal_price_($room,$start_data,$end_data);
Quello che sono riuscito a fare è la somma dei prezzi c.price_mon + c.price_tue ecc... ed ordinarli nella query con ORDER BY per la somma più bassa ma non credo che sia corretto. Hai qualche idea su come fare? Grazie!
 

maxnegri

Utente Attivo
12 Ott 2004
87
0
6
Ciao facendo dei controlli ho scoperto che la funzione di calcolo non effettua la somma correttamente.
Infatti se esistono dei prezzi custom li somma a quelli di base non escludendoli.

Es. in room il prezzo per tutti i giorni della settimana è di 70 euro.
In room_custom_price per il giorno 2019-08-27 ed il giorno 2019-08-28 ho impostato rispettivamente i prezzi di 80euro e 90euro.
Quindi il calcolo dovrebbe essere :
1 notte a 70
2 notte a 70
3 notte a 80
4 notte a 90
Totale 310 Euro mentre la funzione mi calcola un totale di 450 Euro

PHP:
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
$room="7";
$start_data="2019-08-26"; // data di arrivo
$end_data="2019-08-30"; // data di partenza


function get_diff_Date($dt1,$dt2){
   $start_data=new DateTime($dt1);
   $end_data=new DateTime($dt2);
   $diff=$end_data->diff($start_data);
   $create_date=[];
   for ($i=1;$i<=$diff->days;$i++) {
      $start_data->add(new DateInterval('P1D'));
      $create_date[]=
         [
            'date'=>$start_data->format('d/m/Y'),
            'day'=>$start_data->format('w'),
            'label_day'=>$start_data->format('l')
         ];
   }
   return $create_date;
}

function find_sconto(){
   /*
      'sconto'=>0,
   //percentuale o fisso (fixed)
      'type'=>'percentage',
      'skip_if_0'=>TRUE
   /*/
   $model_return=['sconto'=>0,'type'=>'percentage','ship_0'=>TRUE];
   return $model_return;
}

function cal_price_($room,$start_data,$end_data){
   //  $mysqli=&get_instance();
   $host = "localhost";
$pass   = "PASSWORD";
$user  = "USER";
$db ="DB";
   $mysqli=new mysqli($host,$user,$pass,$db);
   $date_diff=get_diff_Date($start_data,$end_data);
   $model_result=
      [
         'operation'=>
            [
               'plus'=>[
                  'custom'=>0,
                  'normal'=>0
               ],
//da implementare le regole di calcolo
               'minus'=>find_sconto()
            ],
         'total'=>0,
         'per_night'=>0
      ];

   $query=$mysqli->query('SELECT * FROM room WHERE id = '.$room);
   $data=json_decode(json_encode($query->fetch_all(MYSQLI_ASSOC)));
   //print_r($data);


   $query=$mysqli->query('SELECT * FROM room_custom_price WHERE (DATE(certain_date) BETWEEN "'.$start_data.'" AND "'.$end_data.'")');
   $data_custom=json_decode(json_encode($query->fetch_all(MYSQLI_ASSOC)));
   //print_r($data_custom);

   $map=['price_sun','price_mon','price_tue','price_wed','price_thu','price_fri','price_sat'];

   if(!empty($data_custom)){
      //non ci sono prezzi personalizzati
      foreach ($data_custom as $k=>$items){
         $model_result['operation']['plus']['custom']+=$items->price;
      }
   }
   foreach ($date_diff as $k=>$v){
      foreach ($data as $jey_q=>$value_q){
         $day=$map[$v['day']];
         $model_result['operation']['plus']['normal']+=$value_q->$day;
      }
   }
   foreach ($model_result['operation']['plus'] as $k=>$v){
      $model_result['total']+=$v;
   }
   $model_result['per_night']=$model_result['total']/count($date_diff);

   return $model_result;
}



$risultato_da_funzione=cal_price_($room,$start_data,$end_data);

$current_amount_calcolo=$risultato_da_funzione['total'];

echo "Totale $current_amount_calcolo";

Quale potrebbe essere l'errore?
 

macus_adi

Utente Attivo
5 Dic 2017
1.320
88
48
IT/SW
Alla funzione get_Diff_date mi sono dimenticato di valorizzare il giorno in ingresso....
modifica come segue....
PHP:
function get_diff_Date($dt1,$dt2){
   $data_in=new DateTime($dt1);
   $data_out=new DateTime($dt2);
   $diff=$data_out->diff($data_in);
   $create_date=[];
/*******************************PARTE MANCANTE**************************************/   
$create_date[]=
      [
         'date'=>$data_in->format('d/m/Y'),
         'day'=>$data_in->format('w'),
         'label_day'=>$data_in->format('l')
      ];
/********************************FINE***************************************************/
   for ($i=1;$i<=$diff->days;$i++) {
      $data_in->add(new DateInterval('P1D'));
      $create_date[]=
         [
            'date'=>$data_in->format('d/m/Y'),
            'day'=>$data_in->format('w'),
            'label_day'=>$data_in->format('l')
         ];
   }
   return $create_date;
}
Ho aggiunto i dati che hai segnalato qui per verificare i calcoli.
 

maxnegri

Utente Attivo
12 Ott 2004
87
0
6
Ho copiato il codice ed aggiornato i campi delle tabelle che mancavano ma il risultato finale è comunque errato
Quindi il calcolo dovrebbe essere :
1 notte a 70
2 notte a 70
3 notte a 80
4 notte a 90
Totale 310 Euro mentre la funzione mi calcola un totale di 450 Euro

Non riesco a comprendere ma nel tuo risultato i data price vengono sostituiti in quelli custom price se esistenti?
 
Discussioni simili
Autore Titolo Forum Risposte Data
P Funzione jQuery Ajax invio file a php jQuery 1
M Utilizzare la funzione mysql_num_rows() in PHP 5 PHP 3
D Come usare funzione php PHP 6
Shyson Modificare funzione php PHP 15
pjtertdj Visualizzazione dati in php da mysql con funzione matematica in javascript PHP 1
L Problema funzione mail() PHP PHP 3
L [PHP] problema count messo in una funzione. PHP 1
Monital funzione php si ripete due volte PHP 6
GiErre [PHP] [HTML] Disabilitare un link in funzione della piattaforma PHP 7
Monital Funzione php e campo database come variabile PHP 6
M PHP - Funzione non e scrive il risultato PHP 3
F [PHP] La funzione setcookie PHP 0
C [RISOLTO][PHP] Funzione ONclick PHP 14
A [PHP] Problema invio mail con funzione mail() PHP 3
C richiamare una funzione in un altro script php PHP 1
S [PHP] errore funzione sleep PHP 5
MarcoGrazia [PHP] Verifica dell'input utente tramite funzione generica. PHP 0
B [PHP]la pagina php non si carica se aggiungo funzione while PHP 10
A Chiamata funzione PHP con onclick PHP 8
alexbrasile PHP convertire la funzione fsockopen in curl PHP 0
Gaetano1991h [PHP] Chi mi sa spiegare la funzione di questo codice? PHP 1
M [PHP] Errore nell' assegnazione della variabile $this->id su una funzione PHP 1
trattorino [PHP] funzione per visualizzare solo carattere PHP 2
S PHP: inviare via email contenuto di una funzione PHP 4
A Chiamare una specifica funzione in una pagina php PHP 1
G Problema php relativo a funzione di un pulsante PHP 8
D PHP:funzione che opera una query su argomento PHP 8
JackIlPazzo Chiamare una funzione specifica di php da una richiesta ajax? PHP 2
M Far partire una funzione/codice php con javascript Javascript 1
JackIlPazzo Eseguire funzione php senza ricaricare pagina? PHP 3
neo996sps [PHP e funzioni con PDO] Funzione per generare corpo tabella PHP 1
V Chiamata funzione php da javascript Ajax 3
X Conversione funzione php PHP 0
M Disabilitare alcune funzione php da scipt PHP 3
gandalf1959 funzione mail() e variabili su un link nel body in formato xxx.php?$a=$codicecontrollo PHP 2
C Limiti funzione mail() di php PHP 1
P Passare un valore, o arriare una funzione da pagina2.php in pagina1.php Javascript 2
M Applicare funzione php ad ogni elemto html Ajax 3
B AIUTO: come passare una variabile php ad una funzione javascript Javascript 2
F funzione javascript all'interno di un codice php PHP 38
G funzione include di php e paramentri variabili PHP 4
X NOW() funzione mysql eseguita da php PHP 6
I Richiamare funzione jquery all'invio del form php Javascript 6
S php problemi di funzione header usando la fuzione di jquery post PHP 4
S problema con funzione php PHP 3
A Funzione exec di php, errore 127 PHP 0
M PhP Problema funzione mssql PHP 5
H Funzione php non viene richiamata! PHP 41
C Funzione PHP non ottiene nomi da puntatori PHP 1
andre9004 richiamare funzione js da php PHP 2

Discussioni simili