Problema con calendario

  • Creatore Discussione Creatore Discussione thaypan
  • Data di inizio Data di inizio

thaypan

Nuovo Utente
14 Mag 2012
10
0
0
Ciao, ho trovato su internet un piccolo script in php per un calendario... l'unico problema è che è quadrato... mentre io avrei bisogno che fosse rettangolare cioè non in base ai giorni dal lunedì alla domenica ma in base ai gioni di calendario avendo solo due righe una con i giorni del mese (1,2,3,4,...., 31) e una con i giorni della settimana (L,M,M,G,V,S,D)...
Ho provato a modificar ei paramentri da solo ma dopo molti tentativi (alla cieca) mi sto arrendendo...
Qualcuno sa come modificarlo? Almeo per farlo uscire rettangolare invece che quadrato?
Grazie mille
Ciao

PHP:
<?php

// if ym is set, i.e. somebody clicked on next or previous months link
if(isset($_GET["ym"]))
{
	$year = (int)substr($_GET["ym"], 0, 4);
	$month = (int)substr($_GET["ym"], 4, 2);
}
else	// otherwise take current month & year
{
	$month = date("m", mktime(0,0,0,date('m'),1,date('Y')));
	$year = date("Y", mktime(0,0,0,date('m'),1,date('Y')));
}

$skip = date("w", mktime(0,0,0,$month,1,$year)); // days to skip in 1 row of week.
$daysInMonth = date("t", mktime(0,0,0,$month,1,$year));	// total number of dates in the month.
$calendar_head = '';	// for calendar head
$calendar_body = '';	// for calendar boday
$day = 1;	// For date in calendar

for($i = 0; $i < 6; $i++) // Outer loop for weeks
{
	$calendar_body .= '<tr>';	// start row tag
	for($j = 0; $j < 7; $j++)	// Inner loop for week days
	{
		if(($skip > 0)||($day > $daysInMonth)) // display blank till 1 day of month or after total numnber of days in that month
		{
			$calendar_body .= '<td>&nbsp;</td>'; 
			$skip--;
		}
		else
		{
			if($j == 0)	// if its Sunday then add class holiday
				$calendar_body .= '<td class="holiday">'.$day.'</td>'; 
			else	// otherwise add day class
				$calendar_body .= '<td class="day">'.$day.'</td>'; 
				
			$day++; // Increment $day
		}
		
	}	// inner loop closes
	$calendar_body .= '</tr>'; // end row tag
} // outer loop closes

// Calendar head section
$calendar_head = '
  <tr>  	
	<th colspan="2"><a href="?ym='.date("Ym", mktime(0,0,0,$month-1,1,$year)).'">&laquo; Previous Month</a></th>
  	<th colspan="3">'.date("F, Y", mktime(0,0,0,$month,1,$year)).'</th>
  	<th colspan="2"><a href="?ym='.date("Ym", mktime(0,0,0,$month+1,1,$year)).'">Next Month &raquo;</a></th>
  </tr>
  <tr>
    <th>Sunday</th>
    <th>Monday</th>
    <th>Tuesday</th>
    <th>Wednesday</th>
    <th>Thursday</th>
    <th>Friday</th>
    <th>Saturday</th>
  </tr>';
// PHP code for calendar ends
  
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>A Calendar Built in PHP</title>

<style type="text/css">

#calendar tbody tr{ height:100px; }
#calendar td{ width:100px; }
#calendar th{background-color:#CCCC99;}
.day{ background-color:#CCFFCC; }
.holiday{ background-color:#FFCC66; }

</style>

</head>

<body>

<h2>A Calendar Built in PHP</h2>

<!-- Table to display calendar -->
<table id="calendar" width="710" border="1" cellspacing="0" cellpadding="5">
<thead> 
  <?php echo $calendar_head; ?>
</thead>
<tbody>
	<?php echo $calendar_body; ?>
</tbody>
</table>
<!-- Table to display calendar -->

<p>This the online demo for the blog post <a href="http://rohitsengar.cueblocks.net/">Build Calendar with PHP</a>.<br />&copy; Rohit Singh Sengar <a href="http://rohitsengar.cueblocks.net/">http://rohitsengar.cueblocks.net/</a></p>

</body>
</html>
 
Ciao,
non ho seguito lo script che hai postato
ho cercato di far eseguire due cicli per le due righe che ti servono

prova a vedere se riesci a prendere spunto:

PHP:
<?php

$month = date('m');
$year = date('Y');

$giorni_settimana = array(1, "Lun", "Mar", "Mer", "Gio", "Ven", "Sab", "Dom");

$time_primo_del_mese = mktime(0, 0, 0, $month, 1, $year);
$primo_del_mese = date('w', $time_primo_del_mese);

$giorni_nel_mese = cal_days_in_month(CAL_GREGORIAN, $month, $year);

echo "<table border='1'>";
echo "<tr>";
$g = $primo_del_mese;
for ($i = 1; $i <= $giorni_nel_mese; $i++) {
    echo "<td>" . $giorni_settimana[$g] . "</td>";
    if ($g == 7) {
        $g = 1;
    } else {
        $g++;
    }
}
echo "</tr>";
echo "<tr>";
for ($i = 1; $i <= $giorni_nel_mese; $i++) {
    echo "<td>$i</td>";
}
echo "</tr>";
echo "</table>";
?>

Non ho commentato visto le poche righe di codice ma se hai bisgono chiedi pure

Non ho testato a dovere, a te l'onore ;)
 
ciao
@criric
si funziona, mi sono permesso alcune modifiche estetiche
PHP:
<style type="text/css">
table{
	font-family:Arial, Helvetica, sans-serif;
	font-size:12px;
	text-align:center;
	background-color:#F1F1F1;
}
.dom{
	background-color:#FF6600;
}
.sab{
	background-color: #FFFFCC;
}
.oggi{
	border-width:2px;
	border-color: #009900;
	border-style:solid;
	font-weight:bold;
}
.me{
	font-family:Arial, Helvetica, sans-serif;
	font-size:14px;
	font-weight:bold;
}
</style>
<?php 
$month = date('m'); 
$year = date('Y'); 
$oggi= date("d")+0;
$giorni_settimana = array(1, "Lun", "Mar", "Mer", "Gio", "Ven", "Sab", "Dom"); 
$mese=array('Gennaio','Febbraio','Marzo','Aprile','Maggio','Giugno','Luglio','Agosto','Settembre','Ottobre','Novembre','Dicembre');
$time_primo_del_mese = mktime(0, 0, 0, $month, 1, $year); 
$primo_del_mese = date('w', $time_primo_del_mese); 
$giorni_nel_mese = cal_days_in_month(CAL_GREGORIAN, $month, $year); 
echo "<span class=\"me\">".$mese[($month-1)]."</span>";
echo "<table border='1'>"; 
echo "<tr>"; 
$g = $primo_del_mese; 
for ($i = 1; $i <= $giorni_nel_mese; $i++) { 
    $classe="";
	if($giorni_settimana[$g]=="Dom"){
		$classe=" class=\"dom\"";
	}elseif($giorni_settimana[$g]=="Sab"){
		$classe=" class=\"sab\"";
	}
	echo "<td $classe>" . $giorni_settimana[$g] . "</td>"; 
    if ($g == 7) { 
        $g = 1; 
    } else { 
        $g++; 
    } 
} 
echo "</tr>"; 
echo "<tr>"; 
for ($i = 1; $i <= $giorni_nel_mese; $i++) { 
    $classe="";
	if($i==$oggi){
		$classe=" class=\"oggi\"";
	}
	echo "<td $classe>$i</td>"; 
} 
echo "</tr>"; 
echo "</table>"; 
?>
 
Si tutto funzione egregiamente, anche il restayling è bello...grazie
A questa tabella però ho aggiunto un altro rigo, semplicemente facendo il copia e incolla ... solo che vorrei che per ogni cella della tabella uscisce un campo input nel quale posso inserire dei numeri, così se il mese ha 28 o 30 o 31 giorni usciranno rispettivamente 28, 30 o 31 campi input diversi uno per ogni giorno che io poi salverò in un database (per il quale ho già studiato come fare) ... solo che vorrei che il numero che l'utente inserisce nel campo input (ad esempio nel 14 maggio) non si confonda con quello di un altro giorno del mese.
Ho script di questo tipo presi da altri siti ma sono molto lunghi e complicati e io vorrei una cosa semplice nella quale so come mettere mano.
Grazie ciao

PHP:
// secondo rigo
echo "<tr>"; 
echo "</tr>"; 
echo "<tr>"; 
//qui ci vorrebbero tante caselline quante sono i giorni del mese.
for ($i = 1; $i <= $giorni_nel_mese; $i++) { 
    $classe="";
    if($i==$oggi){
        $classe=" class=\"oggi\"";
    }
    echo "<td $classe>$i</td>"; 
} 
echo "</tr>"; 
//chiudi tabella
echo "</table>";
 
Per aggiungere un riga in piu con un campo input è piuttosto semplice:

PHP:
echo "<tr>";
for ($i = 1; $i <= $giorni_nel_mese; $i++) {
    
    echo "<td><input size='2' type='text' name='giorno_" . $i . "'/></td>";
}
echo "</tr>";

bisogna vedere cosa ci vuoi fare dopo

come name dei campii avrai

giorno_1
giorno_2
etc
 
ciao
per ora ho trovato quest'idea, prova anche questa
PHP:
<style type="text/css">
table{
	font-family:Arial, Helvetica, sans-serif;
	font-size:12px;
	text-align:center;
	background-color:#F1F1F1;
}
td{
	border-width:1px;
	border-color:#000000;
	border-style:inset;
}

.dom{
	background-color:#FF6600;
}
.sab{
	background-color: #FFFFCC;
}
.oggi{
	border-width:2px;
	border-color: #009900;
	border-style: outset;
	font-weight:bold;
}
.me{
	font-family:Arial, Helvetica, sans-serif;
	font-size:14px;
	font-weight:bold;
}
input{
width:25px;}
</style>
<?php
if(isset($_POST['invia'])){
	unset($_POST['invia']);
	echo "mese. ".$_POST['quale_mese']."<br>";
	foreach($_POST['valore'] as $chiave => $valore){
		if($valore != ""){
			echo "&nbsp;&nbsp;&nbsp;il giorno $chiave è stato trasmesso il valore $valore<br>";
			//qui puoi fare quello che ti serve
		}
	}
}
$month = date('m'); 
$year = date('Y'); 
$oggi= date("d")+0;
$giorni_settimana = array(1, "Lun", "Mar", "Mer", "Gio", "Ven", "Sab", "Dom"); 
$mese=array('Gennaio','Febbraio','Marzo','Aprile','Maggio','Giugno','Luglio','Agosto','Settembre','Ottobre','Novembre','Dicembre');
$time_primo_del_mese = mktime(0, 0, 0, $month, 1, $year); 
$primo_del_mese = date('w', $time_primo_del_mese); 
$giorni_nel_mese = cal_days_in_month(CAL_GREGORIAN, $month, $year); 
echo "<span class=\"me\">".$mese[($month-1)]."</span>";
echo "<table>"; 
echo "<tr>"; 
$g = $primo_del_mese; 
for ($i = 1; $i <= $giorni_nel_mese; $i++) { 
    $classe="";
	if($giorni_settimana[$g]=="Dom"){
		$classe=" class=\"dom\"";
	}elseif($giorni_settimana[$g]=="Sab"){
		$classe=" class=\"sab\"";
	}
	echo "<td $classe>" . $giorni_settimana[$g] . "</td>"; 
    if ($g == 7) { 
        $g = 1; 
    } else { 
        $g++; 
    } 
} 
echo "</tr>"; 
echo "<tr>"; 
echo "<form name=\"form1\" method=\"post\" action=\"".$_SERVER['PHP_SELF']."\">";
for ($i = 1; $i <=$giorni_nel_mese; $i++) {
	echo "<td><input name=\"valore[$i]\" type=\"text\" id=\"valore\" size=\"2\" maxlength=\"2\"></td>";
}
echo "<input name=\"quale_mese\" type=\"hidden\" value=\"".$mese[($month-1)]."\">";
echo "<br><input type=\"submit\" name=\"invia\" value=\"in\">";
echo "</form>";
echo "<tr>"; 
echo "<tr>"; 
for ($i = 1; $i <= $giorni_nel_mese; $i++) { 
    $classe="";
	if($i==$oggi){
		$classe=" class=\"oggi\"";
	}
	echo "<td $classe>$i</td>"; 
} 
echo "</tr>"; 
echo "</table>"; 
?>
 
dopo l'esempio di borgo mi sono accorto che il mio non andava tanto bene meglio cosi:

PHP:
echo "<tr>";
for ($i = 1; $i <= $giorni_nel_mese; $i++) {

    echo "<td><input size='2' type='text' name='giorno_" . $i . $month . $year . "'/></td>";
}
echo "</tr>";

i name saranno cosi

giorno_1052012
giorno_2052012
etc

con la data completa

vedi, valuta, scrivi un po di codice e se hai dubbi riposta :D
 
Allora, procediamo per ordine, ho aggiunto due righe sotto la tabella e ci ho inserito i campi di input... fin qui penso che sia tutto chiaro... ora vorrei sapere come fare a richiamare le varie celle di input (che non so quante ne sono perché possono variare in base ai giorni del mese) così che mi invia i dati immessi o ad una altra pagina (ad esmepio col metodo $_POST come ho fatto col file "elaboradati1.php") oppure ad un file txt ... oppure a MySQL.

Per ora mi servirebbe solo capire
1) come far centrare la scritta del mese cioè: echo "<span class=\"me\">".$mese[($month-1)]."</span>";
2) fare in modo di capire come richiamare il file di input in modo che col tasto INVIA riesco ad inviare i dati altrove (che è la cosa a cui veramente tengo di più).
Di script che inviano tali dati (i c.d. form) ne ho tanti (sia verso txt che verso MySql) e li ho visti e rivisti e so come funzionano ma in quei file la cella di input ha un nome definito e un numero certo che non variano di volta in volta come succede invece qui per via dei giorni.


PHP:
<style type="text/css">
table{
    font-family:Arial, Helvetica, sans-serif;
    font-size:12px;
    text-align:center;
    background-color:#F1F1F1;
}
.dom{
    background-color:#FF6600;
}
.sab{
    background-color: #FFFFCC;
}
.oggi{
    border-width:2px;
    border-color: #009900;
    border-style:solid;
    font-weight:bold;
}
.me{
    font-family:Arial, Helvetica, sans-serif;
    font-size:14px;
    font-weight:bold;
}
</style>
<?php 
$month = date('m'); 
$year = date('Y'); 
$oggi= date("d")+0;
$giorni_settimana = array(1, "Lun", "Mar", "Mer", "Gio", "Ven", "Sab", "Dom"); 
$mese=array('Gennaio','Febbraio','Marzo','Aprile','Maggio','Giugno','Luglio','Agosto','Settembre','Ottobre','Novembre','Dicembre');
$time_primo_del_mese = mktime(0, 0, 0, $month, 1, $year); 
$primo_del_mese = date('w', $time_primo_del_mese); 
$giorni_nel_mese = cal_days_in_month(CAL_GREGORIAN, $month, $year); 

//creo la tabella
echo "<table border='1'>"; 

// faccio uscire la scritta del mese corrente
echo "<tr>";
echo "<td>";
echo "<span class=\"me\">".$mese[($month-1)]."</span>";
echo "</td>";
echo "</tr>";

//primo rigo che riporta i giorni del mese
echo "<tr>"; 
$g = $primo_del_mese; 
for ($i = 1; $i <= $giorni_nel_mese; $i++) { 
    $classe="";
    if($giorni_settimana[$g]=="Dom"){
        $classe=" class=\"dom\"";
    }elseif($giorni_settimana[$g]=="Sab"){
        $classe=" class=\"sab\"";
    }
    echo "<td $classe>" . $giorni_settimana[$g] . "</td>"; 
    if ($g == 7) { 
        $g = 1; 
    } else { 
        $g++; 
    } 
} 
echo "</tr>"; 
//secondo rigo coi giorni della settimana
echo "<tr>"; 
for ($i = 1; $i <= $giorni_nel_mese; $i++) { 
    $classe="";
    if($i==$oggi){
        $classe=" class=\"oggi\"";
    }
    echo "<td $classe>$i</td>"; 
} 
echo "</tr>"; 

// terzo rigo input
echo "<tr>";
for ($i = 1; $i <= $giorni_nel_mese; $i++) {
    echo "<td><input size='1' type='text' name='giorno_" . $i . "'/></td>";
}
echo "</tr>";

//quarto rigo input
echo "<tr>";
for ($i = 1; $i <= $giorni_nel_mese; $i++) {
echo "<td><input size='1' type='text' name='giorno_" . $i . $month . $year . "'/></td>";
}
echo "</tr>";

//chiudi tabella
echo "</table>"; 

?>

   <BR>
   <FORM METHOD="post" ACTION="elaboradati1.php">
     <INPUT TYPE="text" NAME="giorno_">
     <BR>
     <INPUT TYPE="submit" VALUE="Invia dati">
     <INPUT TYPE="reset" VALUE="cancella i dati immessi">
   </FORM>

la pagina elaboradati1.php ha un semplicissimo codice

PHP:
<?php
   $strrisultato = $_POST['giorno_'];
   echo "il testo inserito è: <b> $strrisultato </b>";
 ?>

il codice di questa pagina vorrei poi che non fosse inserito in un secondo file ma vorrei che fosse tutto in uno solo che non so come inserirela , cioè come dire ad ACTION non inviare i dati a "elaboradati1.php" ma seponili nella stessa pagina.
 
Quello che avevo io in mente ra un semplice calendario orizzontale, con dei campi di input uno per ogni giorno + uno totale che fa la somma dei vari impoti inseriti nei vari giorni e infine il tutto inviato ad un file txt o ad un database.
Per la somma dei valori ho capito come fare anche leggendo vari script ma c'è un poblema... mi danno il totale solo dopo che clicco sul pulsante che fa fare la somma e non viene invece calcolata in automatico appena riempio il campo input con l'importo...dicono che per questo dovrei usare ajax... :confused:
 
ciao
....fare a richiamare le varie celle di input ...non so quante ne sono perché possono ....
se guardi nel mio scrip lo vedi
<input name=\"valore[$i]\" type=\"text\" id=\"valore\" size=\"1\" maxlength=\"1\">
cioè le celle hanno nome di un array valore[] e quindi, indipendentemente dal loro numero le leggi col coclo foreach
PHP:
//....
foreach($_POST['valore'] as $chiave => $valore){ 
        if($valore != ""){ 
            echo "&nbsp;&nbsp;&nbsp;il giorno $chiave è stato trasmesso il valore $valore<br>"; 
            //qui puoi fare quello che ti serve 
        } 
//....
cioè i valori inviati avranno i nomi in funzione dei giorni del mese
$_POST['valore'][1]......$_POST['valore'][30]
$_POST['valore'][1]......$_POST['valore'][31]
$_POST['valore'][1]......$_POST['valore'][28] (o $_POST['valore'][29])

come far centrare la scritta del mese cioè: echo "<span class=\"me\">".$mese[($month-1)]."</span>";
vai sul css e alla classe me aggiungi text-align:center;

...che col tasto INVIA riesco ad inviare i dati altrove....
in che senzo altrove, intendi ad un'altra pagina?
se è così nell'action del form al posto di $_SERVER['PHP_SELF'] (che prende il nome della pag corrente) devi mettere il nome della pagina a cui vuoi inviarli.
se intendi dire di inviarli es. a mysql devi elaborarli dopo che li hai inviati all'interno del
PHP:
//...
if(isset($_POST['invia'])){ 
	//dopo averli letti qui all'interno devi mettere il codice es. per salvarli in un db o scriverli in un file txt
}
//...
per fare la somma dei dati (sempre entro quell'if) metti
PHP:
//....
$somma=0;
foreach($_POST['valore'] as $chiave => $valore){ 
        if($valore != ""){ 
            echo "&nbsp;&nbsp;&nbsp;il giorno $chiave è stato trasmesso il valore $valore<br>"; 
            $somma=$somma+$valore
			//qui puoi fare quello che ti serve 
        } 
		echo "la somma è $somma";
}
//......
poi ti hanno detto giusto, se vuoi visualizzare la somma man mano che inputi i valori devi usare ajax

ultima cosa, forse la più importante:
lo script che hai postato non funzia: i campi di input sono fuori dal form e quindi non vengono trasmessi

p.s.
per trasmettere i campi dei giorni puoi usare anche il metodo che ti ha detto criric, ma ti complichi la vita
a. devi trasmettere anche il numero di giorni del mese
b. alla ricezione devi far al posto del foreach un ciclo for e riscostruire i nomi da dare al $_POST
 
Ho aggiunto una funzione javascript che fa la somma dei dati inseriti al mio esempio

così vi faccio vedere cosa avevo in mente

PHP:
<script type="text/javascript">
    function somma_valori(form) {        
        var elementi = form.elements.length;
        var somma = 0;
        for(var i = 0; i < elementi; i++){
            if(form.elements[i].name != "invia") {
                var valore = parseInt(form.elements[i].value);
                if(isNaN(valore))
                    valore = 0;                
                somma = somma + valore;
            }
        }
        document.getElementById('somma').innerHTML = somma
    }
</script>
<style type="text/css">
    table{
        font-family:Arial, Helvetica, sans-serif;
        font-size:12px;
        text-align:center;
        background-color:#F1F1F1;
    }
    .dom{
        background-color:#FF6600;
    }
    .sab{
        background-color: #FFFFCC;
    }
    .oggi{
        border-width:2px;
        border-color: #009900;
        border-style:solid;
        font-weight:bold;
    }
    .me{
        font-family:Arial, Helvetica, sans-serif;
        font-size:14px;
        font-weight:bold;
    }
</style>
<?php
$month = date('m');
$year = date('Y');
$oggi = date("d") + 0;
$giorni_settimana = array(1, "Lun", "Mar", "Mer", "Gio", "Ven", "Sab", "Dom");
$mese = array('Gennaio', 'Febbraio', 'Marzo', 'Aprile', 'Maggio', 'Giugno', 'Luglio', 'Agosto', 'Settembre', 'Ottobre', 'Novembre', 'Dicembre');
$time_primo_del_mese = mktime(0, 0, 0, $month, 1, $year);
$primo_del_mese = date('w', $time_primo_del_mese);
$giorni_nel_mese = cal_days_in_month(CAL_GREGORIAN, $month, $year);
echo "<span class=\"me\">" . $mese[($month - 1)] . "</span>";


echo "<table border='1'>";
echo "<form action='elabora.php' method='post'>";
echo "<tr>";
$g = $primo_del_mese;
for ($i = 1; $i <= $giorni_nel_mese; $i++) {
    $classe = "";
    if ($giorni_settimana[$g] == "Dom") {
        $classe = " class=\"dom\"";
    } elseif ($giorni_settimana[$g] == "Sab") {
        $classe = " class=\"sab\"";
    }
    echo "<td $classe>" . $giorni_settimana[$g] . "</td>";
    if ($g == 7) {
        $g = 1;
    } else {
        $g++;
    }
}
echo "</tr>";
echo "<tr>";
for ($i = 1; $i <= $giorni_nel_mese; $i++) {
    $classe = "";
    if ($i == $oggi) {
        $classe = " class=\"oggi\"";
    }
    echo "<td $classe>$i</td>";
}
echo "</tr>";
echo "<tr>";
for ($i = 1; $i <= $giorni_nel_mese; $i++) {
    echo "<td><input type='text' onkeyup='somma_valori(this.form)' size='1' name='" . $year . "-" . $month . "-" . $i . "'/></td>\n";
}
echo "</tr>";
echo "<tr>";
echo "<td colspan='$i'>";
echo "Totale : <span id='somma'>0</span> &nbsp;";
echo "&nbsp;<input type='submit' name='invia' value='Invia'/>";
echo "</td>";
echo "</tr>";
echo "</form>";
echo "</table>";
?>

nella pagina richiamata dal form che io ho chiamato elabora.php recuperi i dati piu o meno in questo modo

PHP:
<?php

foreach ($_POST as $key => $value) {
    (int) $value;

    if ($value != 0) {
        echo $key . "->" . $value . "<br/>";
    }
}
?>

nel calendario mancherebbe un controllo "numerico" sui dati inseriti che comunque vengono trasformati in intero sia dal js che da php

:byebye:
 
Grazie, grazie e ancora grazie, ..... che dire siete veramente bravi!
In due giorni avete fatto ciò che io non sono riuscito a fare. Erano mesi che stavo cercando su sourceforge uno scirpt già pronto che facesse questo ma non riuscivo a trovarne uno adatto a me.

Grazie mille 0:)

Ora lo studio bene e dopo provvederò ad implementarlo con nuove idee. :byebye:
 
ciao
ricordati che se usi il metodo criric devi unsettare il submit altimenti ti cicla e sampa anche quello
PHP:
<?php
unset($_POST['invia']);//ed eventuali altri post che non c'entrano
foreach ($_POST as $key => $value) {
    (int) $value;

    if ($value != 0) {
        echo $key . "->" . $value . "<br/>";
    }
}
?>
 
Ciao a tutti,
ho inserito questo script nella pagina elabora.php ma stavo pensando che sarebbe stato opportuno che la pagina elabora avesse anche lei il calendario della pagina index.php la quale poi invia i dati alla pagina elabora e i dati inseriti verranno messi nello stesso punto dei campi input in modo da non poter essere più modificati.
Ho quindi inserito nella pagina esegui.php il codice della pagina precedente ma non so dove inserire il codice seguente...

PHP:
<?php
unset($_POST['invia']);//ed eventuali altri post che non c'entrano
foreach ($_POST as $key => $value) {
    (int) $value;

    if ($value != 0) {
        echo $key . "->" . $value . "<br/>";
    }
}
?>

senza far più apparire nè i campi input nè il tasto invia.

Mi escono tutti e due i codici come se fossero due cose staccate, inceve i dati inseriti dovrebbero sostituirsi alle celle di input... senza dover indicare il giorno...
Bha :crying:
 
La pagina elabora.php si deve solo occupare di elaborare i dati e di aggiornare il database o il file di testo,
quando avrà finito se tutto è andato bene puoi tornare a index.php in diversi modi

per esempio con header()

PHP:
<?php
unset($_POST['invia']);//ed eventuali altri post che non c'entrano
foreach ($_POST as $key => $value) {
    (int) $value;

    // controlli i dati
    // 
    // li aggiorni
    
    if($tuttoBene == true) {
        header('location:index.php');
    }
}
?>

Nella index dovrai trovare il modo di leggere i dati memorizzati e mostrarli nelle apposite caselle

cosi quando ritorni da elabora.php si aggiornerà anche le index
 
un passo avanti

Ciao, penso di aver fatto un bel basso avanti (nel mio piccolo :mavieni: ) ... sono riuscito a fare quello che vi avevo mostrato in foto...
quindi ora ci sono 2 pagine ... una che genera il calendario con tanti campi input uno per ogni giorno del mese e una seconda pagina elabora.php come fatto da criric nella quale però i dati vengono mostrati all'interno della stessa struttura del calendario solo che al posto dei campi input ci sono i valori della variabile $value provenienti dalla pagina precedente ... quindi avrei risolto ... solo che ho un paio di problemini di sistemazione che non so proprio come risolvere...
quindi vi chiedo aiuto:
1) i campi vengono riportati nei giorni coretti solo se inserisdo i dati in ogni input x tutti i giorni... se per un giorno salto tali dati si spostano al giono prima ad esmepio se il mese ha 31 giorni ed inserisco neli 31 campi input 31 valori è tutto ok, se invece salto un campo e non ci inserisco niente la sua cella non sarà "vuota" ma avrà il valore del giorno successivo sfasandomi così la coincidenza tra dati inseriti e risultati avuti. :crying:
2) altro problema è la tabella di elabora.php che non resta identica alla pagina precedente una volta ricevuti i dati ma si restringe in modo antiestetico. :dipser:
3) ed infine sono riuscito a riportarmi il valore dei campi input da una pagina all'altra ma on riesco a riportarmi anche il valore del TOTALE
Grazie
Ciao

Vi posto solo lo script di elabora.php visto che quello di index.php è già presente in questa discussione.

PHP:
<script type="text/javascript">
    function somma_valori(form) {        
        var elementi = form.elements.length;
        var somma = 0;
        for(var i = 0; i < elementi; i++){
            if(form.elements[i].name != "invia") {
                var valore = parseInt(form.elements[i].value);
                if(isNaN(valore))
                    valore = 0;                
                somma = somma + valore;
            }
        }
        document.getElementById('somma').innerHTML = somma
    }
</script>
<style type="text/css">
    table{
        font-family:Arial, Helvetica, sans-serif;
        font-size:12px;
        text-align:center;
        background-color:#F1F1F1;
    }
    .dom{
        background-color:#FF6600;
    }
    .sab{
        background-color: #FFFFCC;
    }
    .oggi{
        border-width:2px;
        border-color: #009900;
        border-style:solid;
        font-weight:bold;
    }
    .me{
        font-family:Arial, Helvetica, sans-serif;
        font-size:14px;
        font-weight:bold;
    }
</style>
<?php
$month = date('m');
$year = date('Y');
$oggi = date("d") + 0;
$giorni_settimana = array(1, "Lun", "Mar", "Mer", "Gio", "Ven", "Sab", "Dom");
$mese = array('Gennaio', 'Febbraio', 'Marzo', 'Aprile', 'Maggio', 'Giugno', 'Luglio', 'Agosto', 'Settembre', 'Ottobre', 'Novembre', 'Dicembre');
$time_primo_del_mese = mktime(0, 0, 0, $month, 1, $year);
$primo_del_mese = date('w', $time_primo_del_mese);
$giorni_nel_mese = cal_days_in_month(CAL_GREGORIAN, $month, $year);
echo "<span class=\"me\">" . $mese[($month - 1)] . "</span>";


echo "<table border='1'>";
echo "<form action='elabora.php' method='post'>";
echo "<tr>";
$g = $primo_del_mese;
for ($i = 1; $i <= $giorni_nel_mese; $i++) {
    $classe = "";
    if ($giorni_settimana[$g] == "Dom") {
        $classe = " class=\"dom\"";
    } elseif ($giorni_settimana[$g] == "Sab") {
        $classe = " class=\"sab\"";
    }
    echo "<td $classe>" . $giorni_settimana[$g] . "</td>";
    if ($g == 7) {
        $g = 1;
    } else {
        $g++;
    }
}
echo "</tr>";
echo "<tr>";
for ($i = 1; $i <= $giorni_nel_mese; $i++) {
    $classe = "";
    if ($i == $oggi) {
        $classe = " class=\"oggi\"";
    }
    echo "<td $classe>$i</td>";
}
echo "</tr>";

// applicazione "esponi dati"
unset($_POST['invia']); //faccio unset di post altrimenti mi inia anche quello come pure gli eventuali altri post che non c'entrano
foreach ($_POST as $key => $value) {
	(int) $value;
if ($value != 0) {
	echo "<td>" . $value . "</td>";
	}
}

// --> FINE RIGO 2
echo "<tr>";
echo "<td colspan='$i'>";
echo "Totale : <span id='somma'>0</span> &nbsp;";
echo "&nbsp;<input type='submit' name='invia' value='Invia Presenze'/>"; // è il tasto invia che diventerà il tasto "invia presenze in definitiva"
echo "</td>";
echo "</tr>";
echo "</form>";
echo "</table>";

?>
 

Discussioni simili