Buongiorno a tutti, da poco sto studiando php-mysql, vorrei realizzare uno script che converta e formatti tutti i valori dei vari $_POST prima di inviarli al db.
Ho trovato i rete uno script molto utile per applicare gli addslashes a tutti i valori contenenti l'apice provenienti da un form tramite i S_POST.
Eccolo
function as_array(&$arr_r)
{
foreach ($arr_r as &$val) is_array($val) ? as_array($val):$val=addslashes($val);
unset($val);
}
as_array($_POST);
messo prima di
$insert = mysql_query ("INSERT INTO anagrafica (nome, data_nascita) VALUES ('$_POST[nome]','$_POST[data_nascita]')");
funziona perfettamente e i dati vengono scritti nei campi di mysql così: es.: D'Aquila
Sto cercando ora di realizzare uno script che permetta di fare più conversioni sui vari $_POST utilizzando un filtro sul nome del campo (ad esempio tutti i nome campi che iniziano con data_ per convertire anche la data d'inserimento nel form in formato mysql), ma riesco a stampare i valori esatti prima di $insert = mysql_query ("INSERT INTO bla bla
da lì in poi tornano ad essere non convertiti, qualcuno sa indicarmi dove sbaglio?
ecco il codice con le verifiche echo prima e dopo INSERT INTO
<?PHP
// memorizzo nell'array campiControllati tutti i campi che sono arrivatati da $_POST
$campiControllati = checkCampo($_POST, "data_");
// Esempio di conversione con un prefisso data_
foreach ($campiControllati as $chiave => $valore)
echo $campiControllati[$chiave] . "<br/>";
function checkCampo($campi, $prefisso) {
foreach ($campi as $key => $value) {
// Converte la data in formato MYSQL
if (substr($key, 0, strlen($prefisso)) == "data_") {
$campi[$key] = date('Y-m-d',strtotime($campi[$key]));
}
// Spazio per inserie altri prefissi da convertire
// .....
// Aggiunge lo SLASH ai campi che contengono l'apice
$campi[$key] = addslashes($campi[$key]);
}
// restituisce l'array con i campi convertiti
return $campi;
}
$insert = mysql_query ("INSERT INTO anagrafica (nome, data_nascita) VALUES ('$_POST[nome]','$_POST[data_nascita]')");
echo $_POST[nome]."<br/>";
echo $_POST[data_nascita];
?>
AL primo echo li stampa formattati correttamente per mysql, es.:
D\'Aquila
1986-02-05
ma quando arrivano a $insert = mysql_query ("INSERT INTO bla bla
tornano ad essere non convertiti (vedi ultimi echo di esempio)
D'Aquila
05-02-1986
Sapete dirmi come far funzionare fino in fondo lo script?
Vi ringrazio molto.
Francesco
Ho trovato i rete uno script molto utile per applicare gli addslashes a tutti i valori contenenti l'apice provenienti da un form tramite i S_POST.
Eccolo
function as_array(&$arr_r)
{
foreach ($arr_r as &$val) is_array($val) ? as_array($val):$val=addslashes($val);
unset($val);
}
as_array($_POST);
messo prima di
$insert = mysql_query ("INSERT INTO anagrafica (nome, data_nascita) VALUES ('$_POST[nome]','$_POST[data_nascita]')");
funziona perfettamente e i dati vengono scritti nei campi di mysql così: es.: D'Aquila
Sto cercando ora di realizzare uno script che permetta di fare più conversioni sui vari $_POST utilizzando un filtro sul nome del campo (ad esempio tutti i nome campi che iniziano con data_ per convertire anche la data d'inserimento nel form in formato mysql), ma riesco a stampare i valori esatti prima di $insert = mysql_query ("INSERT INTO bla bla
da lì in poi tornano ad essere non convertiti, qualcuno sa indicarmi dove sbaglio?
ecco il codice con le verifiche echo prima e dopo INSERT INTO
<?PHP
// memorizzo nell'array campiControllati tutti i campi che sono arrivatati da $_POST
$campiControllati = checkCampo($_POST, "data_");
// Esempio di conversione con un prefisso data_
foreach ($campiControllati as $chiave => $valore)
echo $campiControllati[$chiave] . "<br/>";
function checkCampo($campi, $prefisso) {
foreach ($campi as $key => $value) {
// Converte la data in formato MYSQL
if (substr($key, 0, strlen($prefisso)) == "data_") {
$campi[$key] = date('Y-m-d',strtotime($campi[$key]));
}
// Spazio per inserie altri prefissi da convertire
// .....
// Aggiunge lo SLASH ai campi che contengono l'apice
$campi[$key] = addslashes($campi[$key]);
}
// restituisce l'array con i campi convertiti
return $campi;
}
$insert = mysql_query ("INSERT INTO anagrafica (nome, data_nascita) VALUES ('$_POST[nome]','$_POST[data_nascita]')");
echo $_POST[nome]."<br/>";
echo $_POST[data_nascita];
?>
AL primo echo li stampa formattati correttamente per mysql, es.:
D\'Aquila
1986-02-05
ma quando arrivano a $insert = mysql_query ("INSERT INTO bla bla
tornano ad essere non convertiti (vedi ultimi echo di esempio)
D'Aquila
05-02-1986
Sapete dirmi come far funzionare fino in fondo lo script?
Vi ringrazio molto.
Francesco