Convertire CSV in array multidimensionale in PHP

Ecco un codice per leggere un file CSV in PHP e convertirlo in un array multidimensionale.

Prendo un classico file CSV, di cui per esempio mostro di seguito le prime 4 righe:

2018-10-05 05:54;45334;57732;22;
2018-10-05 05:55;45334;57732;22;
2018-10-05 05:56;45335;57733;22;
2018-10-05 05:57;45335;57733;22;

in cui ogni riga è formata da più campi separati da un punto e virgola (;). In PHP:

$fileName = "nome_del_file.csv"; //questo è il nome del file da caricare
$csvData = file_get_contents($fileName);
$Data = str_getcsv($csvData, "\n"); //scansiono le righe
foreach($Data as &$Row) {
$Row = str_getcsv($Row, ";"); //scansiono gli elementi in ogni riga, separati dal punto e virgola
}

Ora posso accedere a ogni elemento di ogni riga direttamente dalla variabile $Data, ad esempio $Data[0][1] (riga 0 posizione 1) conterrà il valore 45334. Eseguendo il comando print_r($Data) posso stampare a schermo per debug il contenuto dell’array, come mostrato qui sotto:

Array
(
[0] => Array
(
[0] => 2018-10-05 05:54
[1] => 45334
[2] => 57732
[3] => 22
)
//ecc...

Nel caso il separatore non sia il punto e virgola ma la virgola è sufficiente cambiarlo nell’istruzione:

$Row = str_getcsv($Row, ";");

che, nel caso della virgola usata come separatore, diventa:

$Row = str_getcsv($Row, ",");

PHP: Salvare data nel formato GG/MM/AAAA in un campo DATETIME di MySQL

Questo appunto è un codice PHP utile per salvare in un database MySQL una data inserita in un form nel formato “classico” GG/MM/AAAA, quando il campo nel database è di tipo DATETIME ovvero “Y-m-d H:i:s”.

Nel form richiedo di inserire la data in questo formato GG/MM/AAAA:

<input type="text" name="data">

Inviato il form, da PHP  manipolo il campo ricevuto (nel mio caso chiamato “data“,  recuperato con $_POST[“data“]), con la funzione di PHP date():

$data = date('Y-m-d H:i:s', strtotime(str_replace('/','-',$_POST["data"])));

Ora posso salvare il contenuto di $data direttamente nell’opportuno campo del database.

Per fare l’operazione inversa ovvero formattare correttamente la data recuperata dal database con una query (nel mio esempio il campo si chiama proprio data e la tabella mia_tabella) uso la funzione di SQL DATE_FORMAT e salvo il risultato nel nuovo campo data_formattata:

mysql_query(SELECT DATE_FORMAT(data,'%d/%m/%Y') as data_formattata FROM mia_tabella)

 

 

Realizzare un banner popup in jquery visualizzato una volta a sessione

Ecco un codice per realizzare un semplice banner a comparsa che si apra al caricamento di una pagina web, con un ciclo IF in php che consenta di visualizzarlo solo in alcuni giorni della settimana:

<?
 //mostra il banner popup solo venerdì, sabato e domenica (vedere la funzione date() di php per variarne la visualizzazione)
 if ((date('w') == 5) OR (date('w') == 6) OR (date('w') == 0))
 {
 ?>
 <script>
 jQuery(document).ready(function ($) {
 if (sessionStorage.getItem('avviso') !== 'true') {
 $('body').append('<div id="myavviso"><a href="http://www.simonezanella.it" target="_blank"><br /><img src="banner.jpg" alt="banner" style="border: none; width: 100%;" /></a><div class="myavviso-button">Chiudi la pubblicità X</div></div>');
 sessionStorage.setItem('avviso', 'true');
 }
 $('#myavviso .myavviso-button').on('click', function () {
 $('#myavviso').hide();
 });
 $('#reset-session').on('click', function () {
 sessionStorage.setItem('avviso', '');
 });
 });
 </script>
<?
 }
 ?>

Il codice consente di mostrare il banner una volta soltanto all’interno della stessa sessione di visita del sito, inoltre è presente una barra di chiusura del banner. L’interno del popup è impostato per contenere un’immagine cliccabile, ma può ovviamente essere sotituito con quanto si preferisce veicolare col banner. Vanno aggiunte al foglio di stile del sito le seguenti righe di codice CSS:

#myavviso {
 position: fixed;
 top: 30px;
 width: 98%;
 max-height: 790px;
 max-width: 1024px;
 margin: 20px auto;
 background-color: #333;
 padding: 5px;
 z-index: 99999;
 text-align: center;
 }
#myavviso .myavviso-button {
 width: 100%;
 height: 20px;
 position: absolute;
 padding-right: 5px;
 left: 0px;
 top: 1px;
 background-color: #666;
 color: #fff;
 border-radius: 5px;
 cursor: pointer;
 text-align: right;
 }

Variando i parametri nel codice CSS si può personalizzare dimensione, aspetto e posizione del banner a proprio piacimento.
Per il funzionamento del codice è necessario inserire le librerie jquery nel proprio progetto, ad esempio:

<script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
 <script src="http://code.jquery.com/jquery-migrate-1.2.1.min.js"></script>