Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [php e mySQL] Consiglio sulla gestione del testo inserito in una textarea

    Salve a tutti!
    Siccome ho iniziato a studiare il php e sql da poco, avrei bisogno di un consiglio!
    Allora ho una form con una textarea per l'inserimento dei commenti, siccome l'utente è libero di scrivere cosa vuole devo fare in modo che i caratteri speciali che inserisce non diano fastidio alla memorizzazione nel database. Cercando un po' su internet ho trovato che si può controllare i caratteri speciali con la funzione "htmlentities" e l'interruzione di linea con "nl2br". Però questo non mi risolve il problema degli apici e delle virgolette. Ora pensavo di aggirare la cosa memorizzando il testo inserito in un file txt, così da salvare nel database soltanto il percorso del file. Mi sto sbagliando o è giusto il mio ragionamento?

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2001
    residenza
    Napoli, Italia
    Messaggi
    1,074
    Vuoi togliere anche gli apici e le virgolette nel testo immesso dagli utenti? E se sono apostrofi?...
    Comunque, basta usare str_replace...
    Codice PHP:
    $tuo_testo $_POST["textarea"];
    $testo str_replace("'","",$tuo_testo);
    $testo str_replace("\"","",$testo); 
    La soluzione del file di testo mi sembra inadeguata...
    metatad
    graphic & web design

  3. #3
    Originariamente inviato da metatad
    Vuoi togliere anche gli apici e le virgolette nel testo immesso dagli utenti? E se sono apostrofi?...
    Comunque, basta usare str_replace...
    Codice PHP:
    $tuo_testo $_POST["textarea"];
    $testo str_replace("'","",$tuo_testo);
    $testo str_replace("\"","",$testo); 
    La soluzione del file di testo mi sembra inadeguata...
    Quello che vorrei fare non è togliere gli apici(appunto l'apostrofo) e le virgolette ma fare in modo che vengano considerati semplice testo e non speciale. Con il codice che hai scritto te che cosa succede?

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2001
    residenza
    Napoli, Italia
    Messaggi
    1,074
    Il codice che ti ho postato, elimina dal testo apici e virgolette. Se, invece, vuoi mantenerli, assicurandoti che non vengano interpretati come codice, è un'altro discorso.
    L'apice singolo, non ha bisogno di alcun intervento: non viene considerato codice.
    Per le doppie virgolette, che possono eventualmente essere usate per racchiudere una citazione, e che invece sarebbero interpretate come codice, puoi usare la funzione che ti ho suggerito, opportunamente modificata:
    Codice PHP:
    $testo str_replace("\"","'",$testo);
    $testo str_replace("\"","''",$testo); 
    Nel primo caso, sostituisce le doppie virgolette con un apice singolo, nel secondo caso con due apici.
    Ma, in ogni caso, credo che tu ti stia ponendo un falso problema. Apici singoli e doppie virgolette, infatti, corrono il rischio di essere interpretati come codice soltanto all'interno di una stringa di codice!
    Se tu inserisci in una textarea questo testo:
    L'esempio è "calzante"
    e poi la registri in un db, non avrai alcun problema. Lo stesso, se poi lo leggi dal db e lo pubblichi su una pagina. Certo, se scrivi:
    l'una
    oppure
    "due"
    li attribuisci a delle variabili:
    Codice PHP:
    $uno "l'una";
    $due "\"due\""
    e poi, inserisci questi valori in una stringa - ad es. così:
    Codice PHP:
    echo "<a href=\"miapagina.php?val1=" $uno "&val2=" $due "\">link</a>"
    è chiaro che ti incasina il codice... ma non credo sia il tuo caso.
    metatad
    graphic & web design

  5. #5
    Eppure se nella textarea c'è un apostrofo il testo non mi viene salvato nel database. Ora dato che la query di inserimento è questa:
    Codice PHP:
    $sql="INSERT INTO opere(Titolo,Descrizione,Autore,Path,DataInserimento,Categoria,Tags, Visibilita) VALUES('$titolo','$descrizione','$autore','$target_path','$dataIns','$categoria','$tag','$visibilita')"
    $descrizione è la variabile dove ho salvato il testo della textarea. Non è che gli apici fuori entrano in qualche modo in conflitto con quelli dentro??? Non so proprio come funziona, ma l'unica cosa che so è che senza quell'apostrofo mi viene salvato tutto correttamente...

  6. #6
    Per fortuna PHP ci mette a disposizione una funzione ad hoc.

    Per mettere le \ davanti agli apici
    Codice PHP:
    $testo addslashes($testo); 
    e per toglierli una volta estratti dal database
    Codice PHP:
    $testo stripslashes($testo); 

  7. #7
    Originariamente inviato da DKiller92
    Per fortuna PHP ci mette a disposizione una funzione ad hoc.

    Per mettere le \ davanti agli apici
    Codice PHP:
    $testo addslashes($testo); 
    e per toglierli una volta estratti dal database
    Codice PHP:
    $testo stripslashes($testo); 
    Si così funziona grazie! Ma la funzione addslashes mette gli slash solo agli apici o anche alle virgolette?
    Ma pensavo forse non risolvo tutto semplicemente con la funzione "htmlentities"? o questa la devo incrementare con addslashes??

  8. #8
    con htmlentities() non risolvi nulla...serve per altro...
    ti basta l'addslashes

    PS: fa l'escape solo dei singoli apici...che sono quelli che creano conflitto nelle query...

  9. #9
    Originariamente inviato da DKiller92
    con htmlentities() non risolvi nulla...serve per altro...
    ti basta l'addslashes

    PS: fa l'escape solo dei singoli apici...che sono quelli che creano conflitto nelle query...
    Allora a questo punto mi servono tutte e due...grazie!

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.