calendario php con check

Ciao a tutti,

avrei la neceessità di creare un semplice calendario con la possibilità di fleggare le date (che poi inserisco nel db)

del tipo:

<< Gennaio 2008 >>

 01020304050607080910111213141516171819202122232425262728293031

 [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ]

ovviamente deve essere dinamico, calcolare i mesi di 30, 31, e 28

e avere la possibilità di scorrerlo x anni

p.s ovviamente se fleggo una data, una volta inserita nel db, devo poter vederla fleggata nel calendario e poterne fare l'update

spero possiate aiutarmi, pls

inviato 8 anni fa
yusizu
X 0 X

Sono molte le attività richieste dal progetto che hai descritto, dubito che qualcuno ti possa fornire tutto il codice necessario. Magari potresti dirci quali sono i punti particolari in cui hai bisogno di una dritta.

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

..si hai ragione, diciamo che ciò che mi preme è generare il calendario mensile e, per ogni giorno una chekbox

...iniziamo da li...il resto poi lo vediamo

tnks Gianni!

risposto 8 anni fa
yusizu
X 0 X

..allora sono arrivato fin qui:

<?php
function calendario($mese,$anno){
global $_GET; 
if ($_GET['x'] == NULL){
$mese_ = $mese;
$anno_ = $anno;
}
else{
$mese_ = (int)strftime( "%m" ,(int)$_GET['x']);
$anno_ = (int)strftime( "%Y" ,(int)$_GET['x']);
$mese = $mese_;
$anno = $anno_; 
}
$prev = mktime(0, 0, 0, $mese_ -1, 1, $anno_);
$next = mktime(0, 0, 0, $mese_ +1, 1, $anno_);


$human_month = array("error", "Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre" );
$settimana = array("L", "M", "M", "G", "V", "S", "D");
$colonne = 31;
$giorni = date("t",mktime(0, 0, 0, $mese, 1, $anno)); //giorni del mese in questione
$primo_lunedi= date("w",mktime(0, 0, 0, $mese, 1, $anno)); //Array_parte da 0
if($primo_lunedi==0){
$primo_lunedi = 7;
}
print("<table width=\"510\" colspacing=\"0\" border=\"0\">"); //table
print("<tr height=\"20\">\n\t\t<td colspan=\"".$colonne."\" align=\"center\"><a class=a1 href=\"?x=".$prev."\"><<</a></a> <span class=mese>".$human_month[(int)$mese]." ".$anno_."</span> <a class=a1 href=\"?x=".$next."\">>></a></td></tr>");
echo"<form name=lstCheck method=GET action=cal2.php>";
for($i = 1; $i<$giorni+$primo_lunedi; $i++){
if($i%$colonne+1==0){
print("<tr>");
}
if($i<$primo_lunedi){
print("<td> </td>");
}
else{
$giorno_= $i-($primo_lunedi-1);
$a = strtotime(date($anno_."-".$mese_."-".$giorno_));
$b = strtotime(date("Y-m-d"));

if($a != $b){
print("<td><input type=checkbox name=x[$x] value=".$a."><br><a class='days' href=\"?x=".$a."\">".$giorno_."</a></td>");
}
else{
print("<td><input type=checkbox name=x[$x] value=".$a."><br><a class='today' href=\"?x=".$a."\"><b>".$giorno_."</b></a></td>");
}
}
if($i%$colonne==31){
print("</tr>");
}
}

print("<tr height=\"30\"><td><td colspan=31 align=center><input type=submit value=Pubblica></td></form> </tr>");
print("</table>");
}


calendario(date("m"),date("Y")); ?>

questo recupera le date passate via GET  e le inserisce nel db

<?
include"../dati.php";
$ary_nondispa=array(); 
foreach ($_GET['x'] as $key=>$dato) 
  { 
$nondisp = date("d/m/Y", $dato);
$data = date("Y-m-d", $dato);

$Sql = "INSERT INTO disponibilita(nondisp, data_nondisp)VALUES('$nondisp','$data')"; 
/*
una in formato italiano e l'altra DATA*/
mysql_query("$Sql") or die (mysql_error());


}
?>

ora ho un grosso problema, dovrei richiamarmi i dati dal db e visualizzare i check selezionati quando la data del db è uguale  a quella visualizzata  :o

Spero possiate aiutarmi, grazie mille  :-\

risposto 8 anni fa
yusizu
X 0 X

Metti tutte le date estratte dal DB in un semplice array. Scegli una particolare rappresentazione per le date, ad esempio delle stringhe in formato hhhh-mm-gg oppure convertile in timestamp.

Nel ciclo che crea i vari TAG delle checkbod devi inserire in una variabile la data relativa alla checkbox nello stesso fotmato scelto prima. A questo punto il gioco è fatto: con un IF in_array($data_checkbox, $date_memorizzate) potrai decidere se mostrare o meno il testo checked="checked" che serve appunto per spuntare una checkbox.

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

Gianni, pls puoin postarmi un pò di codice...credo di aver capito ma solo in teoria!

grazie mille

credimi ho già fatto svariati tentativi ...invano!

risposto 8 anni fa
yusizu
X 0 X

Gianni, non riesco a recuperare "tutti" i valòori dell'array...senza utilizzare un ciclo while;

ho fatto così:

$dati = mysql_query("SELECT * FROM disponibilita ");
$row = mysql_fetch_array($dati);
$data_nondisp = array($row[data_nondisp]);
$dat =$data_nondisp[0];

//e poi ne ciclo

$a = strtotime(date($anno_."-".$mese_."-".$giorno_));

$tisdata = date("Y-m-d", $a);

if($dat=="$tisdata"){
$ok ="checked";

}else{
$ok ="";
}

il check funziona..ma come potrai capire è solo uno inquanto recupero solo il primo valore dell'array [0]....e per recuperarli tutti?

grazie

risposto 8 anni fa
yusizu
modificato 8 anni fa
X 0 X

e perché non dovresti utilizzare un ciclo while? come pretendi di estrarre tutti i record restituiti dalla SELECT?

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

...perchè non riscivo a ruchiamarmi i dati estratti dal db al di fuori del ciclo while ....ma ho risolto così:

$dati = mysql_query("SELECT * FROM disponibilita ");
WHILE($row = mysql_fetch_assoc($dati)){

$dat[] = $row[data_nondisp];

}
....
if(in_array($tisdata, $dat)){
$ok ="checked";
}

grazie ancora x la dritta  :bye:

risposto 8 anni fa
yusizu
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda