31 – 32 Pulire i dati passati da un form

Dato questo form html:

<html>
 <form name="test" action="etrim.php" method="post" >
 Cognome <input type="text" id="cognome" name="cognome" value="" size="40" maxlength="40"/><br />
 Nome <input type="text" id="nome" name="nome" value="" size="40" maxlength="40"/><br />
 Codice Fiscale <input type="text" id="cf" name="cf" value="" size="16" maxlength="16"/><br />
 <input type="submit"/> <input type="reset"/>
 </form>
</html>

Visualizzato così:

Cognome
Nome
Codice Fiscale

 creiamo la pagina etrim.php che verrà richiamata dalla proprietà action=”etrim.php”, dove inseriremo il codice php per ricevere i dati dal form.

<?php
 $congnome=$_REQUEST["cognome"];
 $cognome= ltrim($congnome); 
 echo $cognome;
?>

La finzione $_REQUEST ha il compito di ricevere i dati inseriti nei campi.

Con il codice  $cognome= ltrim($congnome);  vado a pulire la mia stringa di tutti gli spazi vuoti a sinistra (left trim).

Scrivendo $cognome= ltrim($congnome, “#”); vado a togliere gli spazi e i cancelletti. Per la destra ovviamente il comando è rtrim.

Se voglio pulire sia a destra che a sinistra userò semplicemente trim.

Per forzare le stringhe a diventare minuscole la funzione è strtolower, maiuscole strtoupper.

Solo la prima lettera maiuscola: ucfirst, solo la prima lettera di ogni parola: ucwords.

Un altro esempio dal precedente form è quello di estrarre i primi 6 caratteri del codice fiscale, quindi nel file e trim.php metterò:

$CF=$_REQUEST["cf"];
echo "La codifica del cognome/nome è: " . substr($CF, 0, 6);

La funzione substr estrae tutti i caratteri presenti nella variabile $CF partendo dal carattere 0 fino al sesto. potrei anche eludere l’ultimo parametro e scrivere substr($CF, 6); avendo la restante parte del codice fiscale (dal settimo carattere in poi).

Aggiungiamo nel file etrim.php il codice per la password che controlla che un carattere non venga ripetuto più di 3 volte:

$psw=$_REQUEST["psw"];
 for ($pos=0; $pos<strlen($psw); $pos++)
 if (substr_count($psw, $psw[$pos]) > 3 )
 echo "Errore il carattere '$psw[$pos]' si ripete più di 3 volte... "

La funzione substr_count conta quante volte nella stringa inserita come primo parametro ($psw) è contenuta un altra stringa o carattere scritta nel secondo parametro ($psw[$pos] ). Volendo si possono aggiungere un terzo parametro che sono da che lunghezza della stringa partire (int offset) e in quarto, fino a che lunghezza arrivare (int length). La funzione substr_count è case sensitive. Il messaggio di errore verrà ripetuto tante volte quanto si ripete il carattere maggiore di 3, per farlo dire 1 volta sola, basta interrompere il ciclo dopo l’ echo con un break.

Adesso aggiungiamo una verifica sulla password che controlla che non contenga all’interno il cognome:

$pos=strpos($psw, $cognome);
 if ($pos)
 echo "cognome rilevato alla posizione $pos ...";

La funzione che permette di individuare la posizione di una stringa all’interno di un’altra è strpos. Nell’esempio tutte i casi in cui viene inserito il cognome generano l’errore, tranne se si inserisce solo il cognome che sarebbe visto alla posizione 0 e quindi il confronto debole farebbe generare un false sull’if. Per evitare ciò bisogna usare il confronto forte, quindi :

if ($pos !== false)

Da notare che strpos restituisce il numero della posizione di una stringa da dove comincia, se volessimo restituito il valore dove finisce dovremmo usare strrpos,  dove la r aggiuntiva sta per right.