Pagina 1 di 5 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 44
  1. #1

    Calendario per prenotazione

    Ragazzi ho fatto un calendario che mi segna la data in rosso se è prenotata e funziona, io però ho l'esigenza di segnare in rosso non solo la data di entrata ma anche il periodo di tempo che le camere sono occupate.


    questo è la parte dello script dove faccio il confronto per la data

    Codice PHP:

     $day
    $j-($lunedi-1); 
         
    $data strtotime(date($y."-".$m."-".$day));     
     
    $oggi strtotime(date("Y-m-d"));   
      
    $db = new MySQL();   
       if (! 
    $db->Query("SELECT str_data FROM bebcalendario")) echo $db->Kill();  
                 if(
    $db->RowCount() > 0)      {     
       while (
    $row $db->Row())    
         {          
    $str_data $row->str_data;    
          if (
    $str_data == $data)    
          {     
           
    $day "<span style='color:#be1e2d;'>$day</span>";   
           }  
          }   
       }  
        if(
    $data != $oggi)      {   
         echo 
    "<td style='color:#fff'>".$day."</td>";  
        }else{   
         echo 
    "<td style='color:#fff'><b>".$day."</b></td>";  
        }  
      } 
    Come posso modificarlo in modo che :

    1) quando tutte e due le camere (sono solo due) sono occupate segna in rosso
    2) e segna il periodo intercorrente dalla data di arriva e partenza

    Grazie in anticipo

  2. #2
    Anche se in modo rudimentale sono riuscito a mettere la data fine, diciamo solo aggiunto un if, ma non so come fargli selezionare anche i giorni tra la data di entrata e di uscita, vi riscrivo il codice con l'aggiunta solo del if per la selezione della data di uscita

    $day= $j-($lunedi-1); $data = strtotime(date($y."-".$m."-".$day));
    $oggi = strtotime(date("Y-m-d"));
    $db = new MySQL();
    if (! $db->Query("SELECT str_data, dataFine FROM bebcalendario")) echo $db->Kill();

    if($db->RowCount() > 0)
    {
    while ($row = $db->Row())
    {
    $str_data = $row->str_data;
    $dataFine = $row->dataFine;
    if ($str_data == $data)
    {
    $day = "<span style='color:#be1e2d;'>$day</span>";
    }
    if($dataFine == $data){
    $day = "<span style='color:#be1e2d;'>$day</span>";
    }
    }
    }
    if($data != $oggi)
    {
    echo "<td style='color:#fff'>".$day."</td>";
    }else{
    echo "<td style='color:#fff'><b>".$day."</b></td>";
    }
    }

  3. #3
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Non mi è chiaro di come vuoi visualizzare i dati ?

    Nella query dovresti calcolare la differenza tra la data di entrata e quella di uscita ( con mysql guarda la funzione datediff ). Ovviamente i campi devono essere del tipo date.

    Stampi a video per la data di entrata come fai adesso.
    Fai un ciclo (for o while) usando il campo calcolato nella query e stampi a video quante volte la differenza quello che vuoi (puo' darsi che tu debba fare un meno 1 o 2 sulla differenza tra le date).
    E finisci col stampare a video come fai adesso.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  4. #4
    MI spiego meglio
    Io ho questo calendario

    http://www.bebgrandearchivio.it/gran...page=8&lang=it

    Questo è il codice


    Codice PHP:
    <?phpfunction ShowCalendar($m,$y)

    {


      if ((!isset(
    $_GET['d']))||($_GET['d'] == ""))

      {

        
    $m date('n');   
     
    $y date('Y');
      }else{    
    $m = (int)strftime"%m" ,(int)$_GET['d']); 
       
    $y = (int)strftime"%Y" ,(int)$_GET['d']); 
       
    $m $m;  
      
    $y $y;  }
      
    $precedente mktime(000$m -11$y);  
    $successivo mktime(000$m +11$y);
      
    $nomi_mesi = array(    "Gennaio",    "Febbraio",    "Marzo",    "Aprile",    "Maggio",    "Giugno",     "Luglio",    "Agosto",    "Settembre",    "Ottobre",    "Novembre",    "Dicembre"  );
      
    $nomi_giorni = array(    "Lun",    "Mar",    "Mer",    "Gio",    "Ven",    "Sab",    "Dom"  );
      
    $cols 7;
      
    $days date("t",mktime(000$m1$y)); 
      
    $lunedidate("w",mktime(000$m1$y));
      if(
    $lunedi==0$lunedi 7;  echo "<div>"
     echo 
    "<table class=\"box\" cellspacing=\"5\" cellpadding=\"5\">\n"
      echo 
    "<tr>\n  <td colspan=\"".$cols."\" class='header-calendario' align='center'> 
     <a href=\"?page=8&lang=
    {$_REQUEST['lang']}&d=" $precedente "\">
    <span class='arrow-sx'></span></a>
    <span class='testomesi'>  " 
    $nomi_mesi[$m-1] . " " $y "   </span>
    <a href=\"?page=8&lang=
    {$_REQUEST['lang']}&d=" $successivo "\">
    <span class='arrow-dx'></span></a></td></tr>"
    ;
      foreach(
    $nomi_giorni as $v)  {    echo "<td class='sfondomesi' style='color:#fff;'><b>".$v."</b></td>\n";
      } 
     echo 
    "</tr>"
     for(
    $j 1$j<$days+$lunedi$j++)  {    if($j%$cols+1==0)    {      echo "<tr>\n";  
      }    if(
    $j<$lunedi)    {      echo "<td> </td>\n"
       }else{      
    $day$j-($lunedi-1);    
      
    $data strtotime(date($y."-".$m."-".$day)); 
         
    $oggi strtotime(date("Y-m-d"));   
       
    $db = new MySQL(); 
         if (! 
    $db->Query("SELECT str_data, dataFine FROM bebcalendario")) echo $db->Kill();               if($db->RowCount() > 0)      {        while ($row $db->Row())         {          $str_data $row->str_data;    
           
    $dataFine $row->dataFine;      
        if (
    $str_data == $data)          {            $day "<span style='color:#be1e2d;'>$day</span>";    
          }         
     if(
    $dataFine == $data){     
             
    $day "<span style='color:#be1e2d;'>$day</span>";  
            }      
      }    
      }   
       if(
    $data != $oggi)  
        {     
       echo 
    "<td style='color:#fff'>".$day."</td>";
          }else{     
       echo 
    "<td style='color:#fff'><b>".$day."</b></td>";    
      }   
     } 
       if(
    $j%$cols==0)    {
          echo 
    "</tr>"
       } 
     } 
     echo 
    "<tr></tr>"
     echo 
    "</table>";
      echo 
    "</div>";
    }
    ShowCalendar(date("m"),date("Y")); ?>

    Io metto in rosso i giorni di arrivo di un cliente e di uscita, il problema :


    1) devo far colorare di rosso anche i numeri di permanenza.. mi spiego
    tizio prenota in data 18-10-2014 fino al 22-10-2014 , io la data di inizio e di fine la faccio segnare in rosso, ma dovrei fare segnare in rosso anche 19 e 20

    2) un altra cosa, praticamente deve segnare in rosso quando entrambe le due stanze sono occupate , se una è libera deve non evidenziare rosso

    come posso fare ti ringrazio in anticipo
    Ultima modifica di Werwolfe; 15-10-2014 a 11:37

  5. #5
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Non ho ben capito il fatto delle due stanze, ma non puoi semplicemente vedere se $data si trovi nell'intervallo $str_data - $dataFine
    Codice PHP:
    $str_data $row->str_data;    // dal codice mi paiono timestamp, no?
    $dataFine $row->dataFine;  
    $color '#fff';
    if(
    $data >= $str_data && $data <= $dataFine)
       
    $color '#be1e2d';
    $label = ($data != $oggi)  ? $day '<b>'.$day.'</b>';
    echo  
    "<td style='color:$color'>".$label."</td>"

  6. #6
    Ua Grazie, funziona perfettamente, per le camere
    Il beb ha solo due camere:

    Camera rossa e Camera blu:

    Se la camera rossa che nel db equivale a 1 è occupata ma la camera blu equivale a 2 è libera non deve mettere i giorni in rosso

    se entrambe le camere sono occupate mettere i giorni in rosso, rendendoli non disponibili

    Come posso fare questo controllo? o meglio lo si deve fare nella query?


    la tabella nel database è :
    id (contattore)
    str_data (int 20)
    dataFine (int 20)
    stanza (int 11)

  7. #7
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Dipende da come gestisci la tabella bebcalendario. Distingui le camere? Come inserisci le prenotazioni ?

  8. #8
    tabella è questa :
    Campo Tipo Null Predefinito Commenti
    id int(11) No
    str_data int(10) No
    albergo int(11) No
    dataFine int(10) No
    nome varchar(255) No
    stanza int(11) No
    adulti int(11) No
    bambini int(11) No
    email varchar(255) No
    indirizzo varchar(255) No
    cap int(11) No
    city varchar(255) No
    messaggio text No
    orainizio varchar(25) No
    orafine varchar(25) No
    tel varchar(255) No

    distinguo stanza = 1 e stanza 2 entrambe hanno le stesse caratteristiche

  9. #9
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Io farei così:
    Dando per scontato che hai un sistema per impedire un overbooking al momento della prenotazione.
    1 ti prendi le prenotazioni per il mese corrente.
    2 Metti in un array la coppia giorno => numero di prenotazioni. Visto che hai due sole stanze varrà al max 2.
    3 Se il giorno (del calendario) è presente nell array ed il valore è 2, lo metti in rosso.

    Tra l'altro nel tuo codice rifai la (stessa) query nel clico for...ed non ha senso.
    Quindi:
    Codice PHP:
    function prenotazione($mese){
        
    $giorni = array();
        
    $db = new MySQL(); 
        if (! 
    $db->Query("SELECT str_data, dataFine FROM bebcalendario WHERE MONTH(str_data) = $mese OR MONTH(dataFine) = $mese")) 
               echo 
    $db->Kill();   
        while(
    $row $db->Row() ){
              
    // Sono timestamp
              
    $str_data $row->str_data;  
              
    $dataFine $row->dataFine;
              while(
    $str_data <= $dataFine){
                    if(
    date('m'$str_data) == $mese){
                            if(!isset(
    $giorni[$str_data]))
                                  
    $giorni[$str_data] = 0;
                            
    $giorni[$str_data] ++;
                    }  
                    
    $str_data += (60 60 24);
              }
        }
        return 
    $giorni;


    A questo punto nella funzione dove crei il calendario basta che vedi se il giorno è presente su $giorni ed è = 2
    Codice PHP:
    function showCalendar($m$y){
       
    $compare prenotazione($m);
        ...
        ...
        
    $color '#fff';
        if(isset(
    $compare[$data]) && $compare[$data] == 2)
             
    $color '#be1e2d';
        
    $label = ($data != $oggi)  ? $day '<b>'.$day.'</b>';
        echo  
    "<td style='color:$color'>".$label."</td>";  
       ...

    Ps: In questo caso non ho cosiderato l'anno. Inoltre la query non ti prende le prenotazioni che durano più di un mese

  10. #10
    Prima di tutto grazie per l'aiuto

    ho fatto come mi consigli ma non mette più i numeri in rosso, sicuramente avrò sbagliato qualcosa, ti metto il codice (sperando solo di non aver fatto un grosso pasticcio e di aver incollato e compreso bene quello che mi hai scritto)


    Codice PHP:

    <?php
    function prenotazione($mese){ 
       
    $giorni = array(); 
       
    $db = new MySQL();  
      
     if (! 
    $db->Query("SELECT str_data, dataFine FROM bebcalendario WHERE MONTH(str_data) = $mese OR MONTH(dataFine) = $mese")) echo $db->Kill();  
         while(
    $row $db->Row() ){          // Sono timestamp  
            
    $str_data $row->str_data
               
    $dataFine $row->dataFine;  
            while(
    $str_data <= $dataFine){    
                if(
    date('m'$str_data) == $mese){     
                       if(!isset(
    $giorni[$str_data]))        
                          
    $giorni[$str_data] = 0;      
                      
    $giorni[$str_data] ++;        
            }           
           
    $str_data += (60 60 24);  
            }  
      }    return 
    $giorni;


    function 
    ShowCalendar($m,$y){ 
          
    $compare prenotazione($m);  
      if ((!isset(
    $_GET['d']))||($_GET['d'] == ""))  {   
     
    $m date('n');  
      
    $y date('Y'); 
     }else{    
    $m = (int)strftime"%m" ,(int)$_GET['d']);
        
    $y = (int)strftime"%Y" ,(int)$_GET['d']); 
       
    $m $m;
        
    $y $y;  
    }  
    $precedente mktime(000$m -11$y);
      
    $successivo mktime(000$m +11$y); 
     
    $nomi_mesi = array(    "Gennaio",    "Febbraio",    "Marzo",    "Aprile",    "Maggio",    "Giugno",     "Luglio",    "Agosto",    "Settembre",    "Ottobre",    "Novembre",    "Dicembre"  );  $nomi_giorni = array(    "Lun",    "Mar",    "Mer",    "Gio",    "Ven",    "Sab",    "Dom"  );  $cols 7;  $days date("t",mktime(000$m1$y));  
     
    $lunedidate("w",mktime(000$m1$y));
      if(
    $lunedi==0$lunedi 7;
      echo 
    "<div>"
     echo 
    "<table class=\"box\" cellspacing=\"5\" cellpadding=\"5\">\n";  
     echo 
    "<tr>\n  <td colspan=\"".$cols."\" class='header-calendario' align='center'> 
     <a href=\"?page=8&lang=
    {$_REQUEST['lang']}&d=" $precedente "\"><span class='arrow-sx'></span></a>
    <span class='testomesi'>  " 
    $nomi_mesi[$m-1] . " " $y "   </span>
    <a href=\"?page=8&lang=
    {$_REQUEST['lang']}&d=" $successivo "\">
    <span class='arrow-dx'></span></a></td></tr>"

     foreach(
    $nomi_giorni as $v)  {  
      echo 
    "<td class='sfondomesi' style='color:#fff;'><b>".$v."</b></td>\n";  }  echo "</tr>"
     for(
    $j 1$j<$days+$lunedi;$j++)  { 
       if(
    $j%$cols+1==0)    {  
        echo 
    "<tr>\n"
       }    if(
    $j<$lunedi)    {  
        echo 
    "<td> </td>\n";   
     }else{      
    $day$j-($lunedi-1);  
        
    $data strtotime(date($y."-".$m."-".$day));  
        
    $oggi strtotime(date("Y-m-d"));  
       
    $color '#fff'
       if(isset(
    $compare[$data]) && $compare[$data] == 2)  
           
    $color '#be1e2d';   
     
    $label = ($data != $oggi)  ? $day '<b>'.$day.'</b>'
       echo  
    "<td style='color:$color'>".$label."</td>";   
       }    if(
    $j%$cols==0)    {    
      echo 
    "</tr>";   
     } 
     }  echo 
    "<tr></tr>";  
    echo 
    "</table>"
     echo 
    "</div>";
    }
    ShowCalendar(date("m"),date("Y"));
     
    ?>
    Ultima modifica di Werwolfe; 15-10-2014 a 18:23

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.