Pagine

Switch PHP, la scelta

Dopo averlo scritto, mi sembra giusto spiegarlo.
Lo Switch() è una funzione di PHP che permette di ottenere un risultato preciso in base a valori predefiniti.
Per andare sul concreto: questo è l'esempio fatto per le funzioni.

$giorno=date("l",time());
switch($giorno){

     case 'Monday':
           $giornoit="Lunedì";
           break;
      case 'Tuesday':
            $giornoit="Martedì";
            break;
      case 'Wednesday':
            $giornoit="Mercoledì";
            break;
      case 'Thursday':
            $giornoit="Giovedì";
            break;
      case 'Friday':
            $giornoit="Venerdì";
            break;
      case 'Saturday':
            $giornoit="Sabato";
            break;
      case 'Sunday':
            $giornoit="Domenica";
            break;
   default:
            $giornoit="Non so che giorno sia!";

}

In questo caso abbiamo analizzato il giorno corrente e, tramite uno switch, abbiamo convertito il giorno corrente con il relativo nome in Italiano.
Il funzionamento è abbastanza intuitivo:

  1. switch() è la funzione
  2. ($giorno) è il valore da prendere in esame, nel nostro caso il giorno in Inglese estratto dalla funzione date() e dalla lettera L minuscola
  3. case è il caso appunto che analizza la variabile giorno e la confronta con ciò che c'è scritto dopo (es. Monday, Saturday ...)
  4. :  dopo il due punti si trova quello che succede se il caso dovesse risultare vero
  5. break si mette sempre alla fine del caso
  6. default invece è ciò che esegue se NESSUNO dei casi precedenti risulta vero. Non necessita di break
Ricordo sempre che le stringhe vanno inserite tra singoli o doppi apici. In questo caso li ho utilizzati tutti e due come esempio.
Se vedete bene ho specificato nel punto 5 che il break va sempre inserito alla fine del caso. Se noi lo volessimo usare per un differente uso, potremmo, mantenendo il primo esempio, specificare quando è un giorno lavorativo della settimana o il weekend.

switch($giorno){


     case 'Monday':
     case 'Tuesday':
     case 'Wednesday':
     case 'Thursday':
     case 'Friday':
            $giornoit="Si lavora!";
            break;
     case 'Saturday':
     case 'Sunday':
            $giornoit="Finalmente il fine settimana!";
            break;
   default:
            $giornoit="Non so che giorno sia!";

}


Come si può vedere i casi sono messi uno dietro l'altro tranne l'ultimo che conterrà ciò che succederà se uno dei casi precedenti dovesse risultare vero: se sarà martedì o venerdì l'azione sarà sempre la stessa. Se invece dovesse essere sabato o domenica, allora entra in gioco il secondo blocco che specificherà che finalmente è arrivato il weekend.
Molto semplice ma se fate un pò di pratica è meglio!


Funzioni PHP, crearle ed eseguirle

Una funzione può salvare la vita a molti programmatori alle prese con un sito complesso. Possono tornare utili però anche a chi fa tanti piccoli siti.
Le funzioni servono per eseguire quelle procedure che scritte una volta rimangono invariate. Un esempio?
Prendete i giorni della settimana: dalla funzione date() estraiamo il nome del giorno della settimana ma rimane in inglese. Per averlo in Italiano cosa possiamo fare? Ma una semplice funzione che analizza il giorno corrente e con uno switch si passano in esame tutti i giorni. La funzione restituirà il nome corretto del giorno della settimana in Italiano. Ecco come:


<? function giorno(){
//con la funzione date estraiamo il giorno corrente tramite la L minuscola
$giorno=date("l",time());
switch($giorno){
case 'Monday':
$giornoit='Lunedì';
break;
case 'Tuesday':
$giornoit='Martedì';
break;
case 'Wednesday':
$giornoit='Mercoledì';
break;
case 'Thursday':
$giornoit='Giovedì';
break;
case 'Friday':
$giornoit='Venerdì';
break;
case 'Saturday':
$giornoit='Sabato';
break;
case 'Sunday':
$giornoit='Domenica';
break;
}
return $giornoit;
}
?>


Per visualizzare il risultato della funzione basterà richiamarla con un semplice echo:

echo giorno();

Semplice, no?



setInterval e Internet Explorer

E' risaputo che Internet Explorer è il browser più problematico e, ahimè (per noi programmatori), il più diffuso. CSS, javascript e chi più ne ha più ne metta.
Oggi ho riscontrato un problema molto grave su una funzione in javascript importante: setInterval.
Questa funzione, utilizzata insieme ad AJAX, permette di inviare e ricevere in modo asincrono dei dati da un'altra pagina senza bisogno di ricaricare la pagina corrente.
Con IE però non funziona. Il problema è che non ricarica la pagina esterna, quindi i valori rimangono quelli del primo caricamento. Se, per esempio, si chiede l'ora attuale, al primo caricamento viene inviata la richiesta alla pagina esterna la quale risponde con l'ora corrente. Tramite la funzione setInterval si fa ripetere la richiesta alla pagina esterna la quale procurerà l'ora ogni tot secondi (a discrezione del programmatore, 1000 = 1 secondo) e così via. Con IE il secondo passaggio non viene effettuato.
Il problema risiede nel fatto che Internet Explorer non ritiene necessario inviare la richiesta perché il file non risulta differente dalla richiesta precedente. Ma a noi serve inviarli comunque e per questo basta un semplice codice:


<script type="text/javascript">
function sndReq() {
     http.open('get', 'paginaesterna.php?ck=' + (new Date()).getTime(), true);
     http.onreadystatechange = handleResponse;
     http.send(null);
}
</script>



La riga che ci interessa è la terza:

http.open('get', 'paginaesterna.php?ck=' + (new Date()).getTime(), true);

In questa riga diciamo al browser di inviare dei dati tramite get alla pagina 'paginaesterna.php'. La variabile 'ck' permette di avere una chiamata unica per ogni richiesta, in quanto la variabile avrà data e ora corrente, che sarà differente sempre (quindi chiamata unica).