Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    Errore su una data specifica passata

    Lo script qui sotto fa un calcolo di giorni trascorsi tra due date, la data iniziale viene catturata dal dabase.
    Ora, non capisco perché quando la data è: 21/03/2023 a video non stampa nulla e mi ritorna l'errore...

    Warning: Undefined variable $pallino in ....


    L'anomalia si verifica solo con la data sopra, se invece inserisco un qualsiasi anno differente da 2023, tutto funziona!!!!!

    Codice PHP:
            public function calcola_gg($data)        {            if($data != null && !(empty($data)))            {                $data_dal = new DateTime($data);                $data_al = new DateTime(date("Y/m/d"));                $nr_gg $data_dal->diff($data_al);                $nr_gg $nr_gg->format('%a');                            if($nr_gg >= && $nr_gg 120) {                    $pallino '<img src="images/pallino_verde.png" width="16" height="16" align="absmiddle" />';                } elseif ($nr_gg >= 121 && $nr_gg 240 ) {                    $pallino '<img src="images/pallino_giallo.png" width="16" height="16" align="absmiddle" />';                } elseif ($nr_gg >= 241) {                    $pallino '<img src="images/pallino_rosso.png" width="16" height="16" align="absmiddle" />';                }            } else {                $pallino '';            }               return $pallino;        } 
    Se invece provo lo script a parte inserndo all'interno del metodo anche...

    Codice PHP:
    echo calcola_gg('2023-03-21'); 
    nessun problema.

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Sei certo che la data salvata nel DB sia esattamente '2023-03-21'? Niente spazi, lo 0 c'è ed è uno 0 non una o ecc...? Hai controllato? Non darlo per scontato, verificalo.

  3. #3
    Si ho anche cambiato direttamente sul db con phpmyadmin il giorno dello data e lo script funziona, ma appena rimetto il giorno 21 con l'anno 2023, lo script va per i fatti suoi.

  4. #4
    scusa Bartjsp ma cosa ti aspetti che dia la funzione calcola_gg ?

    per come è scritta ritorna $pallino, ma appunto non deve stampare nulla

    la data gliela passi sempre nel formato '2023-03-21' ?!
    Ultima modifica di aquatimer2000; 20-07-2023 a 08:37
    aquatimer2000

  5. #5
    Quote Originariamente inviata da aquatimer2000 Visualizza il messaggio
    scusa Bartjsp ma cosa ti aspetti che dia la funzione calcola_gg ?

    per come è scritta ritorna $pallino, ma appunto non deve stampare nulla

    la data gliela passi sempre nel formato '2023-03-21' ?!
    Lo script funziona perfettamente finché non incontra la data '2023-03-21' presa dal database con questo formato. Se invece inserisco '2024-03-21' o altri anni il problema non si presenta.

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Non entro nel merito dei calcoli, ma nel tuo codice non stai prendendo in considerazone il caso in cui $nr_gg sia MINORE di zero. Fose è quello il caso?

    Posto il tuo codice indentato come si deve, così si capisce meglio:

    codice:
    public function calcola_gg($data) {
       if($data != null && !(empty($data))) {
          $data_dal = new DateTime($data);
          $data_al = new DateTime(date("Y/m/d"));
          $nr_gg = $data_dal->diff($data_al);
          $nr_gg = $nr_gg->format('%a');
          if($nr_gg >= 0 && $nr_gg < 120) {
             $pallino = '<img src="images/pallino_verde.png" width="16" height="16" align="absmiddle" />';
          } elseif ($nr_gg >= 121 && $nr_gg < 240 ) {
             $pallino = '<img src="images/pallino_giallo.png" width="16" height="16" align="absmiddle" />';
          } elseif ($nr_gg >= 241) {
             $pallino = '<img src="images/pallino_rosso.png" width="16" height="16" align="absmiddle" />';
          }
       } else {
          $pallino = '';
       }
       return $pallino;
    }
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    191
    1) $pallino può essere stringa vuota (se è null o empty), se nessuna delle condizioni è soddisfatta nemmeno esiste $pallino.
    2) Dal notice si nota che è una versione inferiore a php 8 perché è elevato a Warnings. Inoltre la dicitura public indica una classe e metodo $obj->calcola_gg('now')
    Puoi impostare error_reporting(-1); in cima al primo file che usa il tuo script? Sempre per maggiori dettagli ricopia con copia incolla l'errore (il testo che legge il tuo browser) se effettivamente è la riga della funzione o una probabile variabile $pallino con visibilità globale
    Ultima modifica di darbula; 20-07-2023 a 17:22

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    191
    Per il campo DateTime i secondi frazionari in valore time
    se omessi è con precisione 6 per compatibilità alle versioni mysql precedente a 8. https://dev.mysql.com/doc/refman/8.0...l-seconds.html
    Rettifico il tuo php è 8.1 con mysql inferiore a 8, il 23 di tale data a oggi forma un DateInterval::format "%a" di differenza giorni 120 poiché ci sono i microsecondi. Nel tuo codice 120 e 240 non è in nessuna condizione. (Invece di 121 e accade da php 8.1 in poi).
    Ultima modifica di darbula; 20-07-2023 a 23:45

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.