Visualizzazione risultati 1 fino 13 di 13

Discussione: Apici e Virgolette - come eliminare le interruzioni di codice

  1. #1
    exlot non è connesso Utente giovane
    Data registrazione
    14-06-2016
    Messaggi
    38

    Predefinito Apici e Virgolette - come eliminare le interruzioni di codice

    Ciao a tutti, so che sarà il solito problema trito e ritrito, ma non riesco a superarlo.
    Ho creato una funzione per pulire il testo che inseriscono gli utenti nel db. Ma non funziona la correzione degli ' e delle "

    Codice PHP:
    function caratterispecialiIn($testo) {

    $testo = addslashes(htmlspecialchars($testo));
    $testo=str_replace("<","&lt;","$testo");
    $testo=str_replace(">","&gt;","$testo");
    $testo=eregi_replace("\'","&rsquo;","$testo");
    $testo=eregi_replace("\"","&quot;","$testo");
    $testo=eregi_replace("\n","<br/>","$testo");

    return(
    $testo);

    }
    Ho provato addslashes ho provato la eregi_replace, la str_replace, ho provato l'htmlspecialchars ... non riesco a far scompare l'apice e le virgolette dal testo inviato ...

    Codice PHP:
    $titolo=caratteriWebIn(trim($_POST['titolo']));
    $testo=caratteriWebIn(trim($_POST['testo']));

    $queryTopic=mysql_query("SELECT * FROM t_topic WHERE idTopic='".$_GET['id']."'");
    $rowTopic=mysql_fetch_array($queryTopic) or die (mysql_error());

    $testoMod=caratteriWebIn($rowTopic['testo']);

    $rowUpdate="UPDATE t_topic SET titolo='".$titolo."', testo='".$testo."', modificato='".$testoMod."' WHERE idTopic='".$_GET['id']."'";
    Cosa sbaglio?

  2. #2
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,896

    Predefinito

    Aspetta... Tu non stai provando un testo "grezzo" ma bensì un testo che verrà salvato in MySQL... La sintassi SQL senza alcun escape "" fa interrompere la query e con questo ti ho dimostrato perché non trovi la corrispondenza.
    Segue un esempio per comprendere meglio echo "l'alba"; //output l'alba ... Funzione addslashes("l'alba "); //output l\'alba
    PS. Non ho neanche visualizzato il tuo codice poiché mi sono solo basato nella tua espressione per descrivere questo problema.
    Ultima modifica di darbula : 18-11-2017 alle ore 14.46.20

  3. #3
    exlot non è connesso Utente giovane
    Data registrazione
    14-06-2016
    Messaggi
    38

    Predefinito

    puoi spiegarmi la storia degli "escape" ? perché più che usare addslashes o le replace della stringa non saprei che fare

  4. #4
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,896

    Predefinito

    Ho aggiunto un esempio nel post precedente... Se hai ancora dubbi chiedi pure

  5. #5
    exlot non è connesso Utente giovane
    Data registrazione
    14-06-2016
    Messaggi
    38

    Predefinito

    quindi l'ho già fatto, ma non va

  6. #6
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,896

    Predefinito

    Mi prendi una stringa a caso che si basa prima di utilizzare la tua funzione?
    Edit: $stringa1 = "\\\""; per ricercare una stringa che abbia \"
    Ultima modifica di darbula : 17-11-2017 alle ore 22.34.59

  7. #7
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Le funzioni mysql_* sono deprecate. Usando mysqli o PDO potresti risolvere il problema automaticamente usando i prepared statement...

    Occhio che eregi_replace (che pure è deprecata...) funziona con espressioni regolari, non puoi passarle direttamente la stringa da sostituire! Se intendi usarla in questo modo, devi piuttosto considerare str_replace.

    Inoltre non c'è nessun motivo di interpolare le variabili quando le passi alle funzioni:
    Codice PHP:
    // Inutile (e forse causa di erorri)
    $testo = str_replace("<", "&lt;", "$testo");

    // Corretto
    $testo = str_replace("<", "&lt;", $testo);
    Poi, ma questo immagino sia una svista, definisci una funzione caratterispecialiIn, ma poi nel codice non la usi...

    Infine, va bene aggiungere i backslash per evitare SQL Injection e simili, ma non credo che sostituzioni come "\n" in "<br>" siano una buona idea. La base di dati dovrebbe essere indipendente dalla rappresentazione (in questo caso HTML).
    Se tu un giorno volessi, per esempio, avere un'applicazione mobile che recupera i dati, ti ritroveresti un testo con elementi HTML come "<br>" anziché "\n" e dovresti ri-convertirlo nel formato originale. Molto più semplice lasciare il testo così com'è e convertirlo una sola volta laddove necessario.

  8. #8
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,896

    Predefinito

    Si potrebbe anche optare per la funzione strtr dove from e to sono da e a... Se non si utilizza la sintassi per gli array si deve avere cura che from e to siano della stessa lunghezza..
    Segue un esempio di una stringa già trasformata con l'escape
    Codice PHP:
    <?php
    $var
    = addslashes("\"'"); //sono 4 bytes
    $var = strtr($var, array("\\\"" => "\"", "\\'" => "'")); //sono due bytes
    var_dump($var);
    ?>
    per ulteriori approfondimenti dal manuale php consultare le stringhe racchiuse da apici

  9. #9
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,745

    Predefinito

    Quel codice scritto così è vulnerabile a SQL Injection, ossia dà la possibilità ad un malintenzionato di eseguire qualsiasi tipo di query al database. La cosa migliore è usare gli Prepared Statements.

  10. #10
    exlot non è connesso Utente giovane
    Data registrazione
    14-06-2016
    Messaggi
    38

    Predefinito

    Ragazzi sono vecchio come programmatore... mi consigliate un sito dove aggiornarmi in italiano ovviamente ^_^

  11. #11
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    mi consigliate un sito dove aggiornarmi in italiano
    https://learnenglish.britishcouncil.org/en, https://encrypted.google.com/search?...earn%20english...

    Dai a un uomo un pesce e lo sfamerai per un giorno. Insegnagli a pescare e lo sfamerai per tutta la vita.
    -proverbio cinese
    Risorse in Italiano se ne possono anche trovare, ma non sempre sono adeguatamente aggiornate. Nel migliore dei casi sono traduzioni più o meno precise di contenuti in Inglese.

  12. #12
    exlot non è connesso Utente giovane
    Data registrazione
    14-06-2016
    Messaggi
    38

    Predefinito

    Detesto il sito php in inglese T_T mi costringi a leggerlo così ... pffffff
    Un sito che spieghi gli aggiornamenti semplicemente ?

  13. #13
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,761

    Predefinito

    Citazione Originalmente inviato da exlot Visualizza messaggio
    Un sito che spieghi gli aggiornamenti semplicemente ?
    Non l'ho letto, ma di solito html.it fa articoli carini: prova a dare un'occhiata: http://www.html.it/pag/63163/mysqli-...red-statement/

    In ogni caso, la documentazione ufficiale è un must.

    Ciao!

Regole di scrittura

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