Monthly Archive for October, 2008

Inizializzare un cookie

Per inizializzare un cookie con php si utilizza la funzione
setcookie(nome, valore, scadenza, percorso, dominio, sicurezza);
che va messa all'inizio dello script.
I parametri, di facile lettura:

  • nome: è il nome che avrà il cookie;
  • valore: il valore del cookie;
  • scadenza: indica quando scadrà il cookie in secondi;
  • percorso: del server su cui il cookie sarà disponiblie
  • dominio: il dominio relativo
  • sicurezza: se settato su TRUE il cookie si inizializza solo se esiste una connessione https (possiamo tralasciare)

Supponiamo di voler chiedere ad un visitatore il suo nome per registrarlo su un cookie e salutarlo ogni volta che ritorna sul sito.
Per prima cosa nella pagina index.php verifichiamo che il cookie non esista già, se non esiste chiediamo al visitatore di inserire il suo nome tramite un semplice form che invierà le informazioni a set_cookie.php, altrimenti possiamo già salutarlo chiamandolo per nome.

PHP:
  1. <?php
  2. $the_cookie=$_COOKIE['nome_visitatore'];
  3.  
  4. if (empty($the_cookie)) {
  5.     echo "  <form method=\"post\" action=\"set_cookie.php\">
  6.           Ciao, come ti chiami?
  7.           <input type=\"text\" name=\"nome\" />
  8.           <input type=\"submit\" name=\"Submit\" value=\"Submit\" />
  9.           </form>";
  10.  } else {
  11.      echo "Ciao ".$the_cookie."!";
  12.  }
  13.  ?>

in set_cookie.php avremo dunque il recupero del nome inviato e l'inizializzazione del cookie.

PHP:
  1. <?php
  2. $nome_da_registrare=$_POST['nome'];
  3. setcookie("nome_visitatore",$nome_da_registrare, time()+3600, "/");
  4.  
  5. echo "Cookie inizializzato, <a href=\"index.php\">Torna indietro</a>";
  6. ?>

N.B.
time()+3600 -> equivale a un'ora.
"/" -> il coockie è valido per tutto il dominio
il paramentro dominio può essere tralasciato se non esistono subdomini

Contare i caratteri di una stringa

Prendo spunto da una chiave di ricerca utilizzata per arrivare qua.
Contare i caratteri di una stringa in php è molto semplice perchè esiste già una funzione adatta a questo scopo:
strlen($stringa)
Una cosa da tenere sempre presente è che gli spazi vuoti sono considerati un carattere come qualsiasi altro e vengono quindi conteggiati.

PHP:
  1. $stringa = "sempreverde";
  2. echo strlen($stringa); // il risultato sarà 11
  3.  
  4. $stringa = "stringa con spazi vuoti";
  5. echo strlen($stringa); // il risultato sarà 23

Recuperare valori da un Array

Un Array è una sorta di variabile che contiene più valori (facendola facile). Un metodo comodo per recuperare i valori di un Array è utilizzare un cliclo for come nell'esempio qui sotto.
La funzione count permette di contare gli elementi dell'array e quindi impostare il ciclo.

PHP:
  1. $stati = array('italia', 'francia', 'spagna', 'olanda', 'belgio');
  2.  
  3. $numero_stati = count($stati);
  4.  
  5. for ($contatore=0; $counter<=$numero_stati; $contatore++) {
  6.     echo $stati[$contatore] . "<br>";
  7. }

Quello che restituisce il ciclo for è l'equivalente di

PHP:
  1. echo $stati[0] . "<br>";
  2. echo $stati[1] . "<br>";
  3. echo $stati[2] . "<br>";
  4. echo $stati[3] . "<br>";
  5. echo $stati[4] . "<br>";

Ovviamente il ciclo for e la funzione count permettono di lavorare su Array dei quali non si conosce a prescindere il numero degli elementi.

Troncare una stringa

In alcuni casi puoi aver necessità di riportare solo una parte di una stringa molto lunga. Ad esempio quando devi far vedere il preview di una news. A questo scopo torna utilissima una funzione già bella pronta di php:
substr ( string ,start [,length] )
i 3 paramentri da prendere in considerazioni sono:

  • la stringa su cui devi lavorare (string)
  • la posizione di partenza (start)
  • il numero di caratteri che vuoi visualizzare (length)

ecco ad esempio come prendere i primi 35 caratteri del primo verso della Divina Commedia

PHP:
  1. $string ="Nel mezzo del cammin di nostra vita
  2. mi ritrovai per una selva oscura,
  3. ché la diritta via era smarrita.
  4. ";
  5. $preview = substr($string, 0, 35); // "0" indica l'inizio
  6. echo $preview." ...";

Il risultato dell'echo sarà:
"Nel mezzo del cammin di nostra vita ..."
...
come invece contare le parole e non i caratteri, te lo faccio vedere un'altra volta

Html dentro php

Quando si inserisce del codice html all'interno di una chiamata echo, ricordarsi di anteporre il backslash \ ai doppi apici ". In questo modo.

PHP:
  1. echo "<img src=\"immagine.gif\" width=\"72\" height=\"72\">";

In alternativa si possono direttamente escludere le virgolette, ma è decisamente poco elegante e può in casi particolari generare comunque errore. Non in questo.

PHP:
  1. echo "<img src=immagine.gif width=72 height=72>";

Recupero valori da un select multiplo

Creare un campo input select con possibilità di selezione multipla come questo qui a fianco non è un problema, può invece esserlo recuperare tutti i valori che vengono postati.
Optare per una selezione di questo tipo significa voler passare più valori per la stessa variabile, dovrai quindi necessariamente trattarla come array, utilizzando le parentesi quadre "[]" nel nome del select. Nell'esempio qui sotto il select lo chiamo Selezione[] ed invia i valori alla pagina visualizza.php.

HTML:
  1. <title>Seleziona</title>
  2. </head>
  3. <form id="form" name="form" method="post" action="visualizza.php">
  4.   <select name="Selezione[]" size="5" multiple="multiple">
  5.     <option value="Valore1">Opzione 1</option>
  6.     <option value="Valore2">Opzione 2</option>
  7.     <option value="Valore3">Opzione 3</option>
  8.     <option value="Valore4">Opzione 4</option>
  9.     <option value="Valore5">Opzione 5</option>
  10.   </select><br>
  11.   <input type="submit" name="Submit" value="Invia" />
  12. </form>
  13. </body>
  14. </html>

A questo punto nel file visualizza.php con foreach puoi recuperare tutti i valori ed utilizzarli come meglio credi.

PHP:
  1. <?php
  2. $Selezione=$_POST['Selezione'];
  3.  
  4. foreach ($Selezione as $valore) {
  5.     echo "$valore<br>\n";
  6. }
  7. ?>

Prendendo d'esempio sempre l'immagine in alto, il risultato sarà:
Valore2
valore4

Veloce alternativa ad echo

Esiste una sintassi alternativa ad echo, poco usata, poco elegante, ma particolarmente veloce. Pratica soprattutto quando si usano inserti di php
es.

PHP:
  1. <?php
  2. echo "SuperPippo";
  3. ?>

può essere sostituito con

PHP:
  1. <?="SuperPippo"?>

Allo stesso modo se invece di una stringa vuoi stampare a video il valore di una variabile $var puoi scrivere

PHP:
  1. <?=$var?>

Leggere il contenuto di una directory

Con questo script è possibile leggere il contenuto di una directory.
Tramite un cliclo while viene mostrato il nome dell'oggetto trovato, se trattasi di file o directory e la dimensione

PHP:
  1. $Directory  = "."; // la directory di cui mostrare il contenuto
  2.  
  3. if(is_dir($Directory))
  4. {
  5.     $dir = opendir($Directory);
  6.     echo "<pre>";
  7.     while(false !== ($file = readdir($dir)))
  8.     {
  9.         $type = filetype($Directory ."/". $file);
  10.     // $size = filesize($file); corretto come sotto
  11.         $size = filesize($Directory ."/". $file);
  12.         echo "$file | $type | $size \n";
  13.     }
  14.     closedir($dir);
  15.     echo "</pre>";
  16. }
  17. else
  18. {
  19.     echo $Directory . " non è una directory";
  20. }

Convertire il formato data

Può spesso succedere di lavorare con le date in formato AAAA-MM-GG e di doverle convertire nel ns. formato GG-MM-AAAA (o viceversa). Un caso tipico si presenta quando una data estratta da un database mysql va mostrata a video ad un'utenza italiana.
Con questa semplice funzione è possible convertire le date sia dal formato americano a quello italiano che viceversa.

PHP:
  1. function ConvertitoreData($data){
  2.     $separa=explode ("-",$data);
  3.     $a=$separa[0];
  4.     $b=$separa[1];
  5.     $c=$separa[2];
  6.     $data_convertita="$c-$b-$a";
  7.     return $data_convertita;
  8. }
  9.  
  10. $data_da_convertire="2008-10-20";
  11. echo ConvertitoreData($data_da_convertire);

il risultato dell'echo di riga 11 sarà "20-10-2008".

Aggirare register_globals = Off

Premessa: per questioni di sicurezza è consigliato avere il pnp.ini con settate le register_globals = On.
Può però succedere che in particolari casi, codice già scritto vada trasferito da un server la cui configurazione del php aveva le register_globals settate su Off ad un server con le register_globals settate su On.
Se il codice non riguarda nulla di particolarmente rilevante per la sicurezza, è possibile evitare di correggerlo facendo in modo che in ogni pagina venga semplicemente richiamato questo script.

PHP:
  1. if (!ini_get('register_globals')) {
  2.    $superglobals = array($_SERVER, $_ENV, $_FILES, $_COOKIE, $_POST, $_GET);
  3.    if (isset($_SESSION)) {
  4.       array_unshift($superglobals, $_SESSION);
  5.    }
  6.    foreach ($superglobals as $superglobal) {
  7.       extract($superglobal, EXTR_SKIP);
  8.    }
  9. }