Pubblicazione dati su calendario settimanale

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Ciao, mi fa piacere vedere che stai andando avanti bene, io purtroppo causa lavoro ho pochissimo tempo.
La soluzione che hai trovato per i minuti va bene, tutte le soluzioni che funzionano vanno sempre bene.
Esiste in php la funzione str_pad() e nel tuo caso potresti usarla così
PHP:
echo $ore . ":" . str_pad($minuti, 2, '0', STR_PAD_LEFT) . " --- " . $lezione . "<br/>", "Durata " . $durata . " Minuti";
La funzione simplexml_load_file() mettila dopo aver verificato che il file esista altrimenti genera dei Warning php.

Per la somma devi inizializzarla fuori dal ciclo e incrementarla ad ogni iterazione
PHP:
$durataTotale = 0;
foreach ($xml->xpath("/Root/OrarioLezioni/Lezioni") as $value) {
            $durataTotale += $value->Durata;
}
 

armando31

Nuovo Utente
15 Ago 2015
21
0
1
Ciao criric,

:crying::crying:......è da metà pomeriggio, fino ad ora che provo e riprovo.....ho provato ad inserirla pressochè ovunque!! ....spostando la parentesi graffa di chiusura in altrettante posizioni!!!....Ottengo i risultati più bizzarri...e nella migliore delle ipotesi un errore nella colonna riferita al primo giorno per cui il file non esiste!!!!

Dove devo inserire la variabile e la funzione per il calcolo della somma ?.....non ce la posso fare....mi daresti ancora un'aiuto????

ti riposto il codice del file tabella_calendario:

Grazie in anticipo.....mi salvi dal T.S.O. se mi dai una mano!!:confused:

" Commentata trovi anche la funzione nella posizione dove....a logica....credevo andasse scritta "

Codice:
Codice:
<table class="weektable">
    <thead>
	<tr>
            <?php
            	
	    foreach (getDaysOfWeek() as $date) {
                
	        $current = $date == date("Y-m-d") ? "class='current'" : "";

		echo "<th $current>" . formatDay($date) . "</th>";
            }
            ?>
        </tr>
    </thead>
    <tbody>
        <?php

        foreach (getDaysOfWeek() as $date) {
            $current = $date == date("Y-m-d") ? "class='current'" : "";
            echo "<td $current>";
            $file = $date . ".xml";
	    $durataTotale = 0;

$xml = simplexml_load_file($file);

/*foreach ($xml->xpath("/Root/OrarioLezioni/Lezioni") as $value) {
            $durataTotale += $value->Durata;   
print $durataTotale;
}*/
if (file_exists($file))

foreach ($xml->xpath("/Root/OrarioLezioni/Lezioni") as $value ) {
		
		$ora = $value->Ore;
		$minuti = $value->Minuti;
		$lezione = $value->Lezione;
		$durata = $value->Durata;
	
	if ($minuti<29)								
		 echo $ora.":".$minuti."0 --- ".$lezione."<br></br>","Durata ".$durata." Minuti";		
										
	else									
		echo $ora.":".$minuti." --- ".$lezione."<br></br>","Durata ".$durata." Minuti";			   		 
          	
$fr = fopen($file, 'r');
while (!feof($fr))
$riga = fgets($fr);
echo $riga . "<p class='separa'></p>";
       
}  
fclose($fr);
 
            echo "</td>";

}

 ?>
    </tbody>
</table>
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
La funzione print non mi sembra corretta cosi come l'hai scritta.
Non ho i file qui per provare ma la posizione giusta dovrebbe essere questa
PHP:
<table class="weektable">
    <thead>
        <tr>
            <?php
            foreach (getDaysOfWeek() as $date) {
                $current = $date == date("Y-m-d") ? "class='current'" : "";
                echo "<th $current>" . formatDay($date) . "</th>";
            }
            ?>
        </tr>
    </thead>
    <tbody>
        <?php
        foreach (getDaysOfWeek() as $date) {
            $current = $date == date("Y-m-d") ? "class='current'" : "";
            echo "<td $current>";
            $file = $date . ".xml";
            if (file_exists($file)) {
                $xml = simplexml_load_file($file);
                $durataTotale = 0;
                foreach ($xml->xpath("/Root/OrarioLezioni/Lezioni") as $value) {
                    $durataTotale += $value->Durata;
                }
                echo "<p>Totale minuti : $durataTotale </p>";
                foreach ($xml->xpath("/Root/OrarioLezioni/Lezioni") as $value) {

                    $ora = $value->Ore;
                    $minuti = $value->Minuti;
                    $lezione = $value->Lezione;
                    $durata = $value->Durata;
                    echo $ore . ":" . str_pad($minuti, 2, '0', STR_PAD_LEFT) . " --- " . $lezione . "<br/>", "Durata " . $durata . " Minuti";
                    $fr = fopen($file, 'r');
                    while (!feof($fr))
                        $riga = fgets($fr);
                    echo $riga . "<p class='separa'></p>";
                }
                fclose($fr);
            }
            echo "</td>";
        }
        ?>
    </tbody>
</table>
Tutte le funzioni relative al file xml devono stare dentro la condizione di verifica del file
PHP:
if (file_exists($file)) {
 

armando31

Nuovo Utente
15 Ago 2015
21
0
1
P E R F E T T O ! ! !

Tutto sembra funzionare alla perfezione!!! .....GRAZIE Infinite!!!
L'idea che avevo riguardo la realizzazione di questo "mini-progetto"...sembra ormai definirsi nella sua forma ultima!!!...e questo non avrei potuto farlo senza il tuo PREZIOSISSIMO aiuto.

Definisco un po meglio la visualizzazione del tutto e ,appena pronta, posto la visualizzazione finale del calendario....

Ancora grazie

Buonanotte
 

armando31

Nuovo Utente
15 Ago 2015
21
0
1
Ciao criric....come va?....spero tutto ok!

Come promesso, ecco qui la visualizzazione definitiva del calendario delle lezioni...Onestamente credo fosse dovuto mostrartela, visto che , di fatto, il calendario è figlio tuo.

Ecco il link: web1105.altervista.org/Calendario_criric_ins_dati/calendario.php

Ora però ,come denuncia la mia indole da inguaribile appassionato e bramoso di sperimentazione, non ho potuto impedirmi di testare anche la soluzione con archiviazione dei dati su DB ( ti ricordi? se ne parlava ad inizio discussione)

Ho fatto tutto quello che c'era da fare: Ho creato il DB (MySql di altervista) con i relativi campi , preparato lo scipt .php che preleva i dati dai tag xml e li inserisce all' interno del DB, ed infine lo script che successivamente va a prendere i dati dal DB per visualizzarli all'interno del calendario.

Chiaramente però ....ho un problema....NON CAPISCO COME FARE PER INCOLONNARE I DATI NELLA COLONNA CONTENENTE IL RIFERIMENTO ALLA DATA CORRETTA....MA spiego meglio la situazione:

Questo è il DB:
DB_Lezioni.JPG

Come vedi, il campo data è di tipo TEXT . Viene compilato dal tag [CDATA] del file .xml con formato MM/DD/YYYY
--------------------

Questo è lo script con il quale vado a popolare il DB:

PHP:
<?php
// Apro la connessione al DB
// ------
// ------

$host = 'localhost';
$user = 'armando31';
$pass = 'armando31psw';
$db = 'my_armando31';
$con = mysql_connect($host,$user,$pass) or die (mysql_error());
$sel = mysql_select_db($db) or die (mysql_error());

// Recupero il file
$file = "Lezioni.xml";
$xml = simplexml_load_file($file);
	
	// Controllo tutti i tag "Lezioni"
	foreach( $xml->xpath("/Root/OrarioLezioni/Lezioni") as $value ) {
		// Recupero tutti i campi da ogni tag "Lezioni"
		$data = $value->Giorno;
		$ora = $value->Ora;
		$minuti = $value->Minuti;
		$lezione = $value->Lezione;
		
$sql="INSERT INTO Lezioni (data,ora,minuti,lezione) VALUES ('$data','$ora','$minuti','$lezione')";		

		$rssql = mysql_query( $sql );
		
		// Controllo che l'importazione sia avvenuta con successo
		echo ( $rssql ) ? "Importazione avvenuta con successo" : "Errore nella query o connessione al DB mancante";
	
}

//else
//	echo "Nessun file inserito";

?>

L'importazione funziona correttamente! Lo script non prevede nessun form di inserimento dati perchè intendo lanciare l'importazione manualmente semplicemente inserendo il link allo script all'interno del browser e dando l'invio.
Questo perchè l'idea è quella di automatizzare poi la cosa con un'operazione pianificata.
-----------------------

Questa è invece la modifica al file originario "tabella_calendario.php" contenente la SELECT dal DB:

PHP:
<?php

function getDaysOfWeek() {
    $monday = date('Y-m-d', strtotime(date('Y', strtotime('+' . (int) $_REQUEST['week'] . ' Week')) . 'W' . date("W", strtotime('+' . (int) $_REQUEST['week'] . ' Week'))));
    $daysOfWeek = array($monday);
    list($year, $month, $day) = explode("-", $monday);
    for ($days = 1; $days < 7; $days++) {
        $daysOfWeek[] = date("Y-m-d", mktime(0, 0, 0, $month, $day + $days, $year));
    }
    return $daysOfWeek;
}

function formatDay($date) {
    list($year, $month, $day) = explode("-", $date);
    $days = array("Domenica", "Luned&igrave;", "Marted&igrave;", "Mercoled&igrave;", "Gioved&igrave;", "Venerd&igrave;", "Sabato");
    $months = array(1, 'Gennaio', 'Febbraio', 'Marzo', 'Aprile', 'Maggio', 'Giugno', 'Luglio', 'Agosto',
        'Settembre', 'Ottobre', 'Novembre', 'Dicembre');
    $numberDay = date('w', mktime(0, 0, 0, $month, $day, $year));
    return $days[$numberDay] . " " . $day . " " . $months[(int) $month];
}

?>
<div id="infoweek">
    <?php
    list($week, $year) = explode("-", date('W-Y', strtotime(date('Y', strtotime('+' . (int) $_REQUEST['week'] . ' Week')) . 'W' . date("W", strtotime('+' . (int) $_REQUEST['week'] . ' Week')))));
    echo (int) $week . "&deg; settimana $year &nbsp;";
    ?>
</div>
<table class="weektable">
    <thead>

<th class='CalVisite' colspan="7">		       		             
             								       
		Calendario Lezioni Settimanali                                                                                                 
</th>                                                                         

<tr>
            <?php
            foreach (getDaysOfWeek() as $date) {
                $current = $date == date("Y-m-d") ? "class='current'" : "";
                echo "<th $current>" . formatDay($date) . "</th>";
            }
            ?>
        </tr>
    </thead>
 <tbody>
        <?php 


	foreach (getDaysOfWeek() as $date) {
            $current = $date == date("Y-m-d") ? "class='current'" : "";  
	    echo "<td $current>";	    
    
    $client = "localhost"; 
    $nome = "armando31"; 
    $password = "armando31pwd"; 
    $directory = "my_armando31"; 
    $tabella = "Lezioni"; 

    $connessione=mysql_connect($client,$nome,$password); //connessione database 
    mysql_select_db("my_informatica360", $connessione) or die();  

    $sqlquery = "SELECT * FROM $tabella"; 
    $result = mysql_query($sqlquery); 
		
while($r = mysql_fetch_array($result)) 
	    
	echo $r['ora'].":".str_pad($r['minuti'],2, '0' , STR_PAD_LEFT)." --- ".$r['ingressi']."<br/>"; 
 
mysql_close($connessione);

}
fclose($fr);

            echo "</td>";

        ?>
    </tbody>
</table>

Anche questo script funziona, recuperando correttamente le informazioni richieste dal DB.

Il problema è che non essendoci alcuna impostazione di "vincolo" tra il giorno del calendario ed il contenuto del campo "TEXT" data del DB.....il risultato è che l'orario delle lezioni presente nel DB (attualmente riportante i valori riferiti ad un solo giorno) viene stampato per tutti i giorni del calendario!!!

.....Come fare a legare il giorno del calendario a quello del campo data del DB ?...considerando che lo script ragiona per formato data Y-M-D ... mentre il campo del DB (oltre ad essere un TEXT) è in formato MM/DD/YYYY ?????

A I I U U U T T T O O O! ! !.....da solo rischio l'aneurisma!

Altro dilemma è la "famosa" somma della durata delle singole lezioni .... .... dilemma!!

Inutile dire che ho già fatto tutte le prove ed i Test del caso....non tralasciando neanche il consueto tour in giro per il web....dal quale ne sono uscito frastornato da mille e mille chiacchiere....e molto poco di concreto.!!

Spero anche questa volta nel tuo buon cuore e voglia di diffondere conoscenza...che mi hai già ampiamente dimostrato.

Un saluto e ....spero....A presto

Buona giornata
 
Ultima modifica di un moderatore:

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Ciao, puoi semplicemente trasformare la data nel formato che ti serve con explode()
PHP:
$data = "2015-09-05";
$d = explode("-", $data);
$dataperquery = $d[1] . "/" . $d[2] . "/" . $d[0];
echo "SELECT * FROM tabella WHERE data = '" . $dataperquery . "'";
anche se io preferisco salvare le date nel formato DATE di mysql (YYYY-MM-DD) visto che mettono a disposizione numerose funzioni per lavorare sulle date. Vedi qui.
 

armando31

Nuovo Utente
15 Ago 2015
21
0
1
Ciao,
Quindi, immagino, $data = 2015-09-05 sarebbe da indicare come ...$data = Y-m-d
Giusto ?....altrimenti la cosa funzionerebbe solo per il giorno dichiarato nella variabile $data......o sbaglio?

Ho dato un'occhiata al link....molto interessante!!!!
Ma come posso salvare in un campo DATE il valore prelevato da un tag xml <[CDATA]> nel formato che serve a me ??....é possibile secondo te ?.....considera che io non ho possibilitá di modificare l'xml.
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Non serve modificare l'xml, immagino che hai un file che fa le INSERT sul database, prima di inserire la riga formatti la data nel formato di mysql, più o meno il contrario di quello che ti ho postato.
 

armando31

Nuovo Utente
15 Ago 2015
21
0
1
Ciao criric,

scusa il ritardo con cui ti rispondo ma....è stata una latitanza giustificata.....Il mio nipotino di 4 anni ha voluto sperimentare se una macchinina appoggiata sulla tastiera del portatile potesse passare attraverso il coperchio (chiudendolo di botto)........ESPERIMENTO FALLITO !!!!.....ma è stato necessario sostituire l'LCD per poter tornare ad utilizzare il pc

...
...

Comunque , come al solito , le tue dritte si sono dimostrate infallibili ed anche la versione con DB del calendario è perfettamente funzionante.

Nello specifico:

Per la conversione della data dell'xml e successivo inserimento all'interno di un campo date del DB ho utilizzato (come da te suggeritomi)

Codice:
$d = explode("/", $data);

$dataperdb = $d[2]. "/" .$d[0] . "/" .$d[1];

Per visualizzare i dati all'interno della colonna corretta:

Codice:
$sqlquery = "SELECT * FROM $tabella WHERE data = '".$date."'"; 						
$result = mysql_query($sqlquery);

Ed ,in fine, per la somma automatica:
Codice:
$sql = "SELECT SUM(durata) as somma FROM $tabella WHERE data = '".$date."'";					
$sqlT = mysql_query($sql);											
list($somma) = mysql_fetch_array($sqlT);

Anche in questo caso devo dire che senza i tuoi suggerimenti....non sarei arrivato lontano.

Devo dire che più vado avanti più PHP/MySQL mi piace ed appassiona....
Vedremo quali saranno i prossimi sviluppi....sperando di poter contare ancora sui tuoi consigli

Ciao
 
Discussioni simili
Autore Titolo Forum Risposte Data
Michelebozzo [PHP] Rimuovere pubblicazione nome pagina ... aiuto! PHP 7
P Pubblicazione app store gioco alcolico Sviluppo app per iOS 1
E Pubblicazione App Sviluppo app per iOS 5
6 Errore pubblicazione sito con Muse Webdesign e Grafica 0
L Pubblicazione automatica Post su pagina Facebook PHP 3
felino Conoscere la data di pubblicazione di un sito web WordPress 1
I Nuova Legge per pubblicazione di siti Webdesign e Grafica 0
dvdscr Blocco database a seguito della pubblicazione di un post sulla webapp MySQL 3
A Input di pubblicazione testo, come fare? PHP 12
T problema pubblicazione sito in flash Flash 4
R Problema pubblicazione automatica post su pagina facebook PHP 6
Z Pubblicazione video PHP 20
R Problema pubblicazione di MAGENTO sul mio hosting Magento 0
W Problema nella pubblicazione programmata di un articolo WordPress 1
W PlugIn pubblicazione automatica social network WordPress 2
T [Vendo] Servizio di pubblicazione Article marketing su PR-3 vari temi! Offerte e Richieste di scambio links 0
F Problema pubblicazione sito wordpress WordPress 2
M [HTML] Chiarimenti nella pubblicazione FRONT PAGE HTML e CSS 0
S problemi sulla pubblicazione del mio sito HTML e CSS 3
C problema pubblicazione file frontpage Webdesign e Grafica 5
M Pubblicazione filmato Flash 1
K problema di pubblicazione HTML e CSS 15
L problema pubblicazione Flash 10
F cancellazione sito vecchio/pubblicazione sito nuovo HTML e CSS 5
F problemi di pubblicazione con dreamweaver HTML e CSS 2
F problemi pubblicazione con dreamweaver Webdesign e Grafica 5
P pubblicazione in sito web Flash 3
W [SQL Server] Creare una pubblicazione [GROSSO PROBLEMA, !!! AIUTO !!!] Database 0
N pubblicazione sito flash Flash 3
E pubblicazione animazione in flash Flash 2
S consiglio su pubblicazione sito HTML e CSS 0
R AIUTO Pubblicazione su Register.it Hosting 6
S AIUTO PUBBLICAZIONE CON Filezilla SU Dominio HOSTEK.. Hosting 2
K Pubblicazione sito web con Apache da una lan Apache 7
H Problema di pubblicazione HTML e CSS 0
G Problemi pubblicazione sito HTML e CSS 1
W pubblicazione foglio excel HTML e CSS 1
M Pubblicazione foto su script di annunci PHP 0
A pubblicazione sito in PHP su Tiscali PHP 0
D errori su pubblicazione sito PHP 5
M problema con la pubblicazione HTML e CSS 4
F Salvataggio e pubblicazione sito HTML e CSS 8
F Pubblicazione immagine. Webdesign e Grafica 6
C pubblicazione Flash 1
W pubblicazione sito senza FrontPage HTML e CSS 3
Apeweb Front Page e la pubblicazione con Win98 HTML e CSS 0
0 Pubblicazione finale !!! Flash 1
N pubblicazione pulsanti Flash 2
S problema con smartFTP-pubblicazione sito Windows e Software 3
R pubblicazione di asp Classic ASP 2

Discussioni simili