Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di bANART
    Registrato dal
    Jul 2005
    Messaggi
    662

    Metto "un" addslashes ma in db appare \\\

    (deadline progetto 13/03/2011 h 18:00)

    Ciao a tutti,
    mi succede una cosa strana...
    Nel codice scrivo $nomes = addslashes($_POST['nome']);
    ...ma nel database mi compare D\\\\'Angelo

    Ho controllato e ricontrollato, prima di scrivere sul db viene aggiunto una sola volta addslashes.

    Mica mi sapreste dire come mai?
    Matteo Coletta - fotografia
    Fotografo Lanciano - Fotografia a Lanciano e Pescara

  2. #2
    Utente di HTML.it L'avatar di Grino
    Registrato dal
    Oct 2004
    Messaggi
    739
    Di norma questo accade se hai le magic quote su on nel file php.ini. Le magic quote, se attive, non fanno altro che fare l'escape delle stringhe che ti arrivano da POST o GET...

    Quindi l'utente inserisce "D'Angelo"
    Le magic quote ti riportano "D\\'Angelo"
    il tuo addslashes dovendo fare l'escape della stringa trova lo \ e ' e quindi fa l'escape dei due caratteri dando "D\\\\'Angelo"

    Soluzione:
    1)disattivare le magic quote nel php.ini
    2)controllare lo stato delle magic quote con la funzione get_magic_quotes_gpc() e comportarsi di conseguenza

    Nota:
    non utilizzare addslashes, ma preferisci mysql_real_escape_string() che ti effettua un escaping corretto anche su dati binari.
    Siamo sempre troppo gelosi delle nostre grandi piccole opere! - Grino inedito.
    Lavori e Lavoretti

  3. #3
    Utente di HTML.it L'avatar di bANART
    Registrato dal
    Jul 2005
    Messaggi
    662
    Una cosa di questo genere?

    Codice PHP:
    if(get_magic_quotes_gpc()!="1"){
        
    $nomes mysql_real_escape_string($_POST['nome']);
        
    $cognomes mysql_real_escape_string($_POST['cognome']);
    }else{
        
    $nomes $_POST['nome'];
        
    $cognomes $_POST['cognome'];

    Matteo Coletta - fotografia
    Fotografo Lanciano - Fotografia a Lanciano e Pescara

  4. #4

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    Utente di HTML.it L'avatar di Grino
    Registrato dal
    Oct 2004
    Messaggi
    739
    Le magic quotes sono deprecate, quindi sarebbe meglio disabilitarle modificando il php.ini. Se non puoi modificare il php.ini, piuttosto che ripetere due volte le assegnazioni, o chiamare una funzione per ogni elemento che recuperi dagli array GET,POST o COOKIE di PHP come suggerito dalla pillola, puoi fare eseguire in ogni script il codice (magari lo piazzi nel file di connessione al db o dove inizializzi la tua applicazione)

    Codice PHP:
    function undo_magic_quotes(&$array){
        if(
    get_magic_quotes_gpc ()){
            foreach (
    $array as $key => $value) {
                if(
    is_array($value))
                    
    undo_magic_quotes ($value);
                elseif(
    is_string($value))
                    
    $value=stripslashes ($value);

                
    $array[$key]=$value;
            }
        }
    }

    function 
    undo_magic_quotes_gpc(){
        
    undo_magic_quotes($_GET); 
        
    undo_magic_quotes($_POST);
        
    undo_magic_quotes($_COOKIE);
    }

    undo_magic_quotes_gpc(); 
    quindi ti comporti sempre come se fossero disabilitate.
    Siamo sempre troppo gelosi delle nostre grandi piccole opere! - Grino inedito.
    Lavori e Lavoretti

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 © 2025 vBulletin Solutions, Inc. All rights reserved.