Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    [php] apici, virgolette.

    ciao a tutti!

    ho un problema! ho un sito con utenti registrati etc etc...

    solo che spesso capita che un utente si registri come L'antonella o Ky"" quindi nomi con virgolette o apici...


    quello che non capisco è questo: quando l'utente si registra non ci sono problemi, mentre quando devo aggiornare la tabella sessioni mi nasce l'errore:

    Query eseguita: UPDATE tabella_sessioni SET user_name='L'Anna', user_id='60' WHERE sess_id='8b53a71319611838f55c0c983aac5ccf'

    MySQL Error: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'Anna', user_id='60' WHERE sess_id='8b53a71319611838f55c0c983aac


    ovviamente vorrei risolvere il problema sin dal momento della registrazioni...per esempio..
    come posso controllare che una data stringa non contenga apici o virgolette?

    tengo a sottolineare il fatto che non è sufficiente un addslashes ne tantomeno un str_replace perchè poi il nick immesso sarebbe diverso.

  2. #2
    con le regular expression, su freephp c'è una bella guida, cmq per controllare che ci siano solo caratteri alfanumerici metti:
    if (eregi("^[0-9a-z]+$",$_POST['nomeiscritto'])){
    //azione
    }else{
    //ha immesso apici o qualcosa del genere
    }
    GdR Online - http://lenar.it/
    Yesterday is history. Tomorrow is mystery.
    Today is a gift. That's why it's called the present

  3. #3

    Re: [php] apici, virgolette.

    [supersaibal]Originariamente inviato da flacchio tengo a sottolineare il fatto che non è sufficiente un addslashes ne tantomeno un str_replace perchè poi il nick immesso sarebbe diverso. [/supersaibal]
    In che senso? La funzione addslashes serve a "proteggere" le stringhe con apici, spiegando a mysql (in questo caso) che l'apice è della stringa, non della query.
    Lo slash quindi avverte mysql che deve considerare l'apice come parte integrante del dato da memorizzare, non come delimitatore del dato.

    Quindi DEVI usare addslashes. Il nick verrà memorizzato correttamente (senza lo slash)

  4. #4
    ma se io faccio...

    un "insert into tabella (nome) VALUES (".addslashes(L'anna).")"

    quando lo riprendo la stringa sarà: L'anna o L\'anna ???

  5. #5
    [supersaibal]Originariamente inviato da flacchio
    ma se io faccio...

    un "insert into tabella (nome) VALUES (".addslashes(L'anna).")"

    quando lo riprendo la stringa sarà: L'anna o L\'anna ??? [/supersaibal]
    sarà: L'anna.

    Come ti ho già detto è una protezione per la sintassi della query

  6. #6
    ottimo grazie!
    quindi va usato solo negli insert, giusto?

  7. #7
    [supersaibal]Originariamente inviato da flacchio
    ottimo grazie!
    quindi va usato solo negli insert, giusto? [/supersaibal]
    Stai attento però ad una cosa: PHP, se impostata la corretta direttiva nel php.ini, mette AUTOMATICAMENTE gli slash a tutti i dati provenienti da POST, GET e COOKIE.
    Quindi se stai inserendo dei dati provenienti da un form, probabilmente questi potrebbero essere già stati "slashati" da PHP.

  8. #8
    sono provenienti da post...

    qual è l punto da controllare?

  9. #9
    dal php.ini
    ; Magic quotes for incoming GET/POST/Cookie data.
    magic_quotes_gpc = On
    lo pruoi controllare anche dinamicamente da script così:

    get_magic_quotes_gpc()

    con il sequente codice fai in modo che, in qualunque circostanza, vengano messi gli slash ai dati gpc (GET, POST, COOKIE)



    Codice PHP:
    if (!get_magic_quotes_gpc())
    {
        function 
    magicSlashes($element)
        {
            if (
    is_array($element))
                return 
    array_map("magicSlashes"$element);
            else
                return 
    addslashes($element);
        }
        
        
    // Add slashes to all incoming GET/POST/COOKIE data.
        
    if (isset ($_GET)     && count($_GET))    $_GET    array_map("magicSlashes"$_GET);
        if (isset (
    $_POST)    && count($_POST))   $_POST   array_map("magicSlashes"$_POST);
        if (isset (
    $_COOKIES) && count($_COOKIES))$_COOKIE array_map("magicSlashes"$_COOKIE);


  10. #10
    secondo me è ad ON..
    questo spiegherebbe perchè quando l'utente si registra (valori passati da POST) nn ci sn problemi
    mentre quando si logga (passati da sessione mi pare, nn ricordo) da problemi

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.