i due (pessimi & inguardabili) codici non coincidono:
L'ordine di applicazione delle funzioni è inverso:
nel primo caso applichi come prima funzione htmlspecialchars
mentre nel secondo caso la applichi per ultima.
Inoltre nel primo caso vi sono funzioni annidate nel secondo no, quindi:
nel primo caso il risultato della funzione annidata è prarametro per quella "esterna"
mentre nel secondo caso applichi distintamente (e in modo insensato) ciascuna funzione sulla variabile $_POST['nome']. Faccio un esempio:
Codice PHP:
// abbiamo due funzioni
// questa ci restituisce il doppio del numero
function doppio($num){ return ($num*2); }
// questa ci restituisce il numero sotratto di tre
function menotre($num){ return ($num-3); }
$numero = 5;
// con funzioni annidate
$risultato_1 = menotre(doppio($numero)); // (5*2)-3 = 7
// se facciamo l'inverso non è la stessa cosa
$risultato_2 = doppio(menotre($numero)); // (5-3)*2 = 4
// se invece le applichiamo isolatamente
// ogni risultato è indipendente dagli altri
$risultato_3 = doppio($numero); // 5*2 = 10
$risultato_4 = menotre($numero); // 5-3 = 2
// per ottenere la stesso di $risultato_1 dovremo fare
// prima il doppio
$primo_step = doppio($numero); // 10
// NB: il parametro è quello ottenuto dal primo step!! cioè 10
// così avremo 10-3 = 7 (come $risultato_1)
$secondo_step = menotre($primo_step);
ERGO:
- l'ordine di applicazione (ovviamente) è rilevante
- bada ai parametri che passi alle funzioni
-------------------
Nel tuo caso specifico per far equivalere i due codici (che sottolineo sono pessimi) il secondo dovrebbe essere:
Codice PHP:
$nome = htmlspecialchars($_POST['nome']);
$nome = addslashes($nome);
$nome = stripslashes($nome);
$nome = mysql_escape_string($nome);