<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[[Script] Calendario prenotazioni]]></title><description><![CDATA[<p dir="auto">Ciao bella gente. <img src="https://connect.gt/plugins/nodebb-plugin-emoji/emoji/android/1f604.png?v=gca7n9pp8gc" class="not-responsive emoji emoji-android emoji--smile" title=":D" alt="😄" /></p>
<p dir="auto">Siccome è un po' che mi sbatto per creare una web-application che mi permetta di gestire le prenotazioni di una struttura alberghiera, ho pensato di pubblicare il calendario prenotazioni.</p>
<p dir="auto">I requisiti sono:</p>
<ul>
<li>Modulo PHP 5 &gt;</li>
<li>Un database MySQL</li>
<li>Conoscenza di PHP</li>
</ul>
<p dir="auto">Ovviamente con il solo script c'è da farci poco davvero, bisognerà costruirgli attorno tutta una struttura di file e tabelle del Db per ottenere ciò che serve.</p>
<p dir="auto">Ma partiamo dall'idea...<br />
il mio punto di partenza è stato <a href="http://www.giorgiotave.it/forum/scripting-e-risorse-utili/3211-tutorial-creare-un-calendario-dinamico-php.html" rel="nofollow ugc">questo</a> script di PaTer, che poi ho modificato per le mie esigenze, ma ha di certo rappresentato la scintilla per partire con il progetto che sto portando avanti.<br />
Volendo ottenere un planner mensile di tutte le stanze, e che in questo planner mi si visualizzino, in maniera ben evidente, le date in cui le stanze son occupate, quali sono i giorni in cui ho una partenza la mattina ed un arrivo il pomeriggio, magari per la stessa stanza, cosa molto importante è anche riconoscere a vista se le prenotazione inserita è già stata confermata o per il momento è solo una richiesta disponibilità a cui non è stato dato un seguito, quindi una stanza potenzialmente ancora libera per quel periodo, di lavoro da fare ce n'è molto e per prima cosa il calendario va sicuramente sviluppato in orizzontale, una riga per stanza.</p>
<p dir="auto">Siccome non mi basta... (<img src="https://connect.gt/plugins/nodebb-plugin-emoji/emoji/customizations/8dfea2c6-baa4-48ad-9022-ab237b734846-fumato5.gif?v=gca7n9pp8gc" class="not-responsive emoji emoji-customizations emoji--fumato" title=":fumato:" alt=":fumato:" />) ...voglio pure che quando mi posiziono su un periodo prenotato mi si visualizzino almeno i dati salienti della prenotazione, chi è il cliente e quali sono le date di check-in e check-out, cliccando invece sulla prenotazione come minimo devo vedere tutti i dettagli della stessa. <img src="https://connect.gt/plugins/nodebb-plugin-emoji/emoji/android/1f609.png?v=gca7n9pp8gc" class="not-responsive emoji emoji-android emoji--wink" title=";)" alt="😉" /></p>
<p dir="auto">Di soluzioni per ottenere tutto questo ce ne saranno a bizzeffe ma mi sono posto il problema di appesantire il meno possibile il server...perché un planner che per caricare ci sta 10 secondi... non si può vedere... <img src="https://connect.gt/plugins/nodebb-plugin-emoji/emoji/customizations/29fff08e-17e5-4013-ae14-11c7dde7a411-124.gif?v=gca7n9pp8gc" class="not-responsive emoji emoji-customizations emoji--rollo" title=":rollo:" alt=":rollo:" /></p>
<p dir="auto">La soluzione che ho trovato è quella di, ovviamente, ridurre al minimo le query e limitare al massimo l'uso delle funzioni. Per fare tutto questo devo quindi incamerare i dati raccolti in maniera che poi li possa riutilizzare in maniera semplice e senza ricorrere ad ulteriori query o funzioni. E cosa meglio degli array? <img src="https://connect.gt/plugins/nodebb-plugin-emoji/emoji/android/1f642.png?v=gca7n9pp8gc" class="not-responsive emoji emoji-android emoji--slightly_smiling_face" title=":)" alt="🙂" /></p>
<p dir="auto">Con i giusti cicli e controlli sembrerebbe che la soluzione trovata funzioni.<br />
Query:<br />
Un primo ciclo serve a creare le righe, quindi le stanze, per ogni stanza poi recupero le prenotazioni che incidono nel mese visualizzato e per ogni prenotazione mi recupero l'anagrafica del cliente. Non ho bisogno di altri dati, questi già mi avanzano. <img src="https://connect.gt/plugins/nodebb-plugin-emoji/emoji/android/1f642.png?v=gca7n9pp8gc" class="not-responsive emoji emoji-android emoji--slightly_smiling_face" title=":)" alt="🙂" /></p>
<p dir="auto">Array:<br />
Per gli array, anche per un ulteriore utilizzo futuro, ho pensato di dare un indice numerico che sia uguale al timestamp del giorno, così da essere certamente univoco e utilizzabile per qualsivoglia altro sviluppo, la progressione degli indici quindi viene data dall'incremento in secondi di 1 giorno, ovvero 86400. Unico problema sorge nei mesi con il cambio ora legale/ora solare, problema che comunque si risolve con la giusta verifica sommando o sottraendo 3600 secondi (1 ora) dalla data recuperata dal Db, in quanto quella sarà già adeguata al cambio orario una volta inserita, mentre incrementando i valori indice di 86400 secondi per ogni giorno ovviamente ci si troverebbe ad avere degli indici sfalsati di 3600 secondi raggiunta la data del cambio orario.</p>
<p dir="auto">Il risultato di tutto questo sarà un planner mensile, che mi permette di muovermi tra i vari mesi, dove in verde ci saranno i giorni liberi, la distinzione tra stato "prenotato" e "confermato" che è data nel primo dal colore giallo ed il secondo dal colore rosso, e, cosa molto importante, le date di inizio e fine soggiorno saranno di un sfumatura più chiara per evidenziare l'inizio e fine dello stesso. Qualora in pari giornata si avesse un check-out ed un check-in questi giorni saranno marcati da un colore più forte (viola per i confermati e arancione per i prenotati). Posizionandosi sui periodi prenotati mi visualizzerà come title del link "Prenotazione Mario Rossi dal 01/01/2010 al 06/01/2010" e cliccando si accederà alla pagina prenotazione dove recuperato l'id della prenotazione si può ovviamente sviluppare un po' di tutto e di tutto un po'. <img src="https://connect.gt/plugins/nodebb-plugin-emoji/emoji/android/1f609.png?v=gca7n9pp8gc" class="not-responsive emoji emoji-android emoji--wink" title=";)" alt="😉" /></p>
<p dir="auto">Ma buttiamo giù un po' di codice, già parzialmente commentato:<br />
[php]&lt;?php<br />
//inseriamo i parametri di connessione al Database<br />
$db_host = "indirizzoservermysql";<br />
$db_user = "nomeutentemysql";<br />
$db_pass = "passwordmysql";<br />
$db_name = "nomedatabase";</p>
<p dir="auto">$connection = @mysql_connect($db_host,$db_user,$db_pass)<br />
or die ("Connessione al server non stabilita");<br />
$db = @mysql_select_db($db_name,$connection)<br />
or die ("Connessione al Db non stabilita");</p>
<p dir="auto">//Se cambio mese procedo al recupero dei dati postati.<br />
$mese="";<br />
$anno="";<br />
$mese=$_POST['mese'];<br />
$anno=$_POST['anno'];<br />
if ($mese=="") //se il mese non è stato valorizzato<br />
{<br />
$time=time(); //il parametro time sarà uguale al timestamp corrente<br />
}<br />
else<br />
{<br />
$time=mktime(0,0,0,$mese,1,$anno); //altrimenti mi ricavo il timestamp del primo giorno del mese richiesto<br />
}</p>
<pre><code>//utilizzo il sistema creato da PaTer in questo thread http://www.giorgiotave.it/forum/scripting-e-risorse-utili/3211-tutorial-creare-un-calendario-dinamico-php.html apportando alcune modifiche
$dati['giorni_mesi'] =  array(31, 0, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); // Array con i giorni dei mesi
$dati['mese_num'] = date("n",  $time); // Mese corrente ( numerico )
$dati['mese_text'] = date("F", $time); // Mese Corrente ( testuale )
$dati['anno'] = date("Y", $time); // Anno
$dati['start'] = date("w", mktime(0,0,0, $dati['mese_num'], 1, $dati['anno'])); // Giorno della settimana del primo giorno del mese
$dati['giorni_mesi'][1]=(date('L',$time)==0)?28:29; // calcolo giorni mese di Febbraio
$dati['giorni_mese'] = $dati['giorni_mesi'][$dati['mese_num']-1]; // Giorni del mese corrente
$dati['settimana']=array("D","L","M","M","G","V","S");
$prenotato=array("0"=&gt;"0.png","1"=&gt;"1p.png","2"=&gt;"2p.png","3"=&gt;"3p.png"); // prenotati ma non confermati avranno una colorazione gialla
$confermato=array("0"=&gt;"0.png","1"=&gt;"1c.png","2"=&gt;"2c.png","3"=&gt;"3c.png"); // confermati avranno una colorazione rossa
</code></pre>
<p dir="auto">//procedo quindi a creare due form che mi portino al mese precedente ed al mese successivo a quello attualmente visualizzato facendo attenzione al cambio di anno, nel caso si stia visualizzando il mese di Gennaio il form del mese precedente mi dovrà postare il mese 12 e l'anno corrente -1. Speculare per il mese di dicembre, il form per il mese successivo dovrà postare il mese 1 e l'anno incrementato di 1<br />
?&gt;<br />
&lt;table border="0" width="100%"&gt;<br />
&lt;tr&gt;<br />
&lt;td width="33%"&gt;&lt;form action="&lt;? echo $_SERVER['REQUEST_URI']; ?&gt;" method="post"&gt;&lt;input type="hidden" name="mese" value="&lt;? if ($dati['mese_num']=="1") { echo "12";} else {echo $dati['mese_num']-1;} ?&gt;" /&gt;&lt;input type="hidden" name="anno" value="&lt;? if ($dati['mese_num']=="1"){ echo $dati['anno']-1;} else {echo $dati['anno'];}?&gt;" /&gt;&lt;input type="submit" value=" &lt; " /&gt;&lt;/form&gt;&lt;/td&gt;<br />
&lt;td width="33%"&gt;&lt;? echo "Mese: &lt;strong&gt;".$dati['mese_text']."&lt;/strong&gt; Anno: &lt;strong&gt;".$dati['anno'] ?&gt;&lt;/strong&gt;&lt;/td&gt;<br />
&lt;td width="33%"&gt;&lt;form action="&lt;? echo $_SERVER['REQUEST_URI']; ?&gt;" method="post"&gt;&lt;input type="hidden" name="mese" value="&lt;? if ($dati['mese_num']=="12") { echo "1";} else {echo $dati['mese_num']+1;} ?&gt;" /&gt;&lt;input type="hidden" name="anno" value="&lt;? if ($dati['mese_num']=="12"){ echo $dati['anno']+1;} else {echo $dati['anno'];}?&gt;" /&gt;&lt;input type="submit" value=" &gt; " /&gt;&lt;/form&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;/table&gt;<br />
&lt;table border="1"  class="calendario" align="center"&gt;<br />
&lt;caption&gt;&lt;strong&gt;Calendario&lt;/strong&gt;&lt;/caption&gt;<br />
&lt;tr&gt;<br />
&lt;td rowspan="2"&gt;Stanze&lt;/td&gt;<br />
&lt;?<br />
// partita la tabella procedo alla costruzione delle righe di intestazione</p>
<p dir="auto">//$d servirà per verificare il ciclo dei giorni della settimana, evitando così di dover utilizzare una funzione ad ogni ciclo, basta fare un semplice controllo che una volta incrementato a 7 il valore di $d, questo riparta da 0<br />
$d=$dati['start'];     // indice della settimana del primo giorno del mese<br />
for ($i=1; $i&lt;=$dati['giorni_mese'];$i++)<br />
{<br />
if ($d=="7") $d=0;<br />
?&gt;<br />
&lt;td style="text-align:center;&lt;? if ($d=="6" || $d=="0") echo "background-color:red;"; // se $d è uguale a 6 o 0 vuol dire che è un sabato o una domenica, quindi coloriamo di rosso questi giorni ?&gt;"&gt;&lt;? echo $dati['settimana'][$d]; //utilizzo $d anche come indice progressivo per visualizzare il contenuto dell'array dei giorni della settimana ?&gt;&lt;/td&gt;<br />
&lt;?<br />
$d++; //ad ogni ciclo bisogna ovviamente incrementare $d<br />
}<br />
?&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&lt;?<br />
// Esattamente come il ciclo precedente costruisco la riga dei giorni del mese<br />
$d=$dati['start'];<br />
for ($i=1; $i&lt;=$dati['giorni_mese'];$i++)<br />
{<br />
if ($d=="7") $d=0;<br />
?&gt;<br />
&lt;td style="text-align:center;&lt;? if ($d=="6" || $d=="0") echo "background-color:red;"; ?&gt;"&gt;&lt;? echo $i; ?&gt;&lt;/td&gt;<br />
&lt;?<br />
$d++;<br />
}<br />
?&gt;<br />
&lt;/tr&gt;<br />
&lt;?<br />
//procedo alla prima query per estrarre i nomi delle stanze<br />
$sql_stanze="SELECT * FROM stanze ORDER BY nome";<br />
$query_stanze=@mysql_query($sql_stanze) or die (mysql_error());<br />
while ($row_stanze=mysql_fetch_array($query_stanze)) // ed inizio a ciclare questo risultato<br />
{<br />
echo "&lt;tr&gt;&lt;td class="name"&gt;".$row_stanze['nome']."&lt;/td&gt;";<br />
$startmonth=mktime(0,0,0,$dati['mese_num'],1,$dati['anno']); // mi valorizzo il timestamp del primo giorno del mese<br />
$stopmonth=mktime(0,0,0,$dati['mese_num'],$dati['giorni_mese'],$dati['anno']); // e dell'ultimo giorno del mese<br />
//estraggo quindi le prenotazioni del mese corrente per questa stanza<br />
$sql_pren="SELECT * FROM prenotazioni WHERE id_stanza='".$row_stanze['id']."' AND ((datain &lt; '$startmonth' AND dataout &gt;= '$startmonth') OR (datain &gt;='$startmonth' AND dataout &lt;= '$stopmonth') OR (datain &lt;= '$stopmonth' AND dataout &gt; '$stopmonth')) ORDER BY datain";<br />
//il sistema utilizzato è quello di controllare se vi sono prenotazioni che iniziano il mese precedente e finiscono dopo il primo giorno del mese interessato, poi se vi sono prenotazioni che iniziano e finiscono entro il mese corrente e quindi se vi sono prenotazioni che iniziano prima del fine mese corrente e finiscono nel mese successivo<br />
$query_pren=@mysql_query($sql_pren) or die (mysql_error());</p>
<p dir="auto">//recuperati questi dati inizio a salvarmi i valori interessati dentro degli array il cui indice non è altro, per unicità, che il timestamp del giorno in questione, che ad ogni ciclo incremento di  1 giorno = 86400 secondi<br />
for ($i=$startmonth;$i&lt;=$startmonth+(($dati['giorni_mese'])<em>86400);$i=$i+86400)<br />
{<br />
$stanza</em>=0;<br />
$stato*=false;<br />
$nome*=false;<br />
}<br />
//recuperati questi dati inizio a salvarmi i valori interessati dentro degli array il cui indice non è altro, per unicità, che il timestamp del giorno in questione, che ad ogni ciclo incremento di  1 giorno = 86400 secondi.</p>
<pre><code>// per poter distinguere le prenotazioni tra loro utilizzo il sistema di valorizzare cella per cella (giorno per giorno) l'array $stanza. Se il suo valore è uguale a 0 (verde) la stanza, quel giorno, è libera, se è uguale a 1 significa che è l'inizio o la fine della prenotazione, se è uguale a 2 vuol dire che la stanza è occupata per tutto il giorno, se è uguale a 3 vuol dire che quel giorno sono presenti un fine prenotazione ed un inizio prenotazione. Se il numero è maggiore (nero) significa che c'è qualcosa che non va. :)
while ($row_pren=mysql_fetch_array($query_pren))
{
    if ($row_pren['datain']&lt;$startmonth &amp;&amp; $row_pren['dataout']&gt;$startmonth) //se la prenotazione inizia il mese precedente e finisce dopo il primo giorno del mese
    {
        //estraggo il nominativo della prenotazione
        $sql_anagr="SELECT * FROM anagrafica WHERE id='".$row_pren['id_cliente']."'";
        $query_anagr=@mysql_query($sql_anagr) or die (mysql_error());
        $array_anagr=mysql_fetch_array($query_anagr);
        
        
        $q=$startmonth; //parto dal primo giorno del mese, relativo alla stanza di cui si sta eseguendo il ciclo
        $stanza[$q]=$stanza[$q]+3; 
        $stato[$q]=$row_pren['stato'];  // valorizzo lo stato prenotato o confermato
        $id[$q]=$row_pren['id']; // valorizzo l'id della prenotazione
        $nome[$q]=$array_anagr['intestazione']; //valorizzo l'anagrafica del cliente
        $in[$q]=$row_pren['datain']; //valorizzo la data inizio prenotazione
        $out[$q]=$row_pren['dataout']; //valorizzo la data fine prenotazione
        
        for ($q=$startmonth+86400;$q&lt;=$row_pren['dataout'];$q=$q+86400)
        {
            if ($q&lt;$row_pren['dataout'])
            {
                $stanza[$q]=$stanza[$q]+3;
                $stato[$q]=$row_pren['stato'];
                $id[$q]=$row_pren['id'];
                $nome[$q]=$array_anagr['intestazione'];
                $in[$q]=$row_pren['datain'];
                $out[$q]=$row_pren['dataout'];
            }
            else
            {
                $stanza[$q]=$stanza[$q]+1;
                $id[$q]=$row_pren['id'];
                $stato[$q]=$row_pren['stato'];
                $nome[$q]=$array_anagr['intestazione'];
                $in[$q]=$row_pren['datain'];
                $out[$q]=$row_pren['dataout'];
            }
        }
    }
    else if ($row_pren['datain']&gt;=$startmonth) // se la data inizio prenotazione è maggiore del primo giorno del mese
    {
        //estraggo il nominativo della prenotazione
        $sql_anagr="SELECT * FROM anagrafica WHERE id='".$row_pren['id_cliente']."'";
        $query_anagr=@mysql_query($sql_anagr) or die (mysql_error());
        $array_anagr=mysql_fetch_array($query_anagr);
        
        $dw=date('d',$row_pren['datain']); //trovo il giorno del mese della data inizio
        $dw=$startmonth+(($dw-1)*86400); // e per regolarità sommo il timestamp di inizio mese al giorno del mese di data inizio prenotazione trasformato in secondi (sotratto di 1 perché il primo giorno è già valorizzato)
        $q=$dw;
        $stanza[$q]=$stanza[$q]+1; // aumento di 1 il valore di $stanza
        $stato[$q]=$row_pren['stato'];
        $id[$q]=$row_pren['id'];
        $nome[$q]=$array_anagr['intestazione'];
        $in[$q]=$row_pren['datain'];
        $out[$q]=$row_pren['dataout'];
        // il sistema finora utilizzato, ovvero di incrementare i giorni sommando l'equivalente in secondi di un singolo giorno, va bene finché non ci si trova nei mesi in cui avviene il cambio dell'ora legale con quella solare e viceversa, ovvero ottobre e Marzo. Ma basta eseguire il controllo sulla data in questione ed eventualmente incrementare o decrementare il valore di 3600 secondi (1 ora)
        if (date("I",$row_pren['dataout'])==1 &amp;&amp; $dati['mese_num']==3) {$row_pren['dataout']=$row_pren['dataout']+3600;};
        if (date("I",$row_pren['dataout'])==0 &amp;&amp; $dati['mese_num']==10) {$row_pren['dataout']=$row_pren['dataout']-3600;};
        for ($q=($dw+86400);$q&lt;=$row_pren['dataout'];$q=$q+86400)
        {
            if ($q&lt;$row_pren['dataout'])
            {
                $stanza[$q]=$stanza[$q]+3;
                $stato[$q]=$row_pren['stato'];
                $id[$q]=$row_pren['id'];
                $nome[$q]=$array_anagr['intestazione'];
                $in[$q]=$row_pren['datain'];
                $out[$q]=$row_pren['dataout'];
            }
            else
            {
                $stanza[$q]=$stanza[$q]+1;
                $stato[$q]=$row_pren['stato'];
                $id[$q]=$row_pren['id'];
                $nome[$q]=$array_anagr['intestazione'];
                $in[$q]=$row_pren['datain'];
                $out[$q]=$row_pren['dataout'];
            }
        }
    }
    else if ($row_pren['dataout']=$startmonth) // se la data di fine prenotazione è uguale al primo giorno del mese
    {
        $q=$startmonth;
        $stanza[$q]=$stanza[$q]+1;
        $stato[$q]=$row_pren['stato'];
        $id[$q]=$row_pren['id'];
        $nome[$q]=$array_anagr['intestazione'];
        $in[$q]=$row_pren['datain'];
        $out[$q]=$row_pren['dataout'];
    }
}
</code></pre>
<p dir="auto">//a questo punto i nostri array son ben che popolati, possiamo quindi procedere alla costruzione della tabella<br />
$d=$dati['start'];</p>
<p dir="auto">for ($i=$startmonth;$i&lt;=$startmonth+(($dati['giorni_mese']-1)<em>86400);$i=$i+86400)<br />
{<br />
$vin=date('d-m-Y',$in</em>);<br />
$vout=date('d-m-Y',$out*);<br />
if ($d=="7")<br />
{<br />
$d=0;<br />
}<br />
echo "&lt;td style="text-align:center;";<br />
if ($d=="0" || $d=="6")<br />
{<br />
echo "border:1px solid <a class="plugin-hashtag-a" href="https://connect.gt/hashtags/ff020e">#ff020e</a>;"; // per i Sabati e le Domeniche metto un bordo rosso alle celle della tabella<br />
}<br />
echo ""&gt;";<br />
if ($stanza*=='0') // se il valore è uguale a zero e quindi la stanza è libera<br />
{<br />
echo "&lt;img src="image/0.png" alt="" /&gt;";<br />
}<br />
else if ($stanza*=='1') // se il valore è uguale a 1 e quindi si tratta di un inizio prenotazione o un fine prenotazione<br />
{<br />
$back=($stato*==0)?$prenotato['1']:$confermato['1']; // controllo se la prenotazione è confermata o meno</p>
<pre><code>        //nella costruzione del link dell'immagine inserisco l'id della prenotazione per recuperare questo dato quando andrò nella pagina della prenotazione e come title del link metto i dati importanti della prenotazione "Prenotazione Mario Rossi dal 01/01/2010 al 06/01/2010"
        echo "&lt;a href=\"prenotazioni.php?id=".$id*."\" title=\"Prenotazione ".$nome*." dal ".$vin." al ".$vout."\"&gt;&lt;img src=\"image/".$back."\" alt=\"\" /&gt;&lt;/a&gt;";
    }
    else if ($stanza*=='2')  // se il valore è uguale a 2 e quindi la stanza è occupata tutta la giornata
    {
        $back=($stato*==0)?$prenotato['2']:$confermato['2'];
        echo "&lt;a href=\"prenotazioni.php?id=".$id*."\" title=\"Prenotazione ".$nome*." dal ".$vin." al ".$vout."\"&gt;&lt;img src=\"image/".$back."\" alt=\"\" /&gt;&lt;/a&gt;";
    }
    else if ($stanza*=='3') // se il valore è uguale a 3 e quindi abbiamo una fine prenotazione ed un inizio prenotazione lo stesso giorno
    {
        $back=($stato*==0)?$prenotato['3']:$confermato['3'];
        echo "&lt;a href=\"prenotazioni.php?id=".$id*."\" title=\"Prenotazione ".$nome*." dal ".$vin." al ".$vout."\"&gt;&lt;img src=\"image/".$back."\" alt=\"\" /&gt;&lt;/a&gt;";
    }
    else // se il valore è superiore a 3, e significa che qualcosa non va... :)
    {
        echo "&lt;img src=\"image/black.png\" alt=\"\" /&gt;";
    }
        
echo "&lt;/td&gt;";
$d++;
</code></pre>
<p dir="auto">}<br />
?&gt;<br />
&lt;/tr&gt;<br />
&lt;?<br />
}<br />
?&gt;<br />
&lt;/table&gt;[/php]Il codice è validato XHTML 1.0 Transitional. <img src="https://connect.gt/plugins/nodebb-plugin-emoji/emoji/android/1f642.png?v=gca7n9pp8gc" class="not-responsive emoji emoji-android emoji--slightly_smiling_face" title=":)" alt="🙂" /></p>
<p dir="auto"><a href="http://demogt.netsons.org/calendario/" rel="nofollow ugc">Quì</a> potrete valutare una demo (cercate il mese di Aprile 2010) e <a href="http://download.giorgiotave.it/script/%5BSCRIPT%5Dcalendario_V_1_0.zip" rel="nofollow ugc">quì</a> scaricare lo script completo come la demo.</p>
<p dir="auto">Per quanto concerne le tabelle è inutile che posti la struttura da me creata perché sarebbe inutilizzabile dato che fa parte di una applicazione più complessa. Sommariamente, per l'utilizzo di questo script, ci devono essere:</p>
<ul>
<li>
<p dir="auto">Una tabella "anagrafica" con un "id" Auto Increment ed il campo "intestazione" dove inserire il nome e cognome del cliente</p>
</li>
<li>
<p dir="auto">Una tabella "stanze" che abbia un "id" Auto Increment ed il campo "nome" dove inserire il nome della stanza</p>
</li>
<li>
<p dir="auto">Una tabella "prenotazioni" che abbia</p>
</li>
<li>
<p dir="auto">"id" Auto Increment,</p>
</li>
<li>
<p dir="auto">un campo "id_cliente" dove inserire l'id del cliente che sta prenotando,</p>
</li>
<li>
<p dir="auto">un campo "id_stanza" dove inserire l'id della stanza prenotata,</p>
</li>
<li>
<p dir="auto">un campo "datain" dove inserire il timestamp della data inizio prenotazione</p>
</li>
<li>
<p dir="auto">un campo "dataout" dove inserire il timestamp della data fine prenotazione</p>
</li>
<li>
<p dir="auto">un campo "stato" che sarà valorizzato 0 se la prenotazione non è confermata e 1 se invece lo è</p>
</li>
</ul>
<p dir="auto">A tutto questo va poi aggiunto o modificato quanto necessario, io l'ho creato per la gestione di una struttura alberghiera ma si può benissimo adattare a qualsivoglia utilizzo similare. <img src="https://connect.gt/plugins/nodebb-plugin-emoji/emoji/android/1f609.png?v=gca7n9pp8gc" class="not-responsive emoji emoji-android emoji--wink" title=";)" alt="😉" /></p>
<p dir="auto">Spero vi sia utile, attendo comunque Vs. eventuali appunti o suggerimenti. <img src="https://connect.gt/plugins/nodebb-plugin-emoji/emoji/android/1f609.png?v=gca7n9pp8gc" class="not-responsive emoji emoji-android emoji--wink" title=";)" alt="😉" /></p>
<p dir="auto">Ciao!! <img src="https://connect.gt/plugins/nodebb-plugin-emoji/emoji/customizations/54a3bffb-5e4a-4eb8-81dc-99b2072e5d05-175.gif?v=gca7n9pp8gc" class="not-responsive emoji emoji-customizations emoji--ciauz" title=":ciauz:" alt=":ciauz:" /></p>
]]></description><link>https://connect.gt/topic/126235/script-calendario-prenotazioni</link><generator>RSS for Node</generator><lastBuildDate>Mon, 17 Aug 2026 10:40:53 GMT</lastBuildDate><atom:link href="https://connect.gt/topic/126235.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 26 Apr 2010 23:28:30 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [Script] Calendario prenotazioni on Thu, 15 Jan 2015 14:27:03 GMT]]></title><description><![CDATA[<p dir="auto">Stesso errore... non riesco a risolvere... <img src="https://connect.gt/plugins/nodebb-plugin-emoji/emoji/android/274c.png?v=gca7n9pp8gc" class="not-responsive emoji emoji-android emoji--x" title=":x:" alt="❌" />x<br />
Anzi... dopo aver modificato il campo della tabella sql da "date" a int l'errore è questo:<br />
<strong>Notice: Undefined offset: 1420326000 in C:\xampp\htdocs\ZZ - Calendario\index.php on line <em>299</em></strong></p>
]]></description><link>https://connect.gt/post/906926</link><guid isPermaLink="true">https://connect.gt/post/906926</guid><dc:creator><![CDATA[maramau79]]></dc:creator><pubDate>Thu, 15 Jan 2015 14:27:03 GMT</pubDate></item><item><title><![CDATA[Reply to [Script] Calendario prenotazioni on Tue, 14 Oct 2014 12:22:27 GMT]]></title><description><![CDATA[<p dir="auto">Ciao ho provato il tuo script in locale, copiato e incollato il codice nel forum, ma mi da questo seguente errore:</p>
<p dir="auto">**Notice: Undefined variable: in in **C:\xampp\htdocs\prenotazioneTest\index.php on line **219</p>
<p dir="auto">**Notice: Undefined variable: out in **C:\xampp\htdocs\prenotazioneTest\index.php on line **220</p>
<p dir="auto">Corrispondente</p>
<p dir="auto">************ $vin=date('d-m-Y',$in*);<br />
$vout=date('d-m-Y',$out*);</p>
<p dir="auto">Come posso risolvere?</p>
]]></description><link>https://connect.gt/post/906918</link><guid isPermaLink="true">https://connect.gt/post/906918</guid><dc:creator><![CDATA[shitan]]></dc:creator><pubDate>Tue, 14 Oct 2014 12:22:27 GMT</pubDate></item><item><title><![CDATA[Reply to [Script] Calendario prenotazioni on Mon, 19 Nov 2012 21:38:22 GMT]]></title><description><![CDATA[<p dir="auto">Ciao Leonardo e Benvenuto nel Forum GT. <img src="https://connect.gt/plugins/nodebb-plugin-emoji/emoji/android/1f642.png?v=gca7n9pp8gc" class="not-responsive emoji emoji-android emoji--slightly_smiling_face" title=":)" alt="🙂" /></p>
<p dir="auto">Ho sistemato il link per scaricare lo script. <img src="https://connect.gt/plugins/nodebb-plugin-emoji/emoji/android/1f609.png?v=gca7n9pp8gc" class="not-responsive emoji emoji-android emoji--wink" title=";)" alt="😉" /></p>
<p dir="auto"><img src="https://connect.gt/plugins/nodebb-plugin-emoji/emoji/customizations/54a3bffb-5e4a-4eb8-81dc-99b2072e5d05-175.gif?v=gca7n9pp8gc" class="not-responsive emoji emoji-customizations emoji--ciauz" title=":ciauz:" alt=":ciauz:" /></p>
]]></description><link>https://connect.gt/post/906890</link><guid isPermaLink="true">https://connect.gt/post/906890</guid><dc:creator><![CDATA[samyorn]]></dc:creator><pubDate>Mon, 19 Nov 2012 21:38:22 GMT</pubDate></item><item><title><![CDATA[Reply to [Script] Calendario prenotazioni on Fri, 16 Nov 2012 12:54:11 GMT]]></title><description><![CDATA[<p dir="auto">Salve,<br />
Ho visto lo script, ho creato le tabelle nel ma non fa scaricare lo script. Come posso scaricarlo visto che i commenti ne parlano molto bene?<br />
Grazie anticipatamente</p>
]]></description><link>https://connect.gt/post/906925</link><guid isPermaLink="true">https://connect.gt/post/906925</guid><dc:creator><![CDATA[leonardofi]]></dc:creator><pubDate>Fri, 16 Nov 2012 12:54:11 GMT</pubDate></item><item><title><![CDATA[Reply to [Script] Calendario prenotazioni on Tue, 10 Jan 2012 17:02:40 GMT]]></title><description><![CDATA[<p dir="auto">Magnifico! <img src="https://connect.gt/plugins/nodebb-plugin-emoji/emoji/android/1f609.png?v=gca7n9pp8gc" class="not-responsive emoji emoji-android emoji--wink" title=";)" alt="😉" /></p>
<p dir="auto">Buon lavoro allora. <img src="https://connect.gt/plugins/nodebb-plugin-emoji/emoji/android/1f609.png?v=gca7n9pp8gc" class="not-responsive emoji emoji-android emoji--wink" title=";)" alt="😉" /></p>
]]></description><link>https://connect.gt/post/906888</link><guid isPermaLink="true">https://connect.gt/post/906888</guid><dc:creator><![CDATA[samyorn]]></dc:creator><pubDate>Tue, 10 Jan 2012 17:02:40 GMT</pubDate></item><item><title><![CDATA[Reply to [Script] Calendario prenotazioni on Tue, 10 Jan 2012 16:16:59 GMT]]></title><description><![CDATA[<p dir="auto">Ciao Samyorn, grazie mille!!<br />
Adesso gira senza problemi <img src="https://connect.gt/plugins/nodebb-plugin-emoji/emoji/android/1f642.png?v=gca7n9pp8gc" class="not-responsive emoji emoji-android emoji--slightly_smiling_face" title=":)" alt="🙂" /></p>
]]></description><link>https://connect.gt/post/906917</link><guid isPermaLink="true">https://connect.gt/post/906917</guid><dc:creator><![CDATA[dottor.pimpernel]]></dc:creator><pubDate>Tue, 10 Jan 2012 16:16:59 GMT</pubDate></item><item><title><![CDATA[Reply to [Script] Calendario prenotazioni on Sun, 08 Jan 2012 21:11:37 GMT]]></title><description><![CDATA[<p dir="auto">Ciao Dottor_Pimpernel e benvenuto nel Forum GT. <img src="https://connect.gt/plugins/nodebb-plugin-emoji/emoji/android/1f609.png?v=gca7n9pp8gc" class="not-responsive emoji emoji-android emoji--wink" title=";)" alt="😉" /></p>
<p dir="auto">Prova a sostituire il file index.php con questo:<br />
[PHP]&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "<a href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" rel="nofollow ugc">http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd</a>"&gt;<br />
&lt;html xmlns="<a href="http://www.w3.org/1999/xhtml" rel="nofollow ugc">http://www.w3.org/1999/xhtml</a>" xml:lang="it" lang="it"&gt;<br />
&lt;head&gt;<br />
&lt;link rel="stylesheet" href="style/style.css" type="text/css" /&gt;<br />
&lt;meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /&gt;<br />
&lt;title&gt;Forum GT - Calendario&lt;/title&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;div id="contenitore_generale"&gt;<br />
&lt;div id="header"&gt;&lt;div id="testata"&gt;&lt;h1&gt;Gruppo di sviluppo del Forum GT&lt;/h1&gt;&lt;/div&gt;&lt;/div&gt;<br />
&lt;div id="demo"&gt;&lt;h2&gt;Script per creazione calendario prenotazioni.&lt;/h2&gt;&lt;/div&gt;<br />
&lt;div id="logo"&gt;<br />
&lt;a href="<a href="http://www.giorgiotave.it/forum/" rel="nofollow ugc">http://www.giorgiotave.it/forum/</a>" target="_blank"&gt;&lt;img src="<a href="http://demogt.netsons.org/calendario/image/logo.png" rel="nofollow ugc">http://demogt.netsons.org/calendario/image/logo.png</a>" alt="Logo Forum GT" title="Logo del Forum GT" /&gt;&lt;/a&gt;<br />
&lt;a href="<a href="http://samyorn.giorgiotave.it/gruppi/115-PHP-Project/" rel="nofollow ugc">http://samyorn.giorgiotave.it/gruppi/115-PHP-Project/</a>" target="_blank"&gt;&lt;img src="<a href="http://demogt.netsons.org/newsdb/news/php-mysql_project.jpg" rel="nofollow ugc">http://demogt.netsons.org/newsdb/news/php-mysql_project.jpg</a>" alt="Logo progetto PHP-MySQL" title="Logo del gruppo di sviluppo aree PHP-MySQL del Network GT" /&gt;&lt;/a&gt;<br />
&lt;/div&gt;<br />
&lt;h1&gt;Troverai dei dati gia inseriti nei mesi di Marzo-Aprile 2010. ;-)&lt;/h1&gt;<br />
&lt;?php<br />
//inseriamo i parametri di connessione al Database<br />
$db_host = "indirizzo_server_mysql";<br />
$db_user = "nomeutentemysql";<br />
$db_pass = "passwordmysql";<br />
$db_name = "nomedatabase";</p>
<p dir="auto">$connection = @mysql_connect($db_host,$db_user,$db_pass)<br />
or die ("Connessione al server non stabilita");<br />
$db = @mysql_select_db($db_name,$connection)<br />
or die ("Connessione al Db non stabilita");</p>
<p dir="auto">//Se cambio mese procedo al recupero dei dati postati.<br />
$mese="";<br />
$anno="";<br />
if (isset($_POST['mese']))<br />
{<br />
$mese=$_POST['mese'];<br />
$anno=$_POST['anno'];<br />
$time=mktime(0,0,0,$mese,1,$anno); //altrimenti mi ricavo il timestamp del primo giorno del mese richiesto<br />
}<br />
else<br />
{<br />
$time=time();<br />
}</p>
<pre><code>//utilizzo il sistema creato da PaTer in questo thread http://www.giorgiotave.it/forum/scripting-e-risorse-utili/3211-tutorial-creare-un-calendario-dinamico-php.html apportando alcune modifiche
$dati['giorni_mesi'] =  array(31, 0, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); // Array con i giorni dei mesi
$dati['mese_num'] = date("n",  $time); // Mese corrente ( numerico )
$dati['mese_text'] = date("F", $time); // Mese Corrente ( testuale )
$dati['anno'] = date("Y", $time); // Anno
$dati['start'] = date("w", mktime(0,0,0, $dati['mese_num'], 1, $dati['anno'])); // Giorno della settimana del primo giorno del mese
$dati['giorni_mesi'][1]=(date('L',$time)==0)?28:29; // calcolo giorni mese di Febbraio
$dati['giorni_mese'] = $dati['giorni_mesi'][$dati['mese_num']-1]; // Giorni del mese corrente
$dati['settimana']=array("D","L","M","M","G","V","S");
$prenotato=array("0"=&gt;"0.png","1"=&gt;"1p.png","2"=&gt;"2p.png","3"=&gt;"3p.png"); // prenotati ma non confermati avranno una colorazione gialla
$confermato=array("0"=&gt;"0.png","1"=&gt;"1c.png","2"=&gt;"2c.png","3"=&gt;"3c.png"); // confermati avranno una colorazione rossa
</code></pre>
<p dir="auto">//procedo quindi a creare due form che mi portino al mese precedente ed al mese successivo a quello attualmente visualizzato facendo attenzione al cambio di anno, nel caso si stia visualizzando il mese di Gennaio il form del mese precedente mi dovr? postare il mese 12 e l'anno corrente -1. Speculare per il mese di dicembre, il form per il mese successivo dovr? postare il mese 1 e l'anno incrementato di 1<br />
?&gt;<br />
&lt;table border="0" width="100%"&gt;<br />
&lt;tr&gt;<br />
&lt;td width="33%"&gt;&lt;form action="&lt;?php echo $_SERVER['REQUEST_URI']; ?&gt;" method="post"&gt;&lt;input type="hidden" name="mese" value="&lt;?php if ($dati['mese_num']=="1") { echo "12";} else {echo $dati['mese_num']-1;} ?&gt;" /&gt;&lt;input type="hidden" name="anno" value="&lt;?php if ($dati['mese_num']=="1"){ echo $dati['anno']-1;} else {echo $dati['anno'];}?&gt;" /&gt;&lt;input type="submit" value=" &lt; " /&gt;&lt;/form&gt;&lt;/td&gt;<br />
&lt;td width="33%"&gt;&lt;?php echo "Mese: &lt;strong&gt;".$dati['mese_text']."&lt;/strong&gt; Anno: &lt;strong&gt;".$dati['anno'] ?&gt;&lt;/strong&gt;&lt;/td&gt;<br />
&lt;td width="33%"&gt;&lt;form action="&lt;?php echo $_SERVER['REQUEST_URI']; ?&gt;" method="post"&gt;&lt;input type="hidden" name="mese" value="&lt;?php if ($dati['mese_num']=="12") { echo "1";} else {echo $dati['mese_num']+1;} ?&gt;" /&gt;&lt;input type="hidden" name="anno" value="&lt;?php if ($dati['mese_num']=="12"){ echo $dati['anno']+1;} else {echo $dati['anno'];}?&gt;" /&gt;&lt;input type="submit" value=" &gt; " /&gt;&lt;/form&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;/table&gt;<br />
&lt;table border="1"  class="calendario" align="center"&gt;<br />
&lt;caption&gt;&lt;strong&gt;Calendario&lt;/strong&gt;&lt;/caption&gt;<br />
&lt;tr&gt;<br />
&lt;td rowspan="2"&gt;Stanze&lt;/td&gt;<br />
&lt;?php<br />
// partita la tabella procedo alla costruzione delle righe di intestazione</p>
<p dir="auto">//$d servir? per verificare il ciclo dei giorni della settimana, evitando cosÏ di dover utilizzare una funzione ad ogni ciclo, basta fare un semplice controllo che una volta incrementato a 7 il valore di $d, questo riparta da 0<br />
$d=$dati['start'];     // indice della settimana del primo giorno del mese<br />
for ($i=1; $i&lt;=$dati['giorni_mese'];$i++)<br />
{<br />
if ($d=="7") $d=0;<br />
?&gt;<br />
&lt;td style="text-align:center;&lt;?php if ($d=="6" || $d=="0") echo "background-color:red;"; // se $d Ë uguale a 6 o 0 vuol dire che Ë un sabato o una domenica, quindi coloriamo di rosso questi giorni ?&gt;"&gt;&lt;?php echo $dati['settimana'][$d]; //utilizzo $d anche come indice progressivo per visualizzare il contenuto dell'array dei giorni della settimana ?&gt;&lt;/td&gt;<br />
&lt;?php<br />
$d++; //ad ogni ciclo bisogna ovviamente incrementare $d<br />
}<br />
?&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&lt;?php<br />
// Esattamente come il ciclo precedente costruisco la riga dei giorni del mese<br />
$d=$dati['start'];<br />
for ($i=1; $i&lt;=$dati['giorni_mese'];$i++)<br />
{<br />
if ($d=="7") $d=0;<br />
?&gt;<br />
&lt;td style="text-align:center;&lt;?php if ($d=="6" || $d=="0") echo "background-color:red;"; ?&gt;"&gt;&lt;?php echo $i; ?&gt;&lt;/td&gt;<br />
&lt;?php<br />
$d++;<br />
}<br />
?&gt;<br />
&lt;/tr&gt;<br />
&lt;?php<br />
//procedo alla prima query per estrarre i nomi delle stanze<br />
$sql_stanze="SELECT * FROM stanze ORDER BY nome";<br />
$query_stanze=@mysql_query($sql_stanze) or die (mysql_error());<br />
while ($row_stanze=mysql_fetch_array($query_stanze)) // ed inizio a ciclare questo risultato<br />
{<br />
echo "&lt;tr&gt;&lt;td class="name"&gt;".$row_stanze['nome']."&lt;/td&gt;";<br />
$startmonth=mktime(0,0,0,$dati['mese_num'],1,$dati['anno']); // mi valorizzo il timestamp del primo giorno del mese<br />
$stopmonth=mktime(0,0,0,$dati['mese_num'],$dati['giorni_mese'],$dati['anno']); // e dell'ultimo giorno del mese<br />
//estraggo quindi le prenotazioni del mese corrente per questa stanza<br />
$sql_pren="SELECT * FROM prenotazioni WHERE id_stanza='".$row_stanze['id']."' AND ((datain &lt; '$startmonth' AND dataout &gt;= '$startmonth') OR (datain &gt;='$startmonth' AND dataout &lt;= '$stopmonth') OR (datain &lt;= '$stopmonth' AND dataout &gt; '$stopmonth')) ORDER BY datain";<br />
//il sistema utilizzato Ë quello di controllare se vi sono prenotazioni che iniziano il mese precedente e finiscono dopo il primo giorno del mese interessato, poi se vi sono prenotazioni che iniziano e finiscono entro il mese corrente e quindi se vi sono prenotazioni che iniziano prima del fine mese corrente e finiscono nel mese successivo<br />
$query_pren=@mysql_query($sql_pren) or die (mysql_error());</p>
<p dir="auto">//recuperati questi dati inizio a salvarmi i valori interessati dentro degli array il cui indice non Ë altro, per unicit?, che il timestamp del giorno in questione, che ad ogni ciclo incremento di  1 giorno = 86400 secondi<br />
for ($i=$startmonth;$i&lt;=$startmonth+(($dati['giorni_mese'])<em>86400);$i=$i+86400)<br />
{<br />
$stanza</em>=0;<br />
$stato*=false;<br />
$nome*=false;<br />
}<br />
//recuperati questi dati inizio a salvarmi i valori interessati dentro degli array il cui indice non Ë altro, per unicit?, che il timestamp del giorno in questione, che ad ogni ciclo incremento di  1 giorno = 86400 secondi.</p>
<pre><code>// per poter distinguere le prenotazioni tra loro utilizzo il sistema di valorizzare cella per cella (giorno per giorno) l'array $stanza. Se il suo valore Ë uguale a 0 (verde) la stanza, quel giorno, Ë libera, se Ë uguale a 1 significa che Ë l'inizio o la fine della prenotazione, se Ë uguale a 2 vuol dire che la stanza Ë occupata per tutto il giorno, se Ë uguale a 3 vuol dire che quel giorno sono presenti un fine prenotazione ed un inizio prenotazione. Se il numero Ë maggiore (nero) significa che c'Ë qualcosa che non va. :)
while ($row_pren=mysql_fetch_array($query_pren))
{
    if ($row_pren['datain']&lt;$startmonth &amp;&amp; $row_pren['dataout']&gt;$startmonth) //se la prenotazione inizia il mese precedente e finisce dopo il primo giorno del mese
    {
        //estraggo il nominativo della prenotazione
        $sql_anagr="SELECT * FROM anagrafica WHERE id='".$row_pren['id_cliente']."'";
        $query_anagr=@mysql_query($sql_anagr) or die (mysql_error());
        $array_anagr=mysql_fetch_array($query_anagr);
        
        
        $q=$startmonth; //parto dal primo giorno del mese, relativo alla stanza di cui si sta eseguendo il ciclo
        $stanza[$q]=$stanza[$q]+3; 
        $stato[$q]=$row_pren['stato'];  // valorizzo lo stato prenotato o confermato
        $id[$q]=$row_pren['id']; // valorizzo l'id della prenotazione
        $nome[$q]=$array_anagr['intestazione']; //valorizzo l'anagrafica del cliente
        $in[$q]=$row_pren['datain']; //valorizzo la data inizio prenotazione
        $out[$q]=$row_pren['dataout']; //valorizzo la data fine prenotazione
        
        for ($q=$startmonth+86400;$q&lt;=$row_pren['dataout'];$q=$q+86400)
        {
            if ($q&lt;$row_pren['dataout'])
            {
                $stanza[$q]=$stanza[$q]+3;
                $stato[$q]=$row_pren['stato'];
                $id[$q]=$row_pren['id'];
                $nome[$q]=$array_anagr['intestazione'];
                $in[$q]=$row_pren['datain'];
                $out[$q]=$row_pren['dataout'];
            }
            else
            {
                $stanza[$q]=$stanza[$q]+1;
                $id[$q]=$row_pren['id'];
                $stato[$q]=$row_pren['stato'];
                $nome[$q]=$array_anagr['intestazione'];
                $in[$q]=$row_pren['datain'];
                $out[$q]=$row_pren['dataout'];
            }
        }
    }
    else if ($row_pren['datain']&gt;=$startmonth) // se la data inizio prenotazione Ë maggiore del primo giorno del mese
    {
        //estraggo il nominativo della prenotazione
        $sql_anagr="SELECT * FROM anagrafica WHERE id='".$row_pren['id_cliente']."'";
        $query_anagr=@mysql_query($sql_anagr) or die (mysql_error());
        $array_anagr=mysql_fetch_array($query_anagr);
        
        $dw=date('d',$row_pren['datain']); //trovo il giorno del mese della data inizio
        $dw=$startmonth+(($dw-1)*86400); // e per regolarit? sommo il timestamp di inizio mese al giorno del mese di data inizio prenotazione trasformato in secondi (sotratto di 1 perchÈ il primo giorno Ë gi? valorizzato)
        $q=$dw;
        $stanza[$q]=$stanza[$q]+1; // aumento di 1 il valore di $stanza
        $stato[$q]=$row_pren['stato'];
        $id[$q]=$row_pren['id'];
        $nome[$q]=$array_anagr['intestazione'];
        $in[$q]=$row_pren['datain'];
        $out[$q]=$row_pren['dataout'];
        // il sistema finora utilizzato, ovvero di incrementare i giorni sommando l'equivalente in secondi di un singolo giorno, va bene finchÈ non ci si trova nei mesi in cui avviene il cambio dell'ora legale con quella solare e viceversa, ovvero ottobre e Marzo. Ma basta eseguire il controllo sulla data in questione ed eventualmente incrementare o decrementare il valore di 3600 secondi (1 ora)
        if (date("I",$row_pren['dataout'])==1 &amp;&amp; $dati['mese_num']==3) {$row_pren['dataout']=$row_pren['dataout']+3600;};
        if (date("I",$row_pren['dataout'])==0 &amp;&amp; $dati['mese_num']==10) {$row_pren['dataout']=$row_pren['dataout']-3600;};
        for ($q=($dw+86400);$q&lt;=$row_pren['dataout'];$q=$q+86400)
        {
            if ($q&lt;$row_pren['dataout'])
            {
                $stanza[$q]=$stanza[$q]+3;
                $stato[$q]=$row_pren['stato'];
                $id[$q]=$row_pren['id'];
                $nome[$q]=$array_anagr['intestazione'];
                $in[$q]=$row_pren['datain'];
                $out[$q]=$row_pren['dataout'];
            }
            else
            {
                $stanza[$q]=$stanza[$q]+1;
                $stato[$q]=$row_pren['stato'];
                $id[$q]=$row_pren['id'];
                $nome[$q]=$array_anagr['intestazione'];
                $in[$q]=$row_pren['datain'];
                $out[$q]=$row_pren['dataout'];
            }
        }
    }
    else if ($row_pren['dataout']=$startmonth) // se la data di fine prenotazione Ë uguale al primo giorno del mese
    {
        $q=$startmonth;
        $stanza[$q]=$stanza[$q]+1;
        $stato[$q]=$row_pren['stato'];
        $id[$q]=$row_pren['id'];
        $nome[$q]=$array_anagr['intestazione'];
        $in[$q]=$row_pren['datain'];
        $out[$q]=$row_pren['dataout'];
    }
}
</code></pre>
<p dir="auto">//a questo punto i nostri array son ben che popolati, possiamo quindi procedere alla costruzione della tabella<br />
$d=$dati['start'];</p>
<p dir="auto">for ($i=$startmonth;$i&lt;=$startmonth+(($dati['giorni_mese']-1)<em>86400);$i=$i+86400)<br />
{<br />
$vin=date('d-m-Y',$in</em>);<br />
$vout=date('d-m-Y',$out*);<br />
if ($d=="7")<br />
{<br />
$d=0;<br />
}<br />
echo "&lt;td style="text-align:center;";<br />
if ($d=="0" || $d=="6")<br />
{<br />
echo "border:1px solid <a class="plugin-hashtag-a" href="https://connect.gt/hashtags/ff020e">#ff020e</a>;"; // per i Sabati e le Domeniche metto un bordo rosso alle celle della tabella<br />
}<br />
echo ""&gt;";<br />
if ($stanza*=='0') // se il valore Ë uguale a zero e quindi la stanza Ë libera<br />
{<br />
echo "&lt;img src="image/0.png" alt="" /&gt;";<br />
}<br />
else if ($stanza*=='1') // se il valore Ë uguale a 1 e quindi si tratta di un inizio prenotazione o un fine prenotazione<br />
{<br />
$back=($stato*==0)?$prenotato['1']:$confermato['1']; // controllo se la prenotazione Ë confermata o meno</p>
<pre><code>        //nella costruzione del link dell'immagine inserisco l'id della prenotazione per recuperare questo dato quando andrÚ nella pagina della prenotazione e come title del link metto i dati importanti della prenotazione "Prenotazione Mario Rossi dal 01/01/2010 al 06/01/2010"
        echo "&lt;a href=\"prenotazioni.php?id=".$id*."\" title=\"Prenotazione ".$nome*." dal ".$vin." al ".$vout."\"&gt;&lt;img src=\"image/".$back."\" alt=\"\" /&gt;&lt;/a&gt;";
    }
    else if ($stanza*=='2')  // se il valore Ë uguale a 2 e quindi la stanza Ë occupata tutta la giornata
    {
        $back=($stato*==0)?$prenotato['2']:$confermato['2'];
        echo "&lt;a href=\"prenotazioni.php?id=".$id*."\" title=\"Prenotazione ".$nome*." dal ".$vin." al ".$vout."\"&gt;&lt;img src=\"image/".$back."\" alt=\"\" /&gt;&lt;/a&gt;";
    }
    else if ($stanza*=='3') // se il valore Ë uguale a 3 e quindi abbiamo una fine prenotazione ed un inizio prenotazione lo stesso giorno
    {
        $back=($stato*==0)?$prenotato['3']:$confermato['3'];
        echo "&lt;a href=\"prenotazioni.php?id=".$id*."\" title=\"Prenotazione ".$nome*." dal ".$vin." al ".$vout."\"&gt;&lt;img src=\"image/".$back."\" alt=\"\" /&gt;&lt;/a&gt;";
    }
    else // se il valore Ë superiore a 3, e significa che qualcosa non va... :)
    {
        echo "&lt;img src=\"image/black.png\" alt=\"\" /&gt;";
    }
        
echo "&lt;/td&gt;";
$d++;
</code></pre>
<p dir="auto">}<br />
?&gt;<br />
&lt;/tr&gt;<br />
&lt;?php<br />
}<br />
?&gt;<br />
&lt;/table&gt;<br />
&lt;div id="footer"&gt;Special thanks to: &lt;a href="<a href="http://samyorn.giorgiotave.it" rel="nofollow ugc">http://samyorn.giorgiotave.it</a>" target="_blank"&gt;Samyorn&lt;/a&gt;.&lt;/div&gt;<br />
&lt;/div&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;[/PHP]</p>
<p dir="auto">Con la modifica fatta alle righe 32 e 33 dovrebbe eliminarti gli E_NOTICE, per il resto credo che gli davano fastidio gli short-tag <strong>&lt;?</strong> che nelle ultime versioni sono ritenuti obsoleti e dovresti attivarli tu manualmente, ma meglio evitare. <img src="https://connect.gt/plugins/nodebb-plugin-emoji/emoji/android/1f609.png?v=gca7n9pp8gc" class="not-responsive emoji emoji-android emoji--wink" title=";)" alt="😉" /></p>
<p dir="auto">Non ho testato, facci sapere se funziona. <img src="https://connect.gt/plugins/nodebb-plugin-emoji/emoji/android/1f609.png?v=gca7n9pp8gc" class="not-responsive emoji emoji-android emoji--wink" title=";)" alt="😉" /></p>
<p dir="auto"><img src="https://connect.gt/plugins/nodebb-plugin-emoji/emoji/customizations/54a3bffb-5e4a-4eb8-81dc-99b2072e5d05-175.gif?v=gca7n9pp8gc" class="not-responsive emoji emoji-customizations emoji--ciauz" title=":ciauz:" alt=":ciauz:" /></p>
]]></description><link>https://connect.gt/post/906884</link><guid isPermaLink="true">https://connect.gt/post/906884</guid><dc:creator><![CDATA[samyorn]]></dc:creator><pubDate>Sun, 08 Jan 2012 21:11:37 GMT</pubDate></item><item><title><![CDATA[Reply to [Script] Calendario prenotazioni on Sat, 07 Jan 2012 18:30:14 GMT]]></title><description><![CDATA[<p dir="auto">Ciao sono nuovo del forum!<br />
Ho trovato questo forum proprio perchè stavo cercando uno script come questo da utilizzare per un esame di base di dati. E questo è perfetto!:)<br />
Premetto che sul php/sql non ho molta esperienza e mi sto avvicinando adesso proprio per motivi di studio... per cui portate pazienza se scrivo boiate o chiedo cose ovvie... <img src="https://connect.gt/plugins/nodebb-plugin-emoji/emoji/android/1f604.png?v=gca7n9pp8gc" class="not-responsive emoji emoji-android emoji--smile" title=":D" alt="😄" /></p>
<p dir="auto">Ho provato a lanciare lo script dall'archivio linkato in prima pagina ed utilizzando come prova il DB postato nel dump precedente, ma invece che girare liscio mi ritorna:</p>
<p dir="auto">Notice: Undefined index: mese in C:\Program Files (x86)\EasyPHP-5.3.8.1\www\calendar\index.php on line 32</p>
<p dir="auto">Notice: Undefined index: anno in C:\Program Files (x86)\EasyPHP-5.3.8.1\www\calendar\index.php on line 33</p>
<p dir="auto">e poi diseguito mi scrive come testo il codice dalla linea 97 circa fino alla fine...</p>
<p dir="auto">Il collegamento al DB avviene in maniera corretta (passa i controlli iniziali), probabilmente è una stupidaggine, ma non riesco proprio a venirne a capo...:x</p>
]]></description><link>https://connect.gt/post/906915</link><guid isPermaLink="true">https://connect.gt/post/906915</guid><dc:creator><![CDATA[dottor.pimpernel]]></dc:creator><pubDate>Sat, 07 Jan 2012 18:30:14 GMT</pubDate></item><item><title><![CDATA[Reply to [Script] Calendario prenotazioni on Sat, 03 Dec 2011 13:21:55 GMT]]></title><description><![CDATA[<p dir="auto">Quì il dump del database della demo:</p>
<pre><code>

--
-- Struttura della tabella `anagrafica`
--

CREATE TABLE IF NOT EXISTS `anagrafica` (
  `id` int(100) NOT NULL AUTO_INCREMENT,
  `intestazione` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

--
-- Dump dei dati per la tabella `anagrafica`
--

INSERT INTO `anagrafica` (`id`, `intestazione`) VALUES
(1, 'Samyorn'),
(2, 'Forum GT');

-- --------------------------------------------------------


--
-- Struttura della tabella `prenotazioni`
--

CREATE TABLE IF NOT EXISTS `prenotazioni` (
  `id` int(255) NOT NULL AUTO_INCREMENT,
  `id_cliente` int(11) NOT NULL,
  `id_stanza` int(11) NOT NULL,
  `datain` int(11) NOT NULL,
  `dataout` int(11) NOT NULL,
  `stato` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=18 ;

--
-- Dump dei dati per la tabella `prenotazioni`
--

INSERT INTO `prenotazioni` (`id`, `id_cliente`, `id_stanza`, `datain`, `dataout`, `stato`) VALUES
(1, 1, 2, 1271109600, 1272492000, 1),
(2, 2, 4, 1267052400, 1267398000, 0),
(3, 1, 6, 1269986400, 1270159200, 1),
(4, 1, 6, 1269126000, 1269986400, 0),
(5, 2, 2, 1267398000, 1268434800, 0),
(6, 1, 9, 1267743600, 1268866800, 1),
(7, 1, 5, 1271541600, 1272578400, 1),
(8, 2, 4, 1267743600, 1268866800, 1),
(9, 1, 5, 1270677600, 1271541600, 0),
(10, 2, 6, 1270504800, 1270850400, 1),
(11, 1, 8, 1270850400, 1271628000, 0),
(12, 2, 9, 1272060000, 1272751200, 0),
(13, 1, 4, 1287525600, 1288476000, 1),
(14, 2, 7, 1285884000, 1287180000, 0),
(15, 1, 3, 1292022000, 1292108400, 1),
(16, 2, 7, 1292108400, 1292799600, 0),
(17, 1, 3, 1293145200, 1293922800, 1);

-- --------------------------------------------------------

--
-- Struttura della tabella `stanze`
--

CREATE TABLE IF NOT EXISTS `stanze` (
  `id` int(100) NOT NULL AUTO_INCREMENT,
  `nome` varchar(100) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `nome` (`nome`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=10 ;

--
-- Dump dei dati per la tabella `stanze`
--

INSERT INTO `stanze` (`id`, `nome`) VALUES
(1, 'Stanza1'),
(2, 'Stanza2'),
(3, 'Stanza3'),
(4, 'Stanza4'),
(5, 'Stanza5'),
(6, 'Stanza6'),
(7, 'Stanza7'),
(8, 'Stanza8'),
(9, 'Stanza9');

-- --------------------------------------------------------
</code></pre>
<p dir="auto">Spero ti sia utile. <img src="https://connect.gt/plugins/nodebb-plugin-emoji/emoji/customizations/54a3bffb-5e4a-4eb8-81dc-99b2072e5d05-175.gif?v=gca7n9pp8gc" class="not-responsive emoji emoji-customizations emoji--ciauz" title=":ciauz:" alt=":ciauz:" /></p>
]]></description><link>https://connect.gt/post/906891</link><guid isPermaLink="true">https://connect.gt/post/906891</guid><dc:creator><![CDATA[samyorn]]></dc:creator><pubDate>Sat, 03 Dec 2011 13:21:55 GMT</pubDate></item><item><title><![CDATA[Reply to [Script] Calendario prenotazioni on Fri, 02 Dec 2011 22:24:32 GMT]]></title><description><![CDATA[<p dir="auto">Ciao Neo996sps,<br />
la struttura è molto banale, ti riporto quanto indicato nel primo post. <img src="https://connect.gt/plugins/nodebb-plugin-emoji/emoji/android/1f609.png?v=gca7n9pp8gc" class="not-responsive emoji emoji-android emoji--wink" title=";)" alt="😉" /><br />
<a class="plugin-mentions-user plugin-mentions-a" href="https://connect.gt/uid/23382">@Samyorn</a> said:</p>
<blockquote>
<p dir="auto">Per quanto concerne le tabelle è inutile che posti la struttura da me creata perché sarebbe inutilizzabile dato che fa parte di una applicazione più complessa. Sommariamente, per l'utilizzo di questo script, ci devono essere:</p>
</blockquote>
<ul>
<li>
<p dir="auto">Una tabella "anagrafica" con un "id" Auto Increment ed il campo "intestazione" dove inserire il nome e cognome del cliente</p>
</li>
<li>
<p dir="auto">Una tabella "stanze" che abbia un "id" Auto Increment ed il campo "nome" dove inserire il nome della stanza</p>
</li>
<li>
<p dir="auto">Una tabella "prenotazioni" che abbia</p>
</li>
<li>
<p dir="auto">"id" Auto Increment,</p>
</li>
<li>
<p dir="auto">un campo "id_cliente" dove inserire l'id del cliente che sta prenotando,</p>
</li>
<li>
<p dir="auto">un campo "id_stanza" dove inserire l'id della stanza prenotata,</p>
</li>
<li>
<p dir="auto">un campo "datain" dove inserire il timestamp della data inizio prenotazione</p>
</li>
<li>
<p dir="auto">un campo "dataout" dove inserire il timestamp della data fine prenotazione</p>
</li>
<li>
<p dir="auto">un campo "stato" che sarà valorizzato 0 se la prenotazione non è confermata e 1 se invece lo è</p>
</li>
</ul>
]]></description><link>https://connect.gt/post/906887</link><guid isPermaLink="true">https://connect.gt/post/906887</guid><dc:creator><![CDATA[samyorn]]></dc:creator><pubDate>Fri, 02 Dec 2011 22:24:32 GMT</pubDate></item><item><title><![CDATA[Reply to [Script] Calendario prenotazioni on Fri, 02 Dec 2011 13:13:24 GMT]]></title><description><![CDATA[<p dir="auto">Ciao,</p>
<p dir="auto">io ancora non riesco ad adattare lo script alle mie esigenze. Si può avere il dump del database che sfrutta la demo del primo post?</p>
]]></description><link>https://connect.gt/post/906913</link><guid isPermaLink="true">https://connect.gt/post/906913</guid><dc:creator><![CDATA[neo996sps]]></dc:creator><pubDate>Fri, 02 Dec 2011 13:13:24 GMT</pubDate></item><item><title><![CDATA[Reply to [Script] Calendario prenotazioni on Tue, 01 Nov 2011 22:40:55 GMT]]></title><description><![CDATA[<p dir="auto">Ciao a tutti,<br />
intanto mi scuso per il ritardo nel rispondervi, ho avuto un po' di mesi  abbastanza incasinati. <img src="https://connect.gt/plugins/nodebb-plugin-emoji/emoji/android/1f609.png?v=gca7n9pp8gc" class="not-responsive emoji emoji-android emoji--wink" title=";)" alt="😉" /></p>
<p dir="auto">Vediamo se possiamo risolvere qualche problema.</p>
<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="https://connect.gt/uid/55798"><a class="plugin-mentions-user plugin-mentions-a" href="https://connect.gt/uid/55798">@creatorweb</a></a> said:</p>
<blockquote></blockquote>
<p dir="auto">Chi sa dirmi perchè la prima data prenotata mi si evidenzia mentre l'ultima rimane uguale alle date di mezzo?<br />
Ciao Creatorweb. <img src="https://connect.gt/plugins/nodebb-plugin-emoji/emoji/android/1f609.png?v=gca7n9pp8gc" class="not-responsive emoji emoji-android emoji--wink" title=";)" alt="😉" /><br />
Prova a fare un vardump dell'array in questione e verifica che combaci con il timestamp della data di check-out. Ad occhio sembra che sia maggiore quindi lo interpreta come "giorno di mezzo". Se è solo un caso, potresti postare la data interessata? Se è per tutte le casistiche c'è qualcosa che non va, come vedi nella demo non crea alcun problema.<br />
<a class="plugin-mentions-user plugin-mentions-a" href="https://connect.gt/uid/55798"><a class="plugin-mentions-user plugin-mentions-a" href="https://connect.gt/uid/55798">@creatorweb</a></a> said:</p>
<blockquote>
<p dir="auto">Inoltre vorrei poter cliccare sul calendario direttamente per poter inserire la prenotazione. QUalche idea?<br />
grazie<br />
Personalmente, esattamente come è stato inserito il link per i periodi prenotati, quindi basta che vedi lo script di costruzione, mi linko dalle caselle in verde alla pagina di inserimento prenotazione portandomi dietro il timestamp del giorno dove ho cliccato e l'id della stanza, così mi trovo già due campi compilati. <img src="https://connect.gt/plugins/nodebb-plugin-emoji/emoji/android/1f642.png?v=gca7n9pp8gc" class="not-responsive emoji emoji-android emoji--slightly_smiling_face" title=":)" alt="🙂" /></p>
</blockquote>
<p dir="auto">P.S. Grazie per i Mesi in Italiano <img src="https://connect.gt/plugins/nodebb-plugin-emoji/emoji/android/1f609.png?v=gca7n9pp8gc" class="not-responsive emoji emoji-android emoji--wink" title=";)" alt="😉" /><br />
<a class="plugin-mentions-user plugin-mentions-a" href="https://connect.gt/uid/79915">@Nemo81</a> said:</p>
<blockquote>
<p dir="auto">Ciao a tutti,</p>
</blockquote>
<p dir="auto">ho scaricato questo script e lo trovo fantastico. Sarebbe possibile avere la struttura delle tabelle interessate?<br />
Grazie Nemo81. <img src="https://connect.gt/plugins/nodebb-plugin-emoji/emoji/android/1f642.png?v=gca7n9pp8gc" class="not-responsive emoji emoji-android emoji--slightly_smiling_face" title=":)" alt="🙂" /></p>
<p dir="auto">Nel primo post trovi la struttura base delle tabelle da creare per l'utilizzo dello script. <img src="https://connect.gt/plugins/nodebb-plugin-emoji/emoji/android/1f609.png?v=gca7n9pp8gc" class="not-responsive emoji emoji-android emoji--wink" title=";)" alt="😉" /><br />
<a class="plugin-mentions-user plugin-mentions-a" href="https://connect.gt/uid/76390">@maripas</a> said:</p>
<blockquote>
<p dir="auto">buon dì,<br />
sono contentissimo di aver trovato il tuo script , molto utile per il mo progetto, l'unico problema che riscontro è che non mi cambia i colori nelle celle quando inserisco le date  datain/dataout. Campo mysql(tipo datatime), Es in 2011-08-20 out 2011-08-18, nel form delle prenotazioni le celle mi rimangono tutte verdi, è cone se non riconoscesse le date inserite sarei molto grato se mi potessi aiutare a risolverlo.:x<br />
complimenti per lo script<br />
Ciao maripas. <img src="https://connect.gt/plugins/nodebb-plugin-emoji/emoji/android/1f642.png?v=gca7n9pp8gc" class="not-responsive emoji emoji-android emoji--slightly_smiling_face" title=":)" alt="🙂" /><br />
L'intero script è sviluppato con date in formato timestamp, come vedi scritto anche nel primo post, pertanto non potrai mai trovar corrispondenza tra l'indice dell'array (in timestamp 1313020800) ed il valore della data (in datetime 2011-08-20). <img src="https://connect.gt/plugins/nodebb-plugin-emoji/emoji/android/1f609.png?v=gca7n9pp8gc" class="not-responsive emoji emoji-android emoji--wink" title=";)" alt="😉" /></p>
</blockquote>
<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="https://connect.gt/uid/79980">@Neo996sps</a> said:</p>
<blockquote>
<p dir="auto">Io però lo vorrei adattare alla mia situazione: quella di un autonoleggio. A differenza del caso dell'albergo (in cui al posto delle stanze ho le auto) non so come fare per adattare il mio database mysql allo script.<br />
Ciao Neo996sps. <img src="https://connect.gt/plugins/nodebb-plugin-emoji/emoji/android/1f642.png?v=gca7n9pp8gc" class="not-responsive emoji emoji-android emoji--slightly_smiling_face" title=":)" alt="🙂" /></p>
</blockquote>
<p dir="auto">La struttura di base non cambia, diciamo, anche se nel caso di noleggio hai dei controlli in più da fare.<br />
Mentre in una struttura alberghiera i check-out si fanno entro un certo orario (supponiamo le 11) ed i check-in dopo almeno un'ora (supponiamo le 12), nel caso dell'autonoleggio queste certezze non ci sono, quindi dovrai inserire dei controlli specifici sugli orari, almeno nei giorni in cui ti si accavalla un out ed un in per la stessa macchina. Il controllo lo immetterei all'atto dell'inserimento della nuova prenotazione.<br />
Fantastico sarebbe inserire dei controlli Ajax che alla selezione di macchina data uscita e data rientro ti dica nell'immediato se ti stai  accavallando ad altre prenotazioni o meno e se hai, o meno, problemi sull'orario di uno dei due giorni rispetto ad altre prenotazioni. Esempio ti spunti una nota: <em>La vettura AA000AA giorno xx-xx-xxxx rientra dal noleggio alle ore 15.00</em>, cosi sai che quella macchina non potrai di certo noleggiarla per orari precedenti e forse neanche successivi conoscendo i clienti <img src="https://connect.gt/plugins/nodebb-plugin-emoji/emoji/android/1f604.png?v=gca7n9pp8gc" class="not-responsive emoji emoji-android emoji--smile" title=":D" alt="😄" /> ma queste sono considerazioni che deve fare l'essere umano almenocché non si stabilisca che di default, sempre a mo di esempio, una macchina non è disponibile prima di 2 ore successive al rientro previsto dal noleggio precedente così prevedi il ritardo del cliente e gli eventuali espletamenti di lavaggio, refuelling ed altro. <img src="https://connect.gt/plugins/nodebb-plugin-emoji/emoji/android/1f609.png?v=gca7n9pp8gc" class="not-responsive emoji emoji-android emoji--wink" title=";)" alt="😉" /><br />
Ma se manca Ajax gli stessi controlli si possono fare anche tramite PHP, ma sarà meno figo <img src="https://connect.gt/plugins/nodebb-plugin-emoji/emoji/customizations/1dfce77e-6546-41fc-8208-573e5e3f9593-figo.gif?v=gca7n9pp8gc" class="not-responsive emoji emoji-customizations emoji--figo2" title=":figo2:" alt=":figo2:" /></p>
<p dir="auto"><img src="https://connect.gt/plugins/nodebb-plugin-emoji/emoji/android/1f604.png?v=gca7n9pp8gc" class="not-responsive emoji emoji-android emoji--smile" title=":D" alt="😄" /></p>
<p dir="auto">Spero di esservi stato d'aiuto.<br />
A presto <img src="https://connect.gt/plugins/nodebb-plugin-emoji/emoji/customizations/54a3bffb-5e4a-4eb8-81dc-99b2072e5d05-175.gif?v=gca7n9pp8gc" class="not-responsive emoji emoji-customizations emoji--ciauz" title=":ciauz:" alt=":ciauz:" /></p>
]]></description><link>https://connect.gt/post/906882</link><guid isPermaLink="true">https://connect.gt/post/906882</guid><dc:creator><![CDATA[samyorn]]></dc:creator><pubDate>Tue, 01 Nov 2011 22:40:55 GMT</pubDate></item><item><title><![CDATA[Reply to [Script] Calendario prenotazioni on Mon, 22 Aug 2011 07:53:55 GMT]]></title><description><![CDATA[<p dir="auto">Ciao a tutti,</p>
<p dir="auto">sono un nuovo iscritto e ho un problema con lo script oggetto di questo post. Premetto che ho scaricato il file zip e l'ho testato trovandolo altamente funzionale.</p>
<p dir="auto">Io però lo vorrei adattare alla mia situazione: quella di un autonoleggio. A differenza del caso dell'albergo (in cui al posto delle stanze ho le auto) non so come fare per adattare il mio database mysql allo script.</p>
<p dir="auto">Questo è il dump relativo alle mie tabelle:</p>
<p dir="auto">[PHP]<br />
TABELLA NOLEGGIO</p>
<p dir="auto">CREATE TABLE IF NOT EXISTS <code>noleggio</code> (<br />
<code>contratto</code> bigint(50) NOT NULL auto_increment,<br />
<code>data_contratto</code> date NOT NULL,<br />
<code>data_inizio</code> date NOT NULL,<br />
<code>data_fine</code> date NOT NULL,<br />
<code>cliente</code> varchar(255) NOT NULL,<br />
<code>flotta</code> varchar(255) NOT NULL,<br />
<code>conducenti</code> text,<br />
<code>costo_giornaliero</code> decimal(10,2) NOT NULL,<br />
<code>costo_totale</code> decimal(10,2) NOT NULL,<br />
<code>sanzione_giornaliera</code> decimal(10,2) NOT NULL,<br />
<code>giorni_totale</code> varchar(5) NOT NULL,<br />
PRIMARY KEY  (<code>contratto</code>)<br />
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;</p>
<p dir="auto">TABELLA FLOTTA</p>
<p dir="auto">CREATE TABLE IF NOT EXISTS <code>flotta</code> (<br />
<code>id</code> bigint(50) NOT NULL auto_increment,<br />
<code>targa</code> varchar(7) default NULL,<br />
<code>telaio</code> varchar(255) default NULL,<br />
<code>modello</code> varchar(150) default NULL,<br />
<code>versione</code> varchar(255) default NULL,<br />
<code>colore</code> varchar(100) default NULL,<br />
<code>lungo_periodo</code> tinyint(1) default NULL,<br />
<code>km</code> varchar(10) default NULL,<br />
<code>carburante</code> varchar(20) default NULL,<br />
<code>kw</code> varchar(10) default NULL,<br />
<code>cv</code> varchar(10) default NULL,<br />
<code>cilindrata</code> varchar(10) default NULL,<br />
<code>data_immatricolazione</code> varchar(10) default NULL,<br />
<code>categoria</code> varchar(255) NOT NULL,<br />
PRIMARY KEY  (<code>id</code>),<br />
UNIQUE KEY <code>telaio</code> (<code>telaio</code>),<br />
UNIQUE KEY <code>targa</code> (<code>targa</code>)<br />
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;</p>
<p dir="auto">TABELLA CLIENTI</p>
<p dir="auto">CREATE TABLE IF NOT EXISTS <code>clienti</code> (<br />
<code>id</code> bigint(50) NOT NULL auto_increment,<br />
<code>ragione_sociale</code> varchar(255) NOT NULL,<br />
<code>via</code> varchar(255) NOT NULL,<br />
<code>numero</code> varchar(5) NOT NULL,<br />
<code>cap</code> varchar(5) NOT NULL,<br />
<code>citta</code> varchar(255) NOT NULL,<br />
<code>provincia</code> varchar(5) NOT NULL,<br />
<code>cellulare</code> varchar(15) NOT NULL,<br />
<code>email</code> varchar(255) NOT NULL,<br />
<code>partita_iva</code> varchar(15) NOT NULL,<br />
<code>codice_fiscale</code> varchar(15) NOT NULL,<br />
<code>pagamento</code> varchar(255) default NULL,<br />
PRIMARY KEY  (<code>id</code>)<br />
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;<br />
[/PHP]</p>
<p dir="auto">Da notare che non ho una tabella prenotazioni e quindi non so come poter adattare il tutto al mio caso.</p>
<p dir="auto">Mi sapete dare una traccia?</p>
]]></description><link>https://connect.gt/post/906912</link><guid isPermaLink="true">https://connect.gt/post/906912</guid><dc:creator><![CDATA[neo996sps]]></dc:creator><pubDate>Mon, 22 Aug 2011 07:53:55 GMT</pubDate></item><item><title><![CDATA[Reply to [Script] Calendario prenotazioni on Sat, 20 Aug 2011 10:51:49 GMT]]></title><description><![CDATA[<p dir="auto">buon dì,<br />
sono contentissimo di aver trovato il tuo script , molto utile per il mo progetto, l'unico problema che riscontro è che non mi cambia i colori nelle celle quando inserisco le date  datain/dataout. Campo mysql(tipo datatime), Es in 2011-08-20 out 2011-08-18, nel form delle prenotazioni le celle mi rimangono tutte verdi, è cone se non riconoscesse le date inserite sarei molto grato se mi potessi aiutare a risolverlo.:x<br />
complimenti per lo script</p>
]]></description><link>https://connect.gt/post/906902</link><guid isPermaLink="true">https://connect.gt/post/906902</guid><dc:creator><![CDATA[maripas]]></dc:creator><pubDate>Sat, 20 Aug 2011 10:51:49 GMT</pubDate></item><item><title><![CDATA[Reply to [Script] Calendario prenotazioni on Fri, 19 Aug 2011 13:41:14 GMT]]></title><description><![CDATA[<p dir="auto">Ciao a tutti,</p>
<p dir="auto">ho scaricato questo script e lo trovo fantastico. Sarebbe possibile avere la struttura delle tabelle interessate?</p>
]]></description><link>https://connect.gt/post/906903</link><guid isPermaLink="true">https://connect.gt/post/906903</guid><dc:creator><![CDATA[nemo81]]></dc:creator><pubDate>Fri, 19 Aug 2011 13:41:14 GMT</pubDate></item><item><title><![CDATA[Reply to [Script] Calendario prenotazioni on Tue, 07 Jun 2011 23:14:54 GMT]]></title><description><![CDATA[<p dir="auto">$mesi["January"]="Gennaio";<br />
$mesi["February"]="Febbraio";<br />
$mesi["March"]="Marzo";<br />
$mesi["April"]="Aprile";<br />
$mesi["May"]="Maggio";<br />
$mesi["June"]="Giugno";<br />
$mesi["July"]="Luglio";<br />
$mesi["August"]="Agosto";<br />
$mesi["September"]="Settembre";<br />
$mesi["October"]="Ottobre";<br />
$mesi["November"]="Novembre";<br />
$mesi["December"]="Dicembre";</p>
<p dir="auto">$dati['mese_text'] = $mesi[date("F", $time)];</p>
<p dir="auto">a qualcuno magari poteva servire avere i mesi in italiano.<br />
Chi sa dirmi perchè la prima data prenotata mi si evidenzia mentre l'ultima rimane uguale alle date di mezzo?<br />
Inoltre vorrei poter cliccare sul calendario direttamente per poter inserire la prenotazione. QUalche idea?<br />
grazie</p>
]]></description><link>https://connect.gt/post/906897</link><guid isPermaLink="true">https://connect.gt/post/906897</guid><dc:creator><![CDATA[creatorweb]]></dc:creator><pubDate>Tue, 07 Jun 2011 23:14:54 GMT</pubDate></item><item><title><![CDATA[Reply to [Script] Calendario prenotazioni on Mon, 10 Jan 2011 21:22:30 GMT]]></title><description><![CDATA[<p dir="auto">Grazie Aleami77. <img src="https://connect.gt/plugins/nodebb-plugin-emoji/emoji/android/1f642.png?v=gca7n9pp8gc" class="not-responsive emoji emoji-android emoji--slightly_smiling_face" title=":)" alt="🙂" /></p>
<p dir="auto">Sarà sicuramente utile. <img src="https://connect.gt/plugins/nodebb-plugin-emoji/emoji/android/1f609.png?v=gca7n9pp8gc" class="not-responsive emoji emoji-android emoji--wink" title=";)" alt="😉" /></p>
]]></description><link>https://connect.gt/post/906889</link><guid isPermaLink="true">https://connect.gt/post/906889</guid><dc:creator><![CDATA[samyorn]]></dc:creator><pubDate>Mon, 10 Jan 2011 21:22:30 GMT</pubDate></item><item><title><![CDATA[Reply to [Script] Calendario prenotazioni on Thu, 06 Jan 2011 14:13:41 GMT]]></title><description><![CDATA[<p dir="auto">Ti ringrazio per l'ottimo lavoro....da diverso tempo stavo elaborando una soluzione per fare questo planning per il mio software e sembra calato apposta sulle mie tabelle.</p>
<p dir="auto">Io ho fatto solo una modifica alla sql per gestire sia gli ospiti in casa che le prenotazioni facendo una union ed ho messo una funzione di modifca al campo in e out avendo messo d'appertutto nel mio db i campi come date e non timestamp.</p>
<p dir="auto">Ve la invio...chissa che non serva a qualcuno!!!</p>
<p dir="auto">SELECT *<br />
FROM (<br />
(<br />
SELECT <code>arrivi</code>.<code>id_ospiti</code> , <code>arrivi</code>.<code>id_prenotazioni</code> , <code>arrivi</code>.<code>id_arrivo</code> , <code>arrivi</code>.<code>stato</code> , <code>arrivi</code>.<code>tipo_camera0</code> , <code>arrivi</code>.<code>id_camera</code> , <code>arrivi</code>.<code>id_per_tipo_ospite</code> , <code>arrivi</code>.<code>tipo_ospite</code> , UNIX_TIMESTAMP( <code>arrivi</code>.<code>check_in</code> ) AS <code>check_in</code> , UNIX_TIMESTAMP( <code>arrivi</code>.<code>check_out</code> ) AS <code>check_out</code> , <code>arrivi</code>.<code>n_giorni</code><br />
FROM <code>arrivi</code><br />
WHERE <code>arrivi</code>.<code>id_camera</code> ='".$row_stanze['id_stanza']."'<br />
)<br />
UNION (<br />
SELECT <code>prenotazioni</code>.<code>id_ospiti</code> , <code>prenotazioni</code>.<code>id_prenotazioni</code> , <code>prenotazioni</code>.<code>id_arrivo</code> , <code>prenotazioni</code>.<code>stato</code> , <code>prenotazioni</code>.<code>tipo_camera0</code> , <code>prenotazioni</code>.<code>id_camera</code> , <code>prenotazioni</code>.<code>id_per_tipo_ospite</code> , <code>prenotazioni</code>.<code>tipo_ospite</code> , UNIX_TIMESTAMP( <code>prenotazioni</code>.<code>check_in</code> ) AS <code>check_in</code> , UNIX_TIMESTAMP( <code>prenotazioni</code>.<code>check_out</code> ) AS <code>check_out</code> , <code>prenotazioni</code>.<code>n_giorni</code><br />
FROM <code>prenotazioni</code><br />
WHERE <code>prenotazioni</code>.<code>id_camera</code> ='".$row_stanze['id_stanza']."'<br />
)<br />
) AS Tabella<br />
WHERE ((check_in &lt; '$startmonth' AND check_out &gt;= '$startmonth') OR (check_in &gt;='$startmonth' AND check_out &lt;= '$stopmonth') OR (check_in &lt;= '$stopmonth' AND check_out &gt; '$stopmonth')) GROUP BY Tabella.id_per_tipo_ospite";</p>
]]></description><link>https://connect.gt/post/906901</link><guid isPermaLink="true">https://connect.gt/post/906901</guid><dc:creator><![CDATA[aleami77]]></dc:creator><pubDate>Thu, 06 Jan 2011 14:13:41 GMT</pubDate></item><item><title><![CDATA[Reply to [Script] Calendario prenotazioni on Mon, 04 Oct 2010 18:28:35 GMT]]></title><description><![CDATA[<p dir="auto">Bene così, buon lavoro anche a te. <img src="https://connect.gt/plugins/nodebb-plugin-emoji/emoji/android/1f609.png?v=gca7n9pp8gc" class="not-responsive emoji emoji-android emoji--wink" title=";)" alt="😉" /></p>
]]></description><link>https://connect.gt/post/906886</link><guid isPermaLink="true">https://connect.gt/post/906886</guid><dc:creator><![CDATA[samyorn]]></dc:creator><pubDate>Mon, 04 Oct 2010 18:28:35 GMT</pubDate></item><item><title><![CDATA[Reply to [Script] Calendario prenotazioni on Mon, 04 Oct 2010 17:36:56 GMT]]></title><description><![CDATA[<p dir="auto">Si ho risolto grazie era un problema con il mysql.</p>
<p dir="auto">Saluti, buon lavoro.</p>
]]></description><link>https://connect.gt/post/906900</link><guid isPermaLink="true">https://connect.gt/post/906900</guid><dc:creator><![CDATA[nerkyos]]></dc:creator><pubDate>Mon, 04 Oct 2010 17:36:56 GMT</pubDate></item><item><title><![CDATA[Reply to [Script] Calendario prenotazioni on Thu, 30 Sep 2010 18:20:24 GMT]]></title><description><![CDATA[<p dir="auto">Ciao nerkyos e benvenuto nel Forum GT. <img src="https://connect.gt/plugins/nodebb-plugin-emoji/emoji/android/1f642.png?v=gca7n9pp8gc" class="not-responsive emoji emoji-android emoji--slightly_smiling_face" title=":)" alt="🙂" /></p>
<p dir="auto">Ho appena fatto dei test e a me non da problemi.<br />
Ti direi di verificare il valore del timestamp salvato come data inizio.<br />
Come puoi vedere anche nella demo ci sono vari casi di data inizio uguale all'ultimo giorno del mese e funzionano sia come prenotazione che come confermato.<br />
Facci sapere. <img src="https://connect.gt/plugins/nodebb-plugin-emoji/emoji/customizations/54a3bffb-5e4a-4eb8-81dc-99b2072e5d05-175.gif?v=gca7n9pp8gc" class="not-responsive emoji emoji-customizations emoji--ciauz" title=":ciauz:" alt=":ciauz:" /></p>
]]></description><link>https://connect.gt/post/906885</link><guid isPermaLink="true">https://connect.gt/post/906885</guid><dc:creator><![CDATA[samyorn]]></dc:creator><pubDate>Thu, 30 Sep 2010 18:20:24 GMT</pubDate></item><item><title><![CDATA[Reply to [Script] Calendario prenotazioni on Thu, 30 Sep 2010 11:42:17 GMT]]></title><description><![CDATA[<p dir="auto">Ciao, ottimo lavoro, ho un problemino quando l'inizio della prenotazione è l'ultimo giorno del mese viene visualizzato libero mentre gli altri giorni della prenotazione sono corretti, cosa mi sfugge?<br />
Saluti.</p>
]]></description><link>https://connect.gt/post/906899</link><guid isPermaLink="true">https://connect.gt/post/906899</guid><dc:creator><![CDATA[nerkyos]]></dc:creator><pubDate>Thu, 30 Sep 2010 11:42:17 GMT</pubDate></item><item><title><![CDATA[Reply to [Script] Calendario prenotazioni on Sat, 10 Jul 2010 13:32:18 GMT]]></title><description><![CDATA[<p dir="auto">Salve ragazzi e benvenuto a koqu nel Forum GT. <img src="https://connect.gt/plugins/nodebb-plugin-emoji/emoji/android/1f609.png?v=gca7n9pp8gc" class="not-responsive emoji emoji-android emoji--wink" title=";)" alt="😉" /></p>
<p dir="auto">Si, tutti i campi data sono gestiti in formato timestamp, esattamente come ale87440 utilizzo dei campi INT.<br />
Per il tuo caso ho appena testato e funziona, guarda la demo: stanza 9 mese Aprile. <img src="https://connect.gt/plugins/nodebb-plugin-emoji/emoji/android/1f609.png?v=gca7n9pp8gc" class="not-responsive emoji emoji-android emoji--wink" title=";)" alt="😉" /></p>
]]></description><link>https://connect.gt/post/906883</link><guid isPermaLink="true">https://connect.gt/post/906883</guid><dc:creator><![CDATA[samyorn]]></dc:creator><pubDate>Sat, 10 Jul 2010 13:32:18 GMT</pubDate></item><item><title><![CDATA[Reply to [Script] Calendario prenotazioni on Sat, 10 Jul 2010 06:25:30 GMT]]></title><description><![CDATA[<p dir="auto">Io ho semplicemente messo INT(11) come campo delle date, così da non avere alcun problema...</p>
<p dir="auto">Ciao...</p>
]]></description><link>https://connect.gt/post/906896</link><guid isPermaLink="true">https://connect.gt/post/906896</guid><dc:creator><![CDATA[ale87440]]></dc:creator><pubDate>Sat, 10 Jul 2010 06:25:30 GMT</pubDate></item></channel></rss>