PROBLEMA Aiuto Generazione Calendario Con Php!!

joker320t

Nuovo Utente
73
1
Ciao ragazzi, sono ad un punto cieco. Sto sviluppando un calendario con php perchè quelli in rete non mi facevano impazzire, ho creato il layout, e le funzioni che mi permettono di visualizzare mese, anno e giorni ,partendo dal giorno della settimana corretto. Ecco che arriva il mio problema. Tutto questo funziona con il mese corrente, ora vorrei creare uno script php che quando clicco il pulsante next mi cambi mese, ma per far funzionare lo script php devo perforza fare il refresh della pagina, voi avreste qualche consiglio da darmi per far funzionare questa cosa?
 

cdtux

Utente Èlite
1,829
911
CPU
I7 3770
Scheda Madre
Asrock Z77 Extreme 4
HDD
Samsung 850 pro 250GB
RAM
Corsair Vengeance LP 16GB
GPU
Gigabyte GTX1060 6GB
Monitor
Dell U2412M
PSU
Seasonic Focus Plus 650
Case
Corsair Graphite 760T
OS
Debian / Ubuntu
Se non vuoi il refresh della pagina devi necessariamente utilizzare jquery+ajax.

In semplice php invece, puoi utilizzare sia il metodo GET (quindi con un link tipo ../calendario.php?mese=mesechevuoivedere) sia il metodo POST (quindi con un form) per fare in modo che il click su "next" passi una variabile con l'indicazione del mese da visualizzare.
 

joker320t

Nuovo Utente
73
1
Grazie inanzitutto per la risposta, quindi per evitare di fare il refresh di tutta la pagina ma solo dei giorni e del mese devo imparare ajax? Pensi sia una cosa fattibile in termini di tempo? O mi consigli di usare php comunque?
 

cdtux

Utente Èlite
1,829
911
CPU
I7 3770
Scheda Madre
Asrock Z77 Extreme 4
HDD
Samsung 850 pro 250GB
RAM
Corsair Vengeance LP 16GB
GPU
Gigabyte GTX1060 6GB
Monitor
Dell U2412M
PSU
Seasonic Focus Plus 650
Case
Corsair Graphite 760T
OS
Debian / Ubuntu
Il tempo che impiegherai dipende da te, dalle tue conoscenze e da quanto tempo ci metti ad apprendere il funzionamento di nuovi linguaggi/frmework.
Se hai problemi di tempo puoi utilizzare qualcosa di già pronto da customizzare (tipo questo fatto in jquery).
Lo stesso discorso vale anche se usi il solo php.

Se proprio non vuoi utilizzare qualcosa di già pronto, ti consiglio comunque di analizzarne il codice per prendere spunto su come risolvere le varie problematiche.
 
Ultima modifica:

joker320t

Nuovo Utente
73
1
Devo chiedere ancora il vostro aiuto, ho un idea su come far andare avanti il mio calendario sia con i mesi sia con i giorni, ma mi sono arenato ancora. Allora io ho pensato di creare una variabile contatore che ad ogni click sul pulsante next si incrementi, ma ecco il problema io eseguo lo script ogni volta che schiaccio il pulsante quindi la variabile si resetta ogni volta come posso fare?
 

Geca89

Utente Attivo
292
35
CPU
I7 5820K
Scheda Madre
X99-A Plus
HDD
SSD 500GB
RAM
DDR4 32 GB
GPU
Nvidia Geforce GTX 950
Audio
Sound Blaster Z
Monitor
Benq 22''
PSU
750W Semi Modulare
Case
ITEK Case BI-TURBO
Periferiche
WIFI B,G,N AC
OS
Windows
Ajax + PHP + HTML + CSS ti complichi parecchio la vita.
Su JQuery UI già esiste una roba del genere, e puoi modificare i CSS a tuo piacimento.
 

joker320t

Nuovo Utente
73
1
ciao ragazzi, rprend questo post, perchè ho ancora dei problemi su una cosa, mi sono visto come funzionano le sessioni, mi sono creato una classe calendario che ha alcune funzioni che lo generano. Fino a qui tutto ok, tra le varie funzioni, due di queste icrementano e decrementano una variabile contatore che mi permetterà di andare avanti e tornare indietro nel calendario con i mesi. Il problema e sempre quello non riesco a salvare la variabile contatoe che mi permette di andare avanti.

La soluzone che ho cercato di adottare e stata quella di salvare l'oggetto della classe in una sessione, e al click del tasto next mi esegue la funzione next() che non fa altro che incrementare il contatore di uno, ma non va ecco il codice:

PHP:
<script src="[URL]https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js[/URL]"></script>
<link href="css/calendario_style.css" rel="stylesheet" type="text/css">
<link href="css/style_modal.css" rel="stylesheet" type="text/css">
<script type="text/javascript">
  $(document).ready(function(){
      $(".click").click(function(){$("#myModal").css({'display':'block'})});
      $(".close").click(function(){$("#myModal").css({'display':'none'})});
  });
</script>
<?php
include 'php/Calendar.php';
$_SESSION['cal'] = new Calendar();
?>
<div id="calendario">
    <div class="mesi">
      <ul>
            <li class="pre" onclick="<?php $_SESSION['cal']->pre();?>"><a id="pre" href="index.php">&#10094;</a></li>
            <li class="next" onclick="<?php $_SESSION['cal']->next();?>"><a id="next" href="index.php">&#10095;</a></li>
            <li id="mese">
              <?php
                $_SESSION['cal'] -> printMese();
                echo "<br>";
                $_SESSION['cal'] -> printAnno();
              ?>
            </li>
        </ul>
    </div>

        <ul id="giorni_settimana">
            <li>Lun</li>
            <li>Mar</li>
            <li>Mer</li>
            <li>Gio</li>
            <li>Ven</li>
            <li>Sab</li>
            <li>Dom</li>
        </ul>

        <ul id="giorni">
          <?php $_SESSION['cal']->printGiorni();?>
        </ul>
</div>

come potrei risolvere questo problema??
 
Ultima modifica da un moderatore:

cdtux

Utente Èlite
1,829
911
CPU
I7 3770
Scheda Madre
Asrock Z77 Extreme 4
HDD
Samsung 850 pro 250GB
RAM
Corsair Vengeance LP 16GB
GPU
Gigabyte GTX1060 6GB
Monitor
Dell U2412M
PSU
Seasonic Focus Plus 650
Case
Corsair Graphite 760T
OS
Debian / Ubuntu
Non funziona perchè non puoi utilizzare l'evento onclick con il php. In quel caso devi utilizzare il javascript.

Di seguito un semplice script che incrementa/decrementa una variabile di sessione:
PHP:
<?php
    session_start();
 
    if (!$_SESSION["cal"]) {
        $_SESSION["cal"] = 0;
    }

    switch ($_GET["action"]) {
        case 'inc':
            $_SESSION["cal"]++;
            break;
        case 'dec':
            $_SESSION["cal"]--;
            break; 
    }
?>

E i tuoi link aggiornati:
HTML:
<ul>
    <li class="pre"><a id="pre" href="index.php?action=dec">&#10094;</a></li>
    <li class="next"><a id="next" href="index.php?action=inc">&#10095;</a></li>
</ul>
 
  • Mi piace
Reazioni: joker320t

joker320t

Nuovo Utente
73
1
Non funziona perchè non puoi utilizzare l'evento onclick con il php. In quel caso devi utilizzare il javascript.

Di seguito un semplice script che incrementa/decrementa una variabile di sessione:
PHP:
<?php
    session_start();
 
    if (!$_SESSION["cal"]) {
        $_SESSION["cal"] = 0;
    }

    switch ($_GET["action"]) {
        case 'inc':
            $_SESSION["cal"]++;
            break;
        case 'dec':
            $_SESSION["cal"]--;
            break;
    }
?>

E i tuoi link aggiornati:
HTML:
<ul>
    <li class="pre"><a id="pre" href="index.php?action=dec">&#10094;</a></li>
    <li class="next"><a id="next" href="index.php?action=inc">&#10095;</a></li>
</ul>

Sono riuscito a capire perfettamente quello ch mi hai spiegato, e sono riuscito ad implementarlo perfettmente infatti funziona tutto alla perfezione, solo che non mi piace moltissimo, perche aggiorna ogni volta tutta la pagina, ma a me basta che si aggiornassero solo i valori, quinidi ho pensato a ajax mi sono visto un po' come funziona e ho creato questa funzione

JavaScript:
$.ajax({
         type: "GET",
         url: "index.php",
         data: "action=inc",
         dataType: "html",
         success: function(risposta) {
           alert("funziona");
         },
         error: function(){
           alert("Chiamata fallita!!!");
         }
       });
      });

funziona piu o meno, nel senso che aggiorna il contatore ma, ovviamente aggiorna i valori solo se aggiorno la pagina, perchè cosi crea una nuova istanza della classe e ggiorna tutto, mi sono posto 2 domande alle quali non so rispondermi:
1) utilizzare una classe non e' stata una grande idea, meglio utilizzare delle semplici funzioni
2) come aggiorno solo i valori? senza aggiornare tutto??
 

cdtux

Utente Èlite
1,829
911
CPU
I7 3770
Scheda Madre
Asrock Z77 Extreme 4
HDD
Samsung 850 pro 250GB
RAM
Corsair Vengeance LP 16GB
GPU
Gigabyte GTX1060 6GB
Monitor
Dell U2412M
PSU
Seasonic Focus Plus 650
Case
Corsair Graphite 760T
OS
Debian / Ubuntu
1) Utilizzare le classi è sempre una buona idea. Rende tutto il codice più pulito e mantenibile.

2) Utilizzando il php, semplicemente non puoi.
Php è un linguaggio "server side", quindi lavora sempre e solo in questo modo: il client fa una richiesta, il server risponde e viene mostrato il nuovo contenuto.
Se vuoi lavorare solamente client side devi utilizzare necessariamente javascript o jquery/ajax, che sono linguaggi "client side". Con questi strumenti puoi così lavorare sul DOM direttamente da client, quindi puoi aggiungere/eliminare/modificare praticamente qualsiasi cosa.
Quindi per aggiornare i valori, puoi utilizzare jquery e aggiornare solamente una porzione di pagina con il metodo .load()
 

joker320t

Nuovo Utente
73
1
1) Utilizzare le classi è sempre una buona idea. Rende tutto il codice più pulito e mantenibile.

2) Utilizzando il php, semplicemente non puoi.
Php è un linguaggio "server side", quindi lavora sempre e solo in questo modo: il client fa una richiesta, il server risponde e viene mostrato il nuovo contenuto.
Se vuoi lavorare solamente client side devi utilizzare necessariamente javascript o jquery/ajax, che sono linguaggi "client side". Con questi strumenti puoi così lavorare sul DOM direttamente da client, quindi puoi aggiungere/eliminare/modificare praticamente qualsiasi cosa.
Quindi per aggiornare i valori, puoi utilizzare jquery e aggiornare solamente una porzione di pagina con il metodo .load()
1) Utilizzare le classi è sempre una buona idea. Rende tutto il codice più pulito e mantenibile.

2) Utilizzando il php, semplicemente non puoi.
Php è un linguaggio "server side", quindi lavora sempre e solo in questo modo: il client fa una richiesta, il server risponde e viene mostrato il nuovo contenuto.
Se vuoi lavorare solamente client side devi utilizzare necessariamente javascript o jquery/ajax, che sono linguaggi "client side". Con questi strumenti puoi così lavorare sul DOM direttamente da client, quindi puoi aggiungere/eliminare/modificare praticamente qualsiasi cosa.
Quindi per aggiornare i valori, puoi utilizzare jquery e aggiornare solamente una porzione di pagina con il metodo .load()
Inanzi tutto grazie della tua risposta, mi ha fatto rilettere molto e mi ha fatto prendere la decisone di sviluppare questa cosa in javascript e sono riuscito questa mattina ad arrivare quai al mio obbiettivo primario, ma ho un altro problema, spero di non eludere dal titolo di questo post non me ne vogliate, ma non volevo aprire un altro topic per questa domanda.
Allora in mio problema attuale e che ho creato una classe in js calendario ha vai metodi tra cui gli interessati per questa faccenda sono i sequenti:
JavaScript:
generateCalendar();
next();
pre();
i quali il primo molto intuitivamente mi genera il calendario nel senso che stampa del calendario giorni e mese con l'anno
gli altri due mandano avanti e indietro il mese con i giorni.
Qui arriva il problema con questo codice:
JavaScript:
  $(document).ready(function(){
    $(".pre").click(function(){calendar.pre()});
    $(".next").click(function(){calendar.next()});
    calendar.generateCalendar();
    $(".click").click(function(){/*$("#myModal").css({'display':'block'})*/$("#myModal").fadeIn(150)});
    $(".close").click(function(){/*$("#myModal").css({'display':'none'})*/$("#myModal").fadeOut(150)});
  });
in breve all'avvio della pagina quando clicco su un giorno mi si apre una finestra, e fin qui tutto ok, ma se mi sposto al mese successivo, con la funzione next() o precedente con pre() non va piu nulla e non capisco perchè, credo sia un problema di caricamento del codice quando viene generato il calendario ma non ne sono sicuro e non saprei come fare.
per completezza metto anche il codice deli metodi next e pre.
JavaScript:
this.next = function()
    {
      ++mese;
      giorni_mese = daysInMonth(mese, anno);
      giorno_settimana = dayOfWeek(mese, anno);
      this.generateCalendar();
      //alert(oggi + "\n" + anno + "\n" + mese + "\n" + giorni_mese + "\n" + giorno_settimana);
    }

    this.pre = function()
    {
      --mese;
      giorni_mese = daysInMonth(mese, anno);
      giorno_settimana = dayOfWeek(mese, anno);
      this.generateCalendar();
    }
 

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!