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,
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 !";
?>
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.
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
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