Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    162

    Algoritmo in PHP e Mysql

    Salve, spero che il titolo del post sia coretto e indicato per l'aiuto che sto cercando

    Io devo stabilire in quale giorni una precisa camera è affittata oppure no.

    e stampare a video una tabella "Pivot" con il nome delle camere e accanto i giorni(colorati in rosso)che è occupata e (colorati in verde)quelli che non sono occupati.

    questa "ricerca" avviene tramite un campo che contiene il nome del mese.

    Adesso volevo chiederVi un aiuto sia a capire se è possibile farlo tramite storeprocedure e sia se è possibile farlo tramite codice php.

    P.S.:Anche perchè io tramite codice l'avrei quasi finito,ci sono delle cose da sistemare,e anche per questo avrei bisogno dell'aiuto di qualcuno di Voi.

    Grazie

  2. #2
    Utente bannato
    Registrato dal
    Jul 2007
    Messaggi
    368
    Ma un bel database Mysql?

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    162
    Che vorresti dire?

    Una store procedure?

    Perchè ho provato a farla usando i cursori,ma non mi dava sempre tutti i giorni del filtro della query.

    Potresti aiutarmi?

    Grazie

  4. #4
    Utente bannato
    Registrato dal
    Jul 2007
    Messaggi
    368
    Esponi tutte le tue esigenze nei minimi dettagli.

  5. #5
    penso che la cosa migliore sia quella di creare un database con le camere, le prenotazione ed eventualmente i clienti, dopo in base ai dati inseriti si crea la tabella riassuntiva... e questa viene creata in base alla struttura dei dati immagazzinati.. se hai problemi a stampare la tabella posta il codice ed eventualmente quelloche vorresti che accada..

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    162
    Innanzitutto grazie per l'interessamento,

    il database è creato come tu hai detto il problema è un altro e adesso lo descriverò meglio:

    dovrei contare i giorni che intercorrono tra una data e la'latra prendendo i singoli giorni e poi fare un confronto per vedere quale tra questi giorni sono presenti e quelli che non lo sono.

    io l'ho fatto in php e anche in mysql(store procedure) ma in nessuno dei due casi mi funziona correttamente.
    inoltre dovrebbe uscirmi a video una specie di tabella pivot,in questo modo:

    Mese
    Giorni
    1-2-3-4-5-6-7-8 ect.
    Record1(qui vanno inseriti i giorni in verde,quelli che non sono presenti e in rosso quelli che lo sono)
    Record2
    Record3
    Record4
    potresti darmi un nuovo suggerimento?

    Se è il caso faccio vedere il codice che ho creato fin ora.
    Grazie di tutto;

  7. #7
    allora, se sei sicuro dei dati inseriti, quindi possiamo tralasciare i controlli + noiosi l'algoritmo potrebbe essere il seguente:

    estrai dal database un record alla volta
    estrai i giorni di inizio e fine in un determinato mese prestabilito e li salvi in un array
    inizializzi una variabile ad un valora che preferisci per identificare lo stato di libero
    stampi la riga della tabella partendo da 1 e controlli se la data ossia anno-mese ( prestabiliti ) giorno 1 ( in questo caso) è contenuta nel tuo array allora

    se variabile=libero
    stampi la casellina rossa e metti la variabile in stato di occupato
    altrimenti se variabile= occupato
    stampi verde e metti variabile in stato di libero..

    ora ricominci con un altro record..

    se non son stato chiaro .. scusate mi chiarirò

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    162
    Allora, guarda tu mi hai dato un suggerimento lato codice,io ho fatto i passaggi che tu mi hai indicato sia lato codice,che lato mysql(store procedure).,purtroppo non funzionanti alla perfezione.

    Ti spiego,anzi ti mostro il codice sia lato php,che mysql e valutiamo insieme gli errori che sto facendo.

    Inizio con il codice della store procedure,che mi dovrebbe restituire in una tabella tutti i giorni con accanto il nome del record,così da fare una (lato codice) una query con il filtro del record e di stampare a video i giorni, facendo una condizione se esiste allora metti verde,altrimenti metti rosso.

    codice:
    DELIMITER $$
    
    DROP PROCEDURE IF EXISTS `bedebreakfast`.`ricerca` $$
    CREATE DEFINER=`root`@`localhost` PROCEDURE `ricerca`(IN inizio date,IN fine date)
    BEGIN
    
    Declare d  INT DEFAULT -1;
    Declare d1 INT DEFAULT 0;
    Declare done INT default 0;
    Declare cam varchar(50);
    DECLARE giorni INT default 0;
    Declare conteggio INT default 0;
    Declare i INT default 0;
    
    
    
    DECLARE cursore CURSOR FOR
    
    
         SELECT camere.nome,Day(periodoDal)as Datainizio,DAY(periodoAl)as Datafine FROM prenotazioni left join camere on prenotazioni.idcamera=camere.idCamere where DATE_FORMAT(periodoDal,'%Y-%m-%d')>=inizio AND DATE_FORMAT(periodoAl,'%Y-%m-%d')<=fine;
    
    
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
    
    
    OPEN cursore;
    
    myloop:LOOP
    FETCH cursore INTO cam,d,d1;
    
    if d>d1  then leave myloop;END IF;
    
    INSERT INTO prova(cam,gg) VALUES (cam,d);
    SET d=d+1;
    end Loop myloop;
    END $$
    
    DELIMITER ;

    L'altro codice php è un pò diverso da come l'hai descritto tu,nel senso che un record avrà più giorni,quindi sarà un array con annidato una altro array(in parole povere sarà un situazione di uno a molti.)


    cmq il codice che io ho creato è questonaturalmente anche questo lo possiamo commentare)

    Codice PHP:

    <?php
    include('DataAccess.class.php');

    ?>

    <html>
    <head>
    <title>Calendario</title>
     <body>

      <form action="<?php $_SERVER['PHP_SELF'?>" method="GET">
      
      <input type="text" size="20" name="mese">
      <input type="submit" name="Ricerca">
      </form>

    </body>
     </head>
    </html>

    <?php
    function getIntMese($mese)
    {
        
    switch (
    $mese) {
            case 
    'Gennaio':
                
    $intmese='01';
                break;
            case 
    'Febbraio':
                
    $intmese='02';
                break;
            case 
    'Marzo':
                
    $intmese='03';
                break;
            case 
    'Aprile':
                
    $intmese='04';
                break;
            case 
    'Maggio':
                
    $intmese='05';
                break;
            case 
    'Giugno':
                
    $intmese='06';
                break;
            case 
    'Luglio':
                
    $intmese='07';
                break;
            case 
    'Agosto':
                
    $intmese='08';
                break;    
                case 
    'Settembre':
                
    $intmese='09';
                break;
            case 
    'Ottobre':
                
    $intmese='10';
                break;
            case 
    'Novembre':
                
    $intmese='11';
                break;
            case 
    'Dicembre':
                
    $intmese='12';
                break;
            default:
                
    $intmese='-1';
                break;
        }
        
        return 
    $intmese;    
        
        
    }

    function 
    getGiorniMese($mese){
        
        
        switch (
    $mese) {
            case 
    'Gennaio':
                
    $giorni=31;
                break;
            case 
    'Febbraio':
                
    $giorni=28;
                break;
            case 
    'Marzo':
                
    $giorni=31;
                break;
            case 
    'Aprile':
                
    $giorni=30;
                break;
            case 
    'Maggio':
                
    $giorni=31;
                break;
            case 
    'Giugno':
                
    $giorni=30;
                break;
            case 
    'Luglio':
                
    $giorni=31;
                break;
            case 
    'Agosto':
                
    $giorni=31;
                break;    
            case 
    'Settembre':
                
    $giorni=30;
                break;
            case 
    'Ottobre':
                
    $giorni=31;
                break;
            case 
    'Novembre':
                
    $giorni=30;
                break;
            case 
    'Dicembre':
                
    $giorni=31;
                break;
            default:
                
    $giorni=-1;
                break;
        }
        
        return 
    $giorni;
        
    }

    function 
    Giorni($day,$day1){
        

        
        while(
    $day<$day1){
            
            
    $day=$day+1;
            
    $gg[$i]=$day;
            
            
    $i++;
        }
        
        return 
    $gg;
        
        
    }

    $Mese="Aprile";//$_GET['Aprile'];

    $gg=getGiorniMese($Mese);
    $intmese=getIntMese($Mese);

    $periodoDal="2008"."-".$intmese."-"."01";
    $periodoAl="2008"."-".$intmese."-".$gg;

    ?>

    <table border="1" align="center">
    <tr><tr><?php  echo $Mese?></tr></tr>
    <tr></tr>
    <tr>

    <tr>
    <td></td>

    <?php


        
    $giorni
    =array();
    $giorno=31;
    $conn=DataBaseManager::conn();

        

        
    $query="SELECT Day(periodoDal)as Datainizio,Day(periodoAl)as Datafine FROM prenotazioni left join camere on prenotazioni.idcamera=camere.idCamere where DATE_FORMAT(periodoDal,'%Y-%m-%d')>='2008-04-01' AND DATE_FORMAT(periodoDal,'%Y-%m-%d')<='2008-04-30' AND camere.nome='FataMorgana';";

        
    $risultato=@mysql_query($query);



        while(
    $row=@mysql_fetch_assoc($risultato))

        {
        
           
            
           
    $day1=$row['Datainizio']-1;
        
            
           
    $day2=$row['Datafine'];
        
           
            
           
    $giorni=Giorni($day1,$day2);
            
           

           
    $z=1;

           
    $y=0;

           while(
    $z<31 && $y<$giorni)

           {
                
                   

               if(
    $giorni[$y]==$z)
               
               {
                    
                    

                   echo 
    "<p style=\"Color:red\">".$z."</p>";
                    
                    
        

               }
                
        
               else 

               {
                    
                    

                   echo 
    "<p style=\"Color:green\">".$z."</p>";
                    

               }
        

           
    $puntatore=$z++;

               
    $y++;
                
                

           }

        }
        


    ?>
    Spero di essere stato anche io chiaro....
    Grazie

  9. #9
    sinceramente non conoscendo le store procedure la prima parte posso solo immaginare vagamente cosa faccia, ma sulla seconda io cambierei la parte di stampa a video delle "caselline"
    codice:
    <table border="1" align="center">
    <tr><td colspan="31"> MESE </td></tr>
    <tr>
    <?php
    for($i=1;$i<=31;$i++)
    print"<td>$i</td>";
    ?>
    </tr>
    <tr>
    <?php
    	$giorno=31;
    	$gg=array("2008-04-5","2008-04-15","2008-04-20","2008-04-25");
        for($a=0;$a<count($gg);$a++){ 
    	   $data = explode("-",$gg[$a]);
    	   $giorni[$a]=$data[2];
    	}
    	$lib=1;
    	$arr=0;
    	for($i=1;$i<=31;$i++){
    		
    		if($lib==1)
    			$color="green";
    
    		
    		for($a=0;$a<count($giorni);$a++){ 
    		   if($giorni[$a]==$i)
    				if($lib!=1)
    					$lib=1;
    				else
    					$lib=0;
    		}
    		if($lib!=1)
    			$color="red";
    	print "<td style=\"Color:$color\">X</td>";
        }
    ?> 
    </tr>
    <table>
    crea un file php e vedi i risultati che ti da questo codice..

  10. #10
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    162
    Ciao,ti chiedo scusa se non ho potuto rispondere prima,ma non sono stato bene,

    quello che volevo dirti è che il codice che hai postato è molto simile al mio e nel caso ci siano più date di un record non li avrebbe letti,quello che bisognava fare era quello di prensere tutti i giorni compresi in una determinata data di un determinato record(coiè una camera) e questo non lo fa.

    invece io ho postato nel frattempo un codice diverso che però anche in questo caso non mi dà ilrisultato preciso se puoi dargli un occhiata e se qulcuno mi può far capire in cosa sto sbagliando:

    Codice PHP:

    <?php
    include('DataAccess.class.php');
    session_start();

    ?>

    <html>
    <head>
    <title>Calendario</title>
     <body>

      <form action="<?php $_SERVER['PHP_SELF'?>" method="GET">
      
      <input type="text" size="20" name="mese">
      <input type="submit" name="Ricerca">
      </form>

    </body>
     </head>
    </html>

    <?php
    function getIntMese($mese)
    {
        
    switch (
    $mese) {
            case 
    'Gennaio':
                
    $intmese='01';
                break;
            case 
    'Febbraio':
                
    $intmese='02';
                break;
            case 
    'Marzo':
                
    $intmese='03';
                break;
            case 
    'Aprile':
                
    $intmese='04';
                break;
            case 
    'Maggio':
                
    $intmese='05';
                break;
            case 
    'Giugno':
                
    $intmese='06';
                break;
            case 
    'Luglio':
                
    $intmese='07';
                break;
            case 
    'Agosto':
                
    $intmese='08';
                break;    
                case 
    'Settembre':
                
    $intmese='09';
                break;
            case 
    'Ottobre':
                
    $intmese='10';
                break;
            case 
    'Novembre':
                
    $intmese='11';
                break;
            case 
    'Dicembre':
                
    $intmese='12';
                break;
            default:
                
    $intmese='-1';
                break;
        }
        
        return 
    $intmese;    
        
        
    }

    function 
    getGiorniMese($mese){
        
        
        switch (
    $mese) {
            case 
    'Gennaio':
                
    $giorni=31;
                break;
            case 
    'Febbraio':
                
    $giorni=28;
                break;
            case 
    'Marzo':
                
    $giorni=31;
                break;
            case 
    'Aprile':
                
    $giorni=30;
                break;
            case 
    'Maggio':
                
    $giorni=31;
                break;
            case 
    'Giugno':
                
    $giorni=30;
                break;
            case 
    'Luglio':
                
    $giorni=31;
                break;
            case 
    'Agosto':
                
    $giorni=31;
                break;    
            case 
    'Settembre':
                
    $giorni=30;
                break;
            case 
    'Ottobre':
                
    $giorni=31;
                break;
            case 
    'Novembre':
                
    $giorni=30;
                break;
            case 
    'Dicembre':
                
    $giorni=31;
                break;
            default:
                
    $giorni=-1;
                break;
        }
        
        return 
    $giorni;
        
    }



    $Mese="Aprile";//$_GET['Aprile'];

    $gg=getGiorniMese($Mese);
    $intmese=getIntMese($Mese);

    $periodoDal="2008"."-".$intmese."-"."01";
    $periodoAl="2008"."-".$intmese."-".$gg;

    ?>


    <?php


        
    $giorni
    =array();
    $giorno=31;
    $conn=DataBaseManager::conn();

        

        
    $query="SELECT camere.nome,Day(periodoDal)as Datainizio,Day(periodoAl)as Datafine FROM prenotazioni left join camere on prenotazioni.idcamera=camere.idCamere where DATE_FORMAT(periodoDal,'%Y-%m-%d')>='2008-05-01' AND DATE_FORMAT(periodoDal,'%Y-%m-%d')<='2008-05-31' ORDER BY camere.nome DESC";

        
    $risultato=@mysql_query($query);

    echo
    "<div align='center'>";
    echo
    "<table border=1 cellpadding=2 cellspacing=0><caption align='center'>$Mese</caption>";
    echo
    "<th bgcolor=#D3D3D3>"?><?php 
    for ($gg=1;$gg<31;$gg++){
        
        echo 
    "<td>".$gg."</td>";
    }
        
    ?></th>

    <?php

    $cont
    =0;
    while(
    $row=@mysql_fetch_assoc($risultato))

        {
        
           
    $camera=$row['nome'];
           
           
    $day1=$row['Datainizio'];
        
           
    $day2=$row['Datafine'];

           
           
           for(
    $i=$cont+1;($day1-1)<$day2;$i++)
           
           {
                

          


               (int)
    $cont++;
               
            
               
               
    $_SESSION['stanza'][$camera][$i]=$day1++;  
               
       
           }
           
           
          

           }
        
             
           
    $cart=$_SESSION['stanza'];
           
           

           foreach (
    $cart as $key => $value)
           
            {

                
                for (
    $y=0;$y<count($key);$y++)
                {
                     
                    echo 
    "<tr><td>$key</td>";
                     
    $g=0;
           
                     
                for (
    $z=1;$z<count($value);$z++)
                {
                   
                    
                                
                    
                    
    $g++;
                    
                    if(
    $value[$z]==$g)
                    {
                    
                        
                        
                        echo
    "<td><p style=\Color:red\">".$g."</p></td>";
                    
                    
                    
                    }
                    
                    else
                    {
                        
                        
                        echo
    "<td><p style=\"Color:green\">".$g."</p></td>";
                        
                    
                    }
                    
                }
                
                }
          
                
                
            }
            
                   
        
    ?>
    </td>
    </tr>
    </table>
    </div>
    come si può ben vedere uso una sessione con il nome della camera e i giorni per ogni camera che sono compresi nelle date.


    quando vado a fare il ciclo però non mi dà i giorni rossi perchè in effetti li salta.

    Potete darmi una mano?
    Chiedo ancora scusa ad ardetek per il ritardo alla risposta.

    Grazie

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.