Newsgroup: it.comp.www.php
Titolo: problemi stripslashes, htmlspecialchars...

Vi riporto il codice per intero sotto, ma la parte che non capisco è quella
relativa alle due funzioni: function strip_it($str) e function
protect_it($str) che trovate rispettivamente nel file insert_per.php e
insert_it.php. Posso capire il discorso di urlencode e urldecode, dato che
viene passata la stringa di interrogazione, ma perchè mettere stripslashes e
htmlspecialchars nel caso venga ricaricato il form(insert_per.php) e
stripslashes prima di passare la stringa di interrogazione? Insomma, se mi
potete delucidare vi sarei molto grato. ecco il codice:
**********inizio insert_per.php************
<html>
<body>
<center><b>Inserimento di un reconrd nella tabella personale</b></center>
<?php
# insert_per.php
$connessione = mysql_connect("localhost","","");
if (!$connessione) {
echo "Impossibile collegarsi al server MySQL!";
exit;
}
$db = mysql_select_db("test_db",$connessione);
if (!$db) {
echo "Impossibile selezionare il database";
exit;
}
?>
#elimina le protezioni dei caratteri nel caso il form sia stato ricaricato
function strip_it($str) {
$str=urldecode($str);
$str=stripslashes($str);
$str=htmlspecialchars($str);
return($str);
}
$sql="SELECT paese FROM paesi";
$risultati_mysql=mysql_query($sql,$connessione);
$num_righe=mysql_num_rows($risultati_mysql);
if ($num_righe==0) {
echo "Spiacente, non ci sono informazioni";
} else {
#abbiamo dei record
echo "<FORM METHOD=GET ACTION=\"insert_it.php\">";
$f_nome=strip_it($f_nome);
$f_indirizzo=strip_it($f_indirizzo);
$f_citta=strip_it($f_citta);
echo "Qual'è il tuo nome? <br> <input type=\"text\" name=\"f_nome\"
value=\"$f_nome\"><br>";
echo "Qual'è il tuo indirizzo? <br> <input type=\"text\"
name=\"f_indirizzo\" value=\"$f_indirizzo\"><br>";
echo "Qual'è la tua città di residenza? <br> <input type=\"text\"
name=\"f_citta\" value=\"$f_citta\"><br>";
echo "Per favore, seleziona un paese: <br>";
echo "<select name=\"f_paese\">";
while ($riga=mysql_fetch_array($risultati_mysql)) {
$f_paese=$riga["paese"];
# mostra i risultati
echo "<option>$f_paese";
}
echo "</select>";
} # fine dell'else
echo "<br><br>";
echo "<input type=\"submit\" value=\"Inserisci il record!\">";
echo "</form>";
echo "<form MERHOD=GET ACTION=\"$PHPSELF\">";
echo "<INPUT TYPE=\"SUBMIT\" VALUE=\"Cancella!\">";
?>
</form>
</body>
</html>
*************fine insert_per.php*************
*************inizio insert_it.php**************
<html>
<body>
<?php
# insert_it.php
$connessione = mysql_connect("localhost","","");
if (!$connessione) {
echo "Impossibile collegarsi al server MySQL!";
exit;
}
$db = mysql_select_db("test_db",$connessione);
if (!$db) {
echo "Impossibile selezionare il database";
exit;
}
function protect_it($str) {
$str=stripslashes($str);
$str=urlencode($str);
return($str);
}
$errore=false;
if ($f_nome == "") {
$errore=true;
echo "Devi inserire il nome<br>";
}
if ($f_indirizzo ="") {
echo "Devi inserire l'indirizzo<br>";
$errore=true;
}
if ($f_citta ="") {
echo "Devi inserire la città<br>";
$errore=true;
}
if ($errore) {
$f_nome=protect_it($f_nome);
$f_indirizzo=protect_it($f_indirizzo);
$f_citta=protect_it($f_citta);
echo "<br><a
href=\"insert_per.php?f_nome=$f_nome&f_indirizzo=$f_indirizzo&f_citta=$f_cit
ta\">Indietro</a>";
exit;
}
$sql="INSERT INTO personale (nome, indirizzo, citta, paese)
VALUES ('$f_nome','$f_indirizzo','$f_citta','$f_paese')";
if (!mysql_query($sql,$connessione)) {
echo "Errore, inserimento del record non riuscito. Fai clic sul pulsante
Indietro e prova di nuovo!<br>";
exit;
} else {
# inserimento OK, informa l'utente
echo "Tabella aggiornata, [".mysql_affected_rows()."] record aggiunti<br>";
echo "Il record di <brù>$f_nome</b> è stato aggiunto";
}
echo "<br><a href=\"insert_per.php\">Indietro</a>";
?>
</body>
</html>
***********fine insert_it.php************
ciao
webby

 
Forse quello che ti confonde e' l'utilizzo di htmlspecialchars nella 
strip_it nel senso che usa una funzione di codifica (htmlspecialchars) 
in strip_it che di per se dovrebbe essere di decodifica. Se pero' pensi 
che i dati che tratta la strip_it vanno inseriti nei campi del form 
capisci che e' necessario trattarli per evitare problemi con caratteri 
come ",<> etc.
stripslashes viene usato perche' nel post dei dati tramite http 
caratteri come ',",\ vengono traslati in \',\",\\.
urlencode e' necessario per poter passare i dati tramite GET, per 
evitare di comporre un url che contenga spazi, ?, & dove non vogliamo.
Ciao.
  -Ema-
P.S.
Se usi le sessioni ed il SID e' passato sull'URL facendo:
echo "<br><a
href=\"insert_per.php?f_nome=$f_nome&f_indirizzo=$f_indirizzo&f_citta=$f_cit
ta\">Indietro</a>";
ti freghi.
Ciao.
  -Ema-

 evitare di comporre un url che contenga spazi, ?, & dove non vogliamo.
questo si, ma ulrencode lo utilizzo soltanto in un link con passaggio di
stringa di interrogazione  e non dal form perchè quest'ultimo codifica
automaticamente, giusto?
Sono pieno di dubbi, lo so :-(