Stampa data nel db ma da errore

  • Creatore Discussione Creatore Discussione Shyson
  • Data di inizio Data di inizio

Shyson

Utente Attivo
19 Ago 2012
1.179
1
38
PHP:
...
  if ($continua) { 
    $data_localeS="";
    $dataGmtS="";
    $giorno="";
    $mese="";
    $data_localeS = time(); //Stampa nel db la data numerica es. 1360585588
    $dataGmtS = $giorno[date('w')].' '.date('d').' '.$mese[date('m')-1].' '.date('Y - H:i:s \G\M\T P');  //---->LINEA 30
    $mysqli = new mysqli("localhost", "gruppoalveo", "pwd", "my_gruppoalveo");   
    $url = $_SERVER['PHP_SELF']; 
    $esiste = $mysqli->query ("SELECT * FROM visitate WHERE url='$url'"); 
    if ($esiste->num_rows == 0) { 
      $mysqli->query ("INSERT INTO visitate VALUES ('$data_localeS', '$dataGmtS', '$title', '$url', 1)"); 
    } 
    else { 
      $old = $esiste->fetch_array(MYSQLI_ASSOC);   
      $visite = $old['visite'] + 1; 
 $mysqli->query("UPDATE visitate SET data_localeS='$data_localeS',dataGmtS='$dataGmtS',pagina='$title',visite='$visite' WHERE url='$url'"); 
    } 
  } 
}   
}
...

Mi da questi errori:

Notice: Uninitialized string offset: 5 in /membri/gruppoalveo/visitate.php on line 30

Notice: Uninitialized string offset: 3 in /membri/gruppoalveo/visitate.php on line 30
 
Ultima modifica:
Nel momento in cui su una variabile utilizzi delle parentesi quadre e questa non è un array, stai frugando nell'offset della stringa.
Per intenderci:
PHP:
$string = "Ciao Mondo!";
echo $string[2]; // visualizzerà "a"

Nel tuo caso definisci giorno e mese come stringhe vuote un paio di righe prima della 30: è naturale che non abbiano alcun offset disponibile (da qui gli errori di php).

Se ti aspettavi fossero array invece hai sbagliato sicuramente qualcosa a livello di logica.
 
Ultima modifica:
Nel momento in cui su una variabile utilizzi delle parentesi quadre e questa non è un array, stai frugando nell'offset della stringa.
Per intenderci:
PHP:
$string = "Ciao Mondo!";
echo $string[2]; // visualizzerà "a"

Nel tuo caso definisci giorno e mese come stringhe vuote un paio di righe prima della 30: è naturale che non abbiano alcun offset disponibile (da qui gli errori di php).

Se ti aspettavi fossero array invece hai sbagliato sicuramente qualcosa a livello di logica.

Deve stampare nl db la data aggiornata ogni volta che viene cliccata una pagina, che modifica devo fare?
 
Dipende dal formato con cui vuoi archiviare la data, anzitutto che definizione ha la colonna dataGmtS nella tabella visite ?
 
Supponendo dal nome del campo che la tua sia una data GMT, ti direi di dichiararla così nel tuo script:
PHP:
$dataGmtS = gmdate('D, d M Y H:i:s \G\M\T');  //---->LINEA 30
Questo di base dovrebbe risolvere i tuoi problemi.


Volendo fare le cose per bene invece ti direi invece di cambiare nel database i Tipi delle colonne dataGmtS e data_localeS rispettivamente in DATETIME e TIMESTAMP.
A questo punto la tua linea 30 sarebbe più appropriata così:
PHP:
$dataGmtS = gmdate('Y-m-d H:i:s');  //---->LINEA 30


PS: gmdate è identica alla funzione date di php, soltanto che si riferisce sempre al Greenwich Mean Time.
 
Supponendo dal nome del campo che la tua sia una data GMT, ti direi di dichiararla così nel tuo script:
PHP:
$dataGmtS = gmdate('D, d M Y H:i:s \G\M\T');  //---->LINEA 30
Questo di base dovrebbe risolvere i tuoi problemi.


Volendo fare le cose per bene invece ti direi invece di cambiare nel database i Tipi delle colonne dataGmtS e data_localeS rispettivamente in DATETIME e TIMESTAMP.
A questo punto la tua linea 30 sarebbe più appropriata così:
PHP:
$dataGmtS = gmdate('Y-m-d H:i:s');  //---->LINEA 30


PS: gmdate è identica alla funzione date di php, soltanto che si riferisce sempre al Greenwich Mean Time.


Così non da errore e si aggiorna, nel db stampa: 1397835770 Fri, 18 Apr 2014 15:42:50 GMT

Però non ho capito una cosa: nel codice del sondaggio ho questo:

$dataGmtS=$giorno[date('w')].' '.date('d').' '.$mese[date('m')-1].' '.date('Y - H:i:s \G\M\T P');

e stampa nel db: Venerdì 28 marzo 2014 - 09:26:42 GMT +01:00

Perché nel sondaggio funziona e in questo ho dovuto mettere il tuo gmdate?


PHP:
 if ($continua) { 
    $data_localeS = time(); //Stampa nel db la data numerica es. 1360585588
    $dataGmtS = gmdate('D, d M Y H:i:s \G\M\T');    
    $mysqli = new mysqli("localhost", "gruppoalveo", "pwd", "my_gruppoalveo");   
    $url = $_SERVER['PHP_SELF']; 
    $esiste = $mysqli->query ("SELECT * FROM visitate WHERE url='$url'"); 
    if ($esiste->num_rows == 0) { 
      $mysqli->query ("INSERT INTO visitate VALUES ('$data_localeS', '$dataGmtS', '$title', '$url', 1)"); 
    } 
    else { 
      $old = $esiste->fetch_array(MYSQLI_ASSOC);   
      $visite = $old['visite'] + 1; 
      $mysqli->query("UPDATE visitate SET data_localeS='$data_localeS', dataGmtS='$dataGmtS', pagina='$title', visite='$visite' WHERE url='$url'"); 
    } 
  } 
}   
}
 
Ultima modifica:
Ho chiarito, funzionano entrambi, erano le variabili che davano problema.
 

Discussioni simili