Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    php-mysql script per convertire valori $_POST

    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] . "
    ";

    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]."
    ";
    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

  2. #2
    Utente di HTML.it L'avatar di Ranma2
    Registrato dal
    Mar 2003
    Messaggi
    2,650
    Se stai iniziando ora, usa direttamente PDO che dventerà lo standard per le connessioni a base di dati in php, con PDO non hai nessun problema di conversione dati e sql injection.

    Altimenti devi usare mysql_rel_escape_string e sprintf

  3. #3
    Originariamente inviato da Ranma2
    Se stai iniziando ora, usa direttamente PDO...
    Grazie per l'utile informazione sul PDO.

    Ecco la soluzione per lo script, sbagliavo e gli passavo $_POST senza modificarlo, bisognava partire così

    $_POST = checkCampo($_POST, "data_");

    Grazie ancoea, ciao!
    Fra

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.