Visualizzazione risultati 1 fino 8 di 8

Discussione: problema con gli apici di alcune query

  1. #1
    zulukwebsite non è connesso Utente attivo
    Data registrazione
    16-07-2006
    Messaggi
    290

    Predefinito problema con gli apici di alcune query

    salve a tutti....ho un problema con alcuni campi che potrebbero contenere degli apici

    Codice PHP:
    $query = "insert into mess1 (oggetto, descrizione, mandante, destinatario) values ('".$oggetto."','".$descrizione."' , '$name', '$destinatario')";
    il campo oggetto e descrizione quando contengono degli apici danno errore quando eseguo la query di estrazione

    Codice PHP:
    2° $query = mysql_query("SELECT * FROM tut WHERE name ='$name'");
    anche con questa query ho problemi nel caso il campo $name contenga degli apici

    sapete come posso risolvere??

  2. #2
    Guest

    Predefinito

    htmlspecialchars()
    e
    mysql_escape_string()

    Entrambe sono funzioni php


    Ciao!

  3. #3
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    si... e no

    La cosa migliore è passare sempre tutti i campi attraverso mysql_real_escape_string(), che si occupa di convertire tutti e soli i caratteri che possono fare danni in una query, senza toccarne altri che non è necessario cambiare.

    Se i campi sono tutti in un array, si può felicemente utilizzare array_map()
    Codice PHP:
    $campi = array_map('mysql_real_escape_string', $campi);
    e fare tutto in una riga, o volendo anche al volo
    Codice PHP:
    list($oggetto, $descrizione, $mandante, $destinatario) = array_map('mysql_real_escape_string', array( $oggetto, $descrizione, $mandante, $destinatario) );
    anche se a questo punto non sono certo valga la pena

    Una volta che i campi sono pronti, suggerisco per leggibilità la sintassi con le graffe, in modo che tutte le variabili siano ben evidenziate, anche se sono campi di un array, e tutti gli apici possibili per sicurezza
    Codice PHP:
    $query = "INSERT INTO `mess1` (oggetto, descrizione, mandante, destinatario) VALUES ('{$oggetto}', '{$descrizione}', '{$name}', '{$destinatario}')";
    Le graffe permettono di usare nomi di variabili complessi (array ed oggetti in particolare), aiutano visivamente, e le variabili interne sono in generale più veloci della concatenazione con il punto ".".
    Ultima modifica di dreadnaut : 25-06-2008 alle ore 01.00.47

  4. #4
    Guest

    Predefinito

    Tramutando però tutti i caratteri "pericolosi" nelle loro rispettive entità html si risparmia sul trattamento dei dati nelle successive estrapolazioni dal DB.
    Metti che ci ti dimentichi di backslashare o convertire le stringhe estrapolate e le infili in un campo input...
    La mia idea di portabilità poi mi spinge a memorizzare cmq i dati in maniera che non possano nuocere a successivi ritocchi del codice, anche e soprattutto da parte di terze persone.


    Ciao!

  5. #5
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    vero, ma dipende tutto da a quale livello decidi di mettere la "protezione", e a cosa ti servono i dati che metti nel database.

    Dati che devono essere visualizzati e basta, ha senso htmlspecialcharli prima di metterli nel database. Altri dati che devono essere elaborati in seguito non possono essere convertiti in questo momento, ma vanno convertiti dopo l'estrazione del db e la loro elaborazione.

    Direi che forum, guestbook e simili rientrano nel primo caso - e tutto il testo, in generale - mentre nomi utente, password, e tutto ciò che non deve essere solo visualizzato, andrebbe invece memorizzato come lo si è ricevuto, a meno di mysql_real_escape_string().
    Ultima modifica di dreadnaut : 25-06-2008 alle ore 01.37.37

  6. #6
    zulukwebsite non è connesso Utente attivo
    Data registrazione
    16-07-2006
    Messaggi
    290

    Predefinito

    Citazione Originalmente inviato da dreadnaut Visualizza messaggio
    vero, ma dipende tutto da a quale livello decidi di mettere la "protezione", e a cosa ti servono i dati che metti nel database.

    Dati che devono essere visualizzati e basta, ha senso htmlspecialcharli prima di metterli nel database. Altri dati che devono essere elaborati in seguito non possono essere convertiti in questo momento, ma vanno convertiti dopo l'estrazione del db e la loro elaborazione.

    Direi che forum, guestbook e simili rientrano nel primo caso - e tutto il testo, in generale - mentre nomi utente, password, e tutto ciò che non deve essere solo visualizzato, andrebbe invece memorizzato come lo si è ricevuto, a meno di mysql_real_escape_string().

    grazie risolto....ma quindi mi conviene fare così anche quando registro un utente?? ....cmq ora vado a vedermi bene le funzioni

  7. #7
    Guest

    Predefinito

    Io direi che nel caso si tratti di username, password e simili, certi caratteri meglio tirarli via e basta ;)

    ... ha senso htmlspecialcharli ...
    Mio dio dove andremo a finire!


    Ciaooooooooo!

  8. #8
    zulukwebsite non è connesso Utente attivo
    Data registrazione
    16-07-2006
    Messaggi
    290

    Predefinito

    Citazione Originalmente inviato da debug Visualizza messaggio
    Io direi che nel caso si tratti di username, password e simili, certi caratteri meglio tirarli via e basta ;)


    Mio dio dove andremo a finire!


    Ciaooooooooo!
    grazie

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •