Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    6,034

    magic_quotes_gpc e backslashes in tabella

    con magic_quotes_gpc attivo (on) e il seguenti if nella pagina del form e di visualizzazione

    form:
    Codice PHP:
    if (!get_magic_quotes_gpc()) {
    $stringa addslashes($stringa);

    visualizzazione
    Codice PHP:
    if (get_magic_quotes_gpc()) {
    $risultato stripslashes($risultato);

    avviene ciò:

    1. form invia la stringa: l'alba \ "

    2. PHP interpreta la stringa in: l \ 'alba \\ \"

    3. valore finale inserito nel db: l'alba \ "

    4. valore visualizzato nella pagina: l'alba " <-perde il backslash

    Con magic_quotes_gpc = Off
    non cambia nulla!

    Sbaglio il controllo o magic_quotes_gpc non lavora come dovrebbe?

  2. #2
    non ho ben chiaro in quali pagine fai cosa, in ogni modo, per inserire il valore nel DB usa l'apposita funzione della libreria, per MySQL mysql_real_escape_string() o analoga.

    In questo modo estraendo i valori dal DB non serve nessun stripslashes(), li leva il MySQL in automatico.

    Quindi non ti resta che evitare l'effetto degli slash automatici,
    if(get_magic_quotes_gpc())
    $stringa = stripslashes($stringa);

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    6,034
    con magic_quotes_gpc disattivo (Off)

    devo fare per forza così:

    Codice PHP:
    if (!get_magic_quotes_gpc()) {
    $testo mysql_real_escape_string($testo);

    perchè altrimenti, in caso di magic ON, oltre all'escape del php aggiungo anche quello di mysql_real_escape_string e in tabella avrò il backslash: l\'alba \\ \"


    Altro punto di vista: se prima di mysql_real_escape_string faccio anche

    $stringa = htmlspecialchars($stringa, ENT_QUOTES);

    verranno backslahati solo i caratteri che NON sono tradotti in entità, quindi solo \
    Per cui in tabella avrò:

    l&#039 ;alba \ &quot ;


    Quale delle due soluzioni è migliore?

  4. #4
    Originariamente inviato da meganoide
    con magic_quotes_gpc disattivo (Off)

    devo fare per forza così:
    Come ti dicevo, il real_escape_string lo devi fare per forza, perché quella è la maniera giusta di trattare le stringhe per il database.

    Per questo io ti consiglio di annullare ogni effetto del magic_quotes a priori e agire poi di conseguenza (se vai su DB usi real_escape_string, se vai in output non fai niente e se vai dentro un form fai per esempio htmlentities, etc. etc.).

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    6,034
    ok.

    I caratteri come apici, doppi apici, freccia ecc. è meglio lasciarli così o inserirli in tabella come entità html?

  6. #6
    Originariamente inviato da meganoide
    ok.

    I caratteri come apici, doppi apici, freccia ecc. è meglio lasciarli così o inserirli in tabella come entità html?
    Secondo me nel db è sempre bene avere tutto in originale, anche perché le entità sono necessarie solo in casi particolari (se scrivi il valore dentro un <input> ad esempio, ma sono casi molto limitati).

  7. #7
    Utente di HTML.it L'avatar di dany0
    Registrato dal
    Feb 2003
    Messaggi
    422
    visto che ho un problema simile e che ne sapete piu' di me potete aiutarmi???


    quando devo gestire un testo da form cosa devo usare?

    io ho provato cosi'
    $mex=nl2br(mysql_real_escape_string($_POST[messaggio]));

    ma nel db mi inserisce anche le slash (apici \"test\"
    ).....mentre vorrei che inserisse solo quello che scrive l'utente (apici "test") nella form...cosa che invece fa se applico la funzione su un testo definito e non preso quindi da form tramite POST.....

    se riuscissi a inserire cosi' come l'utente lo scrive nojn avrei problemi neppure a richiamarlo....

    mi dite come agire quindi in fase di insert e in output???
    please !!


  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    6,034
    come detto su: se magic_quote è attivo ci pensa lui ad anteporre backslash.

    Io ho usato:

    $stringa_da_form = htmlspecialchars($stringa_da_form);
    $stringa_da_form = nl2br($stringa_da_form);
    if (!get_magic_quotes_gpc()) {
    $stringa_da_form = mysql_real_escape_string($stringa_da_form);
    }
    ....query INSERT....

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.