Pubblicazione dati su calendario settimanale

armando31

Nuovo Utente
15 Ago 2015
21
0
1
Ciao a tutti, spero sia la sezione giusta...

Volevo condividere con voi questa mia idea e chiedervi una mano nel realizzarla

Ho scaricato questo calendario settimanale in jquery
***********
e l'ho modificato nel layout secondo le mie esigenze
***********

Adesso la vera sfida....per me che mi impegno e mi scervello ma che sono un vero profano in materia.....è la seguente:

Ho un database MySql dove ho delle tabelle che hanno come nome delle date (es. 15/08/2015) e che contengono i campi:

ora , minuti , lezione

Vorrei fare in modo da avere nel calendario la visualizzazione di queste informazioni in modo che siano consultabili avanti ed indietro nel tempo....
tipo:

LUNEDI..................| MARTEDI ...............| MERCOLEDI |GIOVEDI | VENERDI | SABATO | DOMENICA |
9 AGOSTO .............|10 AGOSTO..............|11 AGOSTO |12 AGOSTO|13 AGOSTO|14 AGOSTO| 15 AGOSTO |
---------------------------------------------------------------------------------------------------
10:00---ITALIANO | 10:00---GRECO....|
12:30---STORIA....| 12:00---ITALIANO|
14:00---LATINO....| 14:00---STORIA...|
16:00---GRECO.....| 16:00---LATINO...|

il problema è che non ho minimamente idea di quale sia il codice da scrivere....ed in quale file vada scritto....

Ammetto di essermi impegnato , anche solo nella modifica del codice jquery per avere il calendario così come lo volevo io ma ....adesso proprio non riesco ad andare avanti

Spero abbiate voglia di armi una mano nella realizzazione del mio "progettino"
 
Ultima modifica di un moderatore:

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Ciao, i miei browser bloccano il download dal sito dropcanvas, problemi di sicurezza. Elimino i link.
Puoi caricare direttamente lo zip qui sul sito o direttamente il codice da analizzare.
Per il tuo progettino ti basta creare un file json dei risultati delle query e assegnarlo alla varibile eventData
Codice:
var eventData = $.getJSON("paginadati.php");
Non hai specificaro quale linguaggio utilizzi per connetterti al database, nel caso fosse php la funzione da utilizzare è json_encode()
PHP:
echo json_encode($array, JSON_NUMERIC_CHECK);
 
Ultima modifica:

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
praticamente hai commentato qualche funzione qua e la e lo script ha smesso di funzionare.
se ho capito quello che ti serve, questo plugin jquery è forse troppo.
ti basta una tabella formattata con i css e un paio di cicli php per creare il calendario.
 

armando31

Nuovo Utente
15 Ago 2015
21
0
1
Ciao criric,

beh che il codice sia sicuramente sporco.....non c'è dubbio!!!! D'altronde come anticipavo, io ci provo per amore e passione della materia.....ma sono assolutamente appena arrivato in questo mondo. L'esigenza stessa di partire da un calendario precompilato....ne è la dimostrazione....ne sono consapevole.

Hai percaso qualche dritta, guida, suggerimento....insomma un modo per , non senza il mio impegno, riuscire a cominciare a mettere qualche mattoncino in più ?
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
L'analisi del progetto è fondamentale. Bisogna capire bene come deve presentarsi il lavoro finito. E' sufficiente disegnarlo su un foglio di carta.
A te basta incolonnare i dati che hai in tabella ? mi pare di aver capito che non ti interessa ne la riga con l'orario ne la possibilità di inserire nuovi record. In questo caso ti basterebbe creare la tabella al momento che carichi la pagina. Qui trovi funzioni utili per gestire le settimane. Potrei postarti una bozza stasera o al massimo domani.
In caso contrario terrei il plugin jquery cosi come lo hai trovato e lavorerei sui dati json.
 

armando31

Nuovo Utente
15 Ago 2015
21
0
1
Ciao cricric,
in realtà io l'analisi del progetto l'ho fatta, per questo quando ho trovato quel plugin mi sono subito fermato su quello....era esattamente quello che volevo!! con la possibilità di scorrere le settimane avanti ed indietro nel tempo ed il giorno corrente evidenziato.

Per capirci meglio quello che visivamente vorrei io è esattamente questo:
CALENDARIO.JPG

Al contrario,quindi, la riga con i giorni della settimana mi interessa molto , ed anche il fatto che , qualora vengano apportate modifiche al db dove sono presenti i dati da pubblicare , il calendario ne visualizzi l'aggiornamento.....anche se le modifiche non dovessero riguardare la settimana in corso.
Questo pensavo di farlo schedulando ogni tot tempo il file .php che effettua il prelevamento dei dati dal db.

Io mi blocco "come un bambino difronte ad un cartone animato di PeppaPig" :)......nel momento in cui devo scrivere il codice (al posto e nel file giusto tralaltro....immagino nel file .htm) per far si che i dati vengano inseriti nella colonna riguardante la data corretta.

Quindi...immagino : Prendi i dati che sono inseriti nella tabella che si chiama 17/08/2015....e pubblicali nella colonna 17/08/2015
E' quello il mio grosso scoglio....non ho minimamente idea di come farlo!...purtroppo!!!

Spero di essermi ben spiegato.

Riguardo al postarmi un aiutino....saresti d'avvero molto gentile!

Grazie mille!
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
E' esattamente il risultato che mi ero immaginato.
Per righe intendevo le td che contengono gli orari, nel plugin tutte le ore sono visibili e i dati vengono sfalsati in base alla riga che contiene l'ora indicata nel json. Per questo dicevo che quel plugin è troppo per quello che ti serve. Inserire i dati recuperati dal database nella colonna giusta in effetti richiede un bel po di ragionamento ma sicuramente è fattibile.
Purtroppo oggi ho avuto una giornata devastante e non sono dell'umore giusto per programmare, ti posso postare una bozza che avevo preparato ieri sera.
PHP:
<?php

function getDaysOfWeek($number = false) {
    $week = $number ? $number : date("W");
    $monday = date('Y-m-d', strtotime(date('Y') . 'W' . date("W")));
    $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("DOM", "LUN", "MAR", "MER", "GIO", "VEN", "SAB");
    $months = array(null, "GEN", "FEB", "MAR", "APR", "MAG", "GIU", "LUG", "AGO", "SET", "OTT", "NOV", "DIC");
    $numberDay = date('w', mktime(0, 0, 0, $month, $day, $year));
    return $days[$numberDay] . " " . $day . " " . $months[(int) $month];
}
?>
<table class="weektable">
    <thead>
        <tr>
            <?php
            foreach (getDaysOfWeek() as $date) {
                echo "<th>" . formatDay($date) . "</th>";
            }
            ?> 
        </tr>
    </thead>
    <tbody>

    </tbody>
</table>
<style>
    table.weektable {
        border-collapse: collapse;
        border-color: #666666;
        border-width: 1px;
        color: #333333;
        font-family: verdana,arial,sans-serif;
        font-size: 11px;
        margin: 14px 0;
        width: 100%;
    }
    table.weektable th {
        background-color: #dedede;
        border-color: #999;
        border-style: solid;
        border-width: 1px;
        padding: 8px;
    }
</style>
E' solo un inizio, mancano le query, la gestione dei dati e la navigazione tra le settimane.
Io sono dell'idea che è meglio scrivere 10 righe di codice piuttosto che cancellarne 90 da un codice già fatto.
 

armando31

Nuovo Utente
15 Ago 2015
21
0
1
Grazie mille per questo primo pezzo di codice!...criric

Pardon!...avevo capito male io, credevo intendessi la riga riportante giorno/mese....

Hai ragione quando dici che è meglio scrivere 10 righe piuttosto che cancellarne 90 ...... ma bisogna poterselo permettere.....ed io....non posso!

Ho provato il codice....ed è perfetto!....Domani intendo anche studiarmelo un po, così da far anche tesoro della possibilità di poter studiare un codice dalla sua nascita!

Davvero grazie mille!!...per i prossimi steps chiaramente non posso che aspettare che tu abbia tempo e voglia di...accompagnarmi per mano. Chiaramente non mancheranno prove di sviluppo in autonomia, e spero (anche se dubito)...di poterti sorprendere con qualche pezzetto di codice scritto come si deve.
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Ciao, non ho avuto molto tempo in questi giorni. Ho aggiunto la navigazione tra le settimane sfruttando ajax (non ho testato) e evidenziato il giorno corrente. Ho messo un esempio online. Ho creato 3 pagine
la principale
HTML:
<html>
    <head>
        <title>Calendario Settimanale</title>
        <meta charset="UTF-8">
        <script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>
        <link type="text/css" rel="stylesheet" href="calendario.css"/>
        <script type="text/javascript">
            $(document).ready(function () {
                mostraCalendario();
                $("input[name='avanti']").click(function () {
                    $("input[name='week']").val(parseInt($("input[name='week']").val()) + 1);
                    mostraCalendario();
                });
                $("input[name='indietro']").click(function () {
                    $("input[name='week']").val(parseInt($("input[name='week']").val()) - 1);
                    mostraCalendario();
                });
                $("input[name='oggi']").click(function () {
                    $("input[name='week']").val(0);
                    mostraCalendario();
                });
            });
            function mostraCalendario() {
                $("#calendario").load("tabella_calendario.php", {"week": $("input[name='week']").val()});
            }
        </script>
    </head>
    <body>
        <div id="navigazione">
            <input type="hidden" name="week" value="0"/>
            <input type="button" name="oggi" value="Oggi"/>
            <input type="button" name="indietro" value="<<"/>
            <input type="button" name="avanti" value=">>"/>
        </div>
        <div id="calendario"></div>
    </body>
</html>
la pagina tabella_calendario.php
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("DOM", "LUN", "MAR", "MER", "GIO", "VEN", "SAB");
    $months = array(null, "GEN", "FEB", "MAR", "APR", "MAG", "GIU", "LUG", "AGO", "SET", "OTT", "NOV", "DIC");
    $numberDay = date('w', mktime(0, 0, 0, $month, $day, $year));
    return $days[$numberDay] . " " . $day . " " . $months[(int) $month];
}
?>
<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>

    </tbody>
</table>
e infine calendario.css
Codice:
table.weektable {
    border-collapse: collapse;
    border-color: #666666;
    border-width: 1px;
    color: #333333;
    font-family: verdana,arial,sans-serif;
    font-size: 11px;
    margin: 14px 0;
    width: 100%;
}
input[type="button"] {
    cursor: pointer;
}
table.weektable th,input[type="button"]  {
    background-color: #dedede;
    border:1px solid #999;
    padding: 8px;
}
table.weektable th.current {
    background-color: #FFF;
}
ho scritto in fretta e male ci sarà sicuramente qualcosa da sistemare
 

armando31

Nuovo Utente
15 Ago 2015
21
0
1
Ahhhhhhhh!......quanta...tanta strada che ho da fare!

Ciao criric,
ho appena testato il tuo codice, (ovviamente grazie ancora mille per l'aiuto che mi stai dando!) , noto certo una marcata differenza tra la tua pagina di esempio on-line ed il codice che hai qui riportato. Credo però che questa differenza sia intenzionale, nel senso che credo tu voglia (giustamente) che io ci metta anche del mio nella realizzazione del calendario.
Non ti nascondo che questa metodologia non mi dispiace, perchè vorrei trarre anche e soprattutto delle conoscenze da questo tuo aiuto. Certo l'idea di vedere il progetto realizzato mi pizzica non poco, ma quella può aspettare!....Mi soddisfa molto di più l'idea di arrivarci comprendendo ed imparando , piuttosto che avendo la pappa bella e pronta.
Studierò quindi il tuo codice nei prossimi giorni e cercherò di comprenderne i criteri.....purtroppo solo dal 26 in poi potrò davvero dedicarmici a sufficienza (perchè sarò in ferie per una settimana)....ultimamente a lavoro stò facendo dei turni vagamente "assurdi".....che poco lasciano al tempo libero.

Sei davvero molto disponibile.....rarità ai giorni d'oggi!!....Grazie!!

Mi ritaglierò il più tempo possibile per studiarmi il codice....e appena avrò qualche delucidazione da chiederti te la posto....sperando che magari, più che una delucidazione, sia una mia versione del codice fin'ora trattato con la soluzione ai "buchi" da te lasciati perchè io apprenda

Nel frattempo, se avessi qualche testo o guida da consigliarmi per meglio apprendere la materia, il consiglio sarebbe davvero bene accetto!!

Buona serata
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Ciao, in realtà ho modificato il codice online dopo che ti avevo postato l'inizio solo perchè ho trovato un po di tempo :).
Ho aggiunto solamente il numero della settimana
PHP:
<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 . "° settimana $year";
    ?>
</div>
e ho giocato un po con il css ma non è il mio forte.
Direi che a questo punto, a parte l'aspetto grafico, mancano solo le query da inserire dentro ogni colonna
PHP:
<?php
        foreach (getDaysOfWeek() as $date) {
            $current = $date == date("Y-m-d") ? "class='current'" : "";
            $query = "SELECT * FROM $date";
            echo "<td $current>esegui e mostri i risultai</td>";
        }
        ?>
Devo ancora capire perchè si incasina a cavallo del 2014/2015
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Ho modificato di nuovo il codice online :
per testare ho crato un area di testo per inserire delle righe nella colonna del giorno corrente, niente di complicato :
l'area di testo
HTML:
<fieldset>
                <legend>Inerisci un commento</legend>
                <textarea rows="6" cols="40"></textarea>
                <input type="button" name="inserisci" value="Inserisci"/>
            </fieldset>
la funzione javascript associata
Codice:
$("input[name='inserisci']").click(function () {
                    var comment = $("textarea").val();
                    if(comment == "") {
                        alert("La textarea e' vuota");
                        return false;
                    }
                    $("input[name='inserisci']").attr("disabled", true);
                    $("textarea").val("")
                    $.post("comments.php", "comment=" + comment, function () {
                        $("input[name='inserisci']").attr("disabled", false);
                        mostraCalendario();
                    });
                });
e il file php che elabora la richiesta
PHP:
$file = date("Y-m-d") . ".txt";

if (file_exists($file)) {
    $fr = fopen($file, 'a');
    fwrite($fr, "\n" . $_REQUEST['comment']);
} else {
    $fr = fopen($file, 'w');
    fwrite($fr, $_REQUEST['comment']);
}
fclose($fr);
In pratica crea un file di testo con la data corrente e ci scrive dentro i commenti, giusto per provare
 

armando31

Nuovo Utente
15 Ago 2015
21
0
1
Ciao criric,

ho seguito le tue istruzioni passo passo, ho visitato anche il tuo sito (pieno di cose interessanti tra l'altro).....ma sono arrivato solo a questo "magro" risultato.....
http://www.web1105.altervista.org/Calendario_criric_ins_dati/calendario.php

Non capisco, oltre alla motivazione della visualizzazione di tutti quei punti interrogativi (ma credo che sia relativo all'interpretazione del browser riguardo ai caratteri speciali) , dove inserire il pezzo di codice al quale fai riferimento quando dici:
e il file php che elabora la richiesta
Codice PHP:
$file = date("Y-m-d") . ".txt";

if (file_exists($file)) {
$fr = fopen($file, 'a');
fwrite($fr, "\n" . $_REQUEST['comment']);
} else {
$fr = fopen($file, 'w');
fwrite($fr, $_REQUEST['comment']);
}
fclose($fr);
ho provato diverse soluzioni.....ma niente!!!

attualmente ho le 4 pagine di cui parli tu anche nel post sul tuo sito, chiamate così come le hai chiamate tu.
il file calendario.php ha questo codice:

Codice:
<html>
    <head>
        <title>Calendario Settimanale</title>
        <meta charset="UTF-8">
        <script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>
        <link type="text/css" rel="stylesheet" href="calendario.css"/>
        <script type="text/javascript">
            $(document).ready(function () {
                mostraCalendario();
                $("input[name='avanti']").click(function () {
                    $("input[name='week']").val(parseInt($("input[name='week']").val()) + 1);
                    mostraCalendario();
                });
                $("input[name='indietro']").click(function () {
                    $("input[name='week']").val(parseInt($("input[name='week']").val()) - 1);
                    mostraCalendario();
                });
                $("input[name='oggi']").click(function () {
                    $("input[name='week']").val(0);
                    mostraCalendario();
                });
                $("input[name='inserisci']").click(function () {
                    var comment = $("textarea").val();
                    if(comment == "") {
                        alert("La textarea e' vuota");
                        return false;
                    }
                    $("input[name='inserisci']").attr("disabled", true);
                    $("textarea").val("")
                    $.post("comments.php", "comment=" + comment, function () {
                        $("input[name='inserisci']").attr("disabled", false);
                        mostraCalendario();
                    });
                });
            });
            function mostraCalendario() {
                $("#loading").html("Caricamento in corso .....");
                $("#calendario").load("tabella_calendario.php", {"week": $("input[name='week']").val()}, function () {
                    $("#loading").html("");
                });
            }
        </script>
    </head>
    <body>

        <div id="container">

            <div id="navigazione">
                <span id="titolo">Calendario settimanale </span>
                <input type="hidden" name="week" value="0"/>
                <input type="button" name="oggi" value="Oggi"/>
                <input type="button" name="indietro" value="<"/>
                <input type="button" name="avanti" value=">"/>
            </div>
            <span id="loading"></span>
            <div id="calendario"></div>
            <fieldset>
                <legend>Inserisci un commento</legend>
                <textarea rows="6" cols="40"></textarea>
                <input type="button" name="inserisci" value="Inserisci"/>
            </fieldset>
        </div>

    </body>
</html>
tabella calendario.php ha questo codice:
Codice:
<?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ì", "Martedì", "Mercoledì", "Giovedì", "Venerdì", "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 . "° settimana $year";
    ?>
</div>
<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 . ".txt";
            if (file_exists($file)) {
                $fr = fopen($file, 'r');
                while (!feof($fr)) {
                    $riga = fgets($fr);
                    echo $riga . "<p class='separa'></p>";
                }
                fclose($fr);
            }
            echo "</td>";
        }
        ?>
    </tbody>
</table>
il file .css è identico al tuo

ed il file comments.php l'ho lasciato vuoto.....come credo di aver capito che vada fatto.....

dove sbaglio ancora???

Abbi pazienza dai.....forse ti sembrerò un pò zuccone!...lo capisco....ma sono solo un principiantissimo!...con tanta voglia di imparare però!!!:rolleyes:

Grazie!!
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Per il tuo progetto i comments non servono, devi solamente eseguire le query sul database. Hai detto di avere una tabella per ogni giorno ? il corpo del tuo calendario sarà + o - così
PHP:
<tbody>
        <?php
        foreach (getDaysOfWeek() as $date) {
            $current = $date == date("Y-m-d") ? "class='current'" : "";
            $query = "SELECT * FROM $date";
            echo "<td $current>esegui e mostri i risultai</td>";
        }
    </tbody>
in pratica per ogni giorno fai una query sul db e se trovi risultati li incolonni.
Peri i punti interrogativi puoi cambiare il charset da
HTML:
<meta charset="UTF-8">
a
HTML:
<meta charset=ISO-8859-1">
oppure puoi usare le entità html
 

armando31

Nuovo Utente
15 Ago 2015
21
0
1
ok....anche se non capisco ancora dove sbagliavo nel replicare il tuo esempio....dall'ultimo post che ho scritto ho provato ancora ma....nulla da fare...???

Comunque si, la mia idea era quella di una tabella per ogni giorno, anche se nel mio "disegno" questo aspetto non lo avevo granchè approfondito....perchè senza giungere fin qui (intendo al punto dove mi hai portato con la realizzazione del layout del calendario, il giorno corrente evidenziato, ed il resto ) ...approfondire l'aspetto del database, non serviva a molto. Ma adesso mi vengono delle perplessità!
Ti spiego meglio:
Ho un file . xml così strutturato:

Codice:
<?xml version="1.0"?>

-<Root>
       -<OrarioLezioni>
           -<Lezioni>
              -<Giorno>
                     <![CDATA[08/22/2015]]>
               </Giorno>
               <Ore>10</Ore>
               <Minuti>0</Minuti>
               <Lezione>ITALIANO</Lezione>
            </Lezioni>
           -<Lezioni>
              -<Giorno>
                    <![CDATA[08/22/2015]]>
               </Giorno>
              <Ore>11</Ore>
              <Minuti>30</Minuti>
              <Lezione>MATEMATICA</Lezione>
              </Lezioni>
           -<Lezioni>
               -<Giorno>
                    <![CDATA[08/22/2015]]>
                </Giorno>
                <Ore>14</Ore>
                <Minuti>0</Minuti>
                <Lezione>STORIA</Lezione>
                </Lezioni>
           -<Lezioni>
              -<Giorno>
                <![CDATA[08/22/2015]]>
               </Giorno>
               <Ore>16</Ore>
               <Minuti>30</Minuti>
               <Lezione>MATEMATICA</Lezione>
               </Lezioni>
   </OrarioLezioni>
</Root>
Questo file viene generato tutte le sere , e la mia idea iniziale è stata quella di popolare un database MySql creato su altervista con una insert in una tabella che avevo chiamato OrarioLezioni , e che contiene i campi
-Data
-Ora
-Minuti
-Lezione

Il file ,che lancio tutte le sere tramite un processo batch pianificato, utilizzato per popolare il db con i dati del file xml è:
Codice php:
Codice:
<?php
$host = 'indirizzo_sito_web';
$user = 'nome_utente';
$pass = 'password';
$db = 'my_database';
$con = mysql_connect($host,$user,$pass) or die (mysql_error());
$sel = mysql_select_db($db) or die (mysql_error());

$file = "OrarioLezioni.xml";
$xml = simplexml_load_file($file);
	
	foreach( $xml->xpath("/Root/OrarioLezioni/Lezioni") as $value ) {
		$data = $value->Giorno;
		$ora = $value->Ora;
		$minuti = $value->Minuti;
		$ingressi = $value->Lezione;
			
$sql="INSERT INTO LeolandiaEntry (data,ora,minuti,ingressi) VALUES ('$data','$ora','$minuti','$ingressi')";		

$rssql = mysql_query( $sql );
		
	echo ( $rssql ) ? "Importazione avvenuta con successo" : "Errore nella query o connessione al DB mancante";
	
}

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

?>
L'insert funziona...ma chiaramente mi crea tante righe così composte:

Data - Ora - Minuti - Lezione

per quanti sono i nodi del file .xml e , se si esegue l'insert più volte , le righe di duplicano e si moltiplicano.

Da qui è nata la mia idea di avere una tabella per ogni giorno (che di fatto ancora non ho, è solo un'idea) così da poter evitare duplicati , in caso ci fossero modifiche riguardo all'orario delle lezioni di un giorno ed il file di "upload" venisse lanciato nuovamente per aggiornare il db.

Chiaramente dovrei trovare il modo di generare una tabella avente per nome il valore del tag CDATA e che abbia come campi i restanti nodi , e soprattutto , inserire un controllo secondo il quale se la tabella dovesse già esistere venga sovrascritta e non duplicata....

Ma è un buon modo per gestire il database ed arrivare al risultato sperato ? o è meglio fare diversamente?
Cosa ne pensi?
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
anche se non capisco ancora dove sbagliavo nel replicare il tuo esempio
nel file comments.php che hai lasciato vuoto dovevi inserire quelle righe php che non sapevi dove mettere.
Visto che hai il file xml potresti anche fare a meno del database. Memorizzi il file in una directory e vai a leggerlo in ogni colonna. Come ho fatto io per i file txt. Forse però è meglio fare un ragionamento più approfondito. Fammi sapere se ti viene in mente qualcosa. Io non credo di averne il tempo per un paio di giorni.
 

armando31

Nuovo Utente
15 Ago 2015
21
0
1
Ok , hai ragione! Faccio qualche ragionamento, metto giù qualche idea, testo un pò le cose che mi vengono in mente e...appena ho qualcosina di concreto da sottoporti (non come il banalissimo errore del file comments.php lasciato vuoto)....mi permetto di seccarti ancora un po...se posso.

Anche se ormai credo che tu mi abbia portato vicinissimo alla meta ( e ti ringrazio moltissimo per questo )

Spero il tuo paio di giorni di "assenza" sia dovuto a vacanze o comunque a piacevoli motivi...

Spremo un po le meningi e nel frattempo ti lascio in pace......a presto

Buona serata
 

armando31

Nuovo Utente
15 Ago 2015
21
0
1
Ciao criric,
ho fatto qualche prova....e qualche passo avanti. Il punto dove sono arrivato puoi sempre vederlo qui: http://www.web1105.altervista.org/Calendario_criric_ins_dati/calendario.php

Banalmente, ho eliminato i punti interrogativi che comparivano al posto dei caratteri speciali....ma cosa più rilevante....ho modificato il codice in modo da prendere come riferimento un file .xml , così da poterne leggere i valori dei vari tag tramite la funzione simplexml

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";

$xml = simplexml_load_file($file);

if (file_exists($file))

foreach ($xml->xpath("/Root/OrarioLezioni/Lezioni") as $value ) {
		
		$ore = $value->Ore;
		$minuti = $value->Minuti;
		$lezione = $value->Lezione;
		$durata = $value->Durata;
		
		 echo $ore.":".$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>
A questo punto utilizzerò il metodo "NO-DB" della cartella contenente i vari files, inseriti all'interno della stessa dopo averli rinominati (Y-M-D) con un processo batch.

Mi faceva piacere condividere con te questo piccolo passettino in avanti che ho fatto....data la disponibilità con la quale mi hai imboccato i vari passaggi !!!

Volevo però anche sottoporti 2 idee che mi sono venute in mente....e che vorrei mettere in pratica:

1- Mi piacerebbe (sfruttando il tag xml <Durata>) far si che ,se sono presenti lezioni in quel giorno, comparisse in alto (sotto la riga della data ma prima del primo valore relativo alla lezione) una label con la durata totale delle lezioni di quel giorno.

..............INUTILE DIRE CHE HO PROVATO A FARE DA ME MA....LA SOMMA RIESCE....SOLO CHE SI COMPORTA IN MODO STRANO....A SECONDA DI DOVE METTO L'ISTRUZIONE TIPO:
Codice:
$durataTot = 0
$durataTotale = $durataTot += +Durata;
echo $durataTotale;
Mi conteggia solo la somma dei tag precedenti, o addirittura non mi somma nulla...!!!!!

2- Nel file .xml il tag <Minuti> riporta un solo zero per l'ora e , chiaramente , due cifre per la mezz'ora.....come potrei fare secondo te per imporre la visualizzazione di un doppio zero in corrispondeza dell'ora piena?

Spero tu abbia la pazienza di darmi qualche indicazione ancora....infondo daì!...anche se un passettino alla volta...piano piano cerco di muovermi anche un pochino con le mie gambe.....anche se spesso mi ritrovo ancora con i lacci delle scarpe legati tra loro!!!!

P.S. ho comprato un manualetto di PHP....giusto per cominciare a studiare un po meglio....finito questo vedrò di passare a qualcosa di più completo

Buona serata
 

armando31

Nuovo Utente
15 Ago 2015
21
0
1
Ciao criric,

piccolo aggiornamento , so che ti sembrerà una stupidagine , ma mi faceva piacere condividerlo con te. ...E poi per me anche un così piccolo punto smarcato in autonomia...è una grossa soddisfazione. Poi credo che anche per eventuali altri visitatori del forum , che sono o saranno interessati alla realizzazione del "mini-progettino"....poter avere la cronistoria di come i vari punti vengono trattati , affrontati e poi smarcati...può essere utile.

Nel mio ultimo post ti parlavo della possibilità di visualizzare , riguardo al valore contenuto all' interno del tag <Minuti> ,sempre un valore con doppia cifra, e non con un solo zero (nel caso dell'ora piena).

Ragionandoci un pò ho risolto così:

CODICE:

Codice:
if ($minuti<29)								
		 echo $ora.":".$minuti."0 --- ".$lezione."<br></br>","Durata ".$durata." Minuti";		
										
	else									
		echo $ora.":".$minuti." --- ".$lezione."<br></br>","Durata ".$durata." Minuti";
Mi interessava il tuo parere...ti sembra una buona soluzione?....o ti sembra un accrocchio pasticciato?

Resto invece moooolto in alto mare riguardo l'altra perplessità che ti avevo esposto:
1- Mi piacerebbe (sfruttando il tag xml <Durata>) far si che ,se sono presenti lezioni in quel giorno, comparisse in alto (sotto la riga della data ma prima del primo valore relativo alla lezione) una label con la durata totale delle lezioni di quel giorno.

Ciao