Pagina 1 di 1

Aiuto calendario con database

Inviato: gio 28 giu 2012, 13:49
da darkstaring
Salve :)...
Mi hanno chiesto di realizzare un calendario in php e mysql che segni in rosso i giorni feriali (inseriti da utente) e weekend.
Il mio problema sta nel db... non riesco a non creare un modello senza una sfilza di N a N..

Esite qualche funzione mysql che semplifichi il tutto??
Quali entita' usereste nel db??
Altri consigli???

Vi ringrazio
Francesco
:o

Re: Aiuto calendario con database

Inviato: gio 28 giu 2012, 14:15
da darkstaring
Ora stavo pensando a questa soluzione anche se e' una porcheria:

Codice: Seleziona tutto

GIORNI   1 ======== N  FESTIVITA' N =========== 1  MESI
id                     id                           id
numero                 idmese                    nome
                       idgiorno             
                       festivo (bool)
Ci sono molti problemi, FESTIVITA conterrebbe record del tipo
`1`1`1`V`
`1`1`2`F`
`1`1`3`F`
ci metterei un giorno per riempire tutto senza dei for mirati in base ai giorni del mese, comunque credo che funzionerebbe anche se non tengo conto degli anni...
Inoltre non tengo conto del primo giorno della settimana ma credo di poterlo ricavare senza bisogno di aggiungerli nel DB da php.
Cosa ne pensate?

Re: Aiuto calendario con database

Inviato: gio 28 giu 2012, 14:34
da ilmich
guardando la tua soluzione forse non ho capito cosa devi ottenere... a cosa ti serve memorizzare sul database i giorni feriali e i week-end se puoi agevolmente ottenerlo tramite php stesso?!?!?!

eventualmente che tipo di manipolazione devi fare successivamente?!!?!?
se chiarisci un po' meglio quest'aspetto la soluzione da adottare per modellare il db puo' variare.

ad occhio pero' non capisco la 'forzatura' che stai adottando di splittare giorni-mesi-anni quando potresti tranquillamente memorizzarli in un unico campo data con associato campo dove specifichi il tipo di 'giorno'(feriale, week-end etc etc etc)
in questo modo con una query secca riesci a tirati fuori agevolmente tutti i giorni feriali(per esempio) semplicemente facendo un between da sql fra il primo giorno del mese e l'ultimo.

Re: Aiuto calendario con database

Inviato: gio 28 giu 2012, 15:56
da darkstaring
Grazie miklos..
miklos ha scritto:guardando la tua soluzione forse non ho capito cosa devi ottenere... .

Quello che devo ottenere è una pagina web con 2 form,
il primo deve contenere una casella di input per l'immissione dei giorni feriali da salvare su db;
il secondo deve stampare un calendario del tipo:

Codice: Seleziona tutto

L M M G V S D
      1 2....
Tutti i weekend e i giorni feriali (letti da db) devono essere scritti in rosso mentre tutti gli altri in nero...
non sò perchè ho abbandonato l'idea di tenere un'unica tabella.. mi sembrava troppo semplice forse.
miklos ha scritto: ad occhio pero' non capisco la 'forzatura' che stai adottando di splittare giorni-mesi-anni quando potresti tranquillamente memorizzarli in un unico campo data con associato campo dove specifichi il tipo di 'giorno'(feriale, week-end etc etc etc)
in questo modo con una query secca riesci a tirati fuori agevolmente tutti i giorni feriali(per esempio) semplicemente facendo un between da sql fra il primo giorno del mese e l'ultimo.
ora provo con un' unica tabella...
se ho qualche difficoltà chiedo :)..

Grazie

Re: Aiuto calendario con database

Inviato: gio 5 lug 2012, 12:40
da darkstaring
Ho trovato questa soluzione per scrivere il calendario

Codice: Seleziona tutto

function scrivicalendario ($giorno, $mese, $anno)
{
print "<Table border=1>";
print "<tr> <td>Domenica</td><td>Lunedi</td><td>Martedi</td><td>Mercoledi</td><td>Giovedi</td><td>Venerdi</td><td>Sabato</td> </tr>";

for ($x=0; $x<5; $x++)
{
for ($y=0; $y < 7; $y++)
  {
    $data= mktime (0, 0, 0, $mese, $giorno, $anno);
    $array_giorno = getdate($data);

    if( ($giorno == 1) && ("$array_giorno[wday]" == $y) )
    {
      print "<td> $array_giorno[mday]</td>";
      $giorno++;
    }
    elseif ($giorno != 1)
      {
	if ( "$array_giorno[mon]" != $mese)
	  {     
	    break;
	  }
	print "<td> $array_giorno[mday]</td>";
        $giorno++;
      }
     else
      {     
	print "<td> &nbsp </td>";
      }
  }
 print "</TR><tr>";
}
}
print "</table>";
?>
è sicuramente ottimizzabile (credo)
comunque funge :).. adesso dovrei aggiungere le festività