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

    Salvare l'html nel database.

    Salve ragazzi, sto aggiungendo al mio cms un editor testuale ma ho grossi problemi con il salvatggio del testo html nel data base. Mi spiego: se edito il testo dal cms e salvo, php mi restituisce un errore ad indicandomi una riga che non esiste (tipo 1350 quando il mio script è al massi mo di 500 righe), mentre non ho problemi se uso PHPMyAdmin per inserire lo stesso html.
    Di cosa devo tenere conto per il savataggio dell'html nel database? Ho provato a convertire i caratteri speciali ma non tutti li converte. Cosa mi consigliate di fare?
    Dindya

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    se per "salvare" intendi "usare un campo blob" ti segnalo che la dimensione massima del "pacchettone" mysql (predefinita) è di 1MB (vado a memoria), ma è modificabile fino a 2GB (sempre a memoria).

    Dal momento che l'html è, ontologicamente testo, direi che puoi usare un normalissimo BLOB, eventualmente binary se proprio vuoi andar sul sicuro che non ci siano "strane" codifiche "occulte"
    ---
    riguardo invece a php... non ti so dire, lo uso pochissimo

  3. #3
    Grazie franzauker.

    Proverò a fare come dici, ma non credo che sia un problema di dimensine o del tipo di cella perchè il problema avviene nel passaggio da php a mysql.
    A.
    Dindya

  4. #4
    se non stai usando pdo allora devi fare l escape con mysql_realescape. in genere si usa una codifica utf8 per le pagine html quindi ti conviene fare una colonna TEXT nel database di quella codifica, o anche BIGTEXT o LONGTEXT o qualcosa del genere. se non sbaglio blob e text hanno al massimo 65KB di spazio perchè è su 2 byte la lunghezza.
    ...

  5. #5
    Ehhh?Scusa cosa è pdo?
    Dindya

  6. #6
    Originariamente inviato da andrea-dindya
    Ehhh?Scusa cosa è pdo?
    è un layer di astrazione incluso nello distro di php5 che fa automaticamente l'escape dei caratteri speciali. cerca sul sito di php.net per avere tutti i dettagli.
    ...

  7. #7
    Ciao oltre a modificare il campo in longtext come mi hai suggerito tu ho modifcato il codice in questo modo:

    $real_escape = mysql_real_escape_string($_POST['recensione']);
    $escape_chars = array('%', '_', ',', ';', "'");
    foreach($escape_chars as $char)
    {
    $real_escape = str_replace($char, "\\", $real_escape);
    }

    $sql_recensione = "INSERT INTO `recensioni` (`id`, `titolo`, `recensione`, `foto`, `descrizione`, `keywords`, `categoria`) VALUES('NULL', '" . $_POST['titolo'] . "', '" . $real_escape . "', '', '" . $_POST['descrizione'] . "', '" . $_POST['keywords'] . "', '" . $_POST['categoria'] . "')";
    }

    nella parte che mostra il testo nella parte pubblica invece bisogna togliere lo \ inserito in precedenza in questo semplice passaggio

    $search = array("\\");
    $replace = array("'");
    $subject = $mostra_recensione[2];
    $nuovo_testo = str_replace($search, $replace, $subject);

    A.
    Dindya

  8. #8
    Originariamente inviato da andrea-dindya
    Ciao oltre a modificare il campo in longtext come mi hai suggerito tu ho modifcato il codice in questo modo:

    $real_escape = mysql_real_escape_string($_POST['recensione']);
    $escape_chars = array('%', '_', ',', ';', "'");
    foreach($escape_chars as $char)
    {
    $real_escape = str_replace($char, "\\", $real_escape);
    }

    $sql_recensione = "INSERT INTO `recensioni` (`id`, `titolo`, `recensione`, `foto`, `descrizione`, `keywords`, `categoria`) VALUES('NULL', '" . $_POST['titolo'] . "', '" . $real_escape . "', '', '" . $_POST['descrizione'] . "', '" . $_POST['keywords'] . "', '" . $_POST['categoria'] . "')";
    }

    nella parte che mostra il testo nella parte pubblica invece bisogna togliere lo \ inserito in precedenza in questo semplice passaggio

    $search = array("\\");
    $replace = array("'");
    $subject = $mostra_recensione[2];
    $nuovo_testo = str_replace($search, $replace, $subject);

    A.
    Se usi real escale non hai bisogno del foreach:
    codice:
    $real_escape = mysql_real_escape_string($_POST['recensione']);
    
    	$sql_recensione = "INSERT INTO `recensioni` (`id`, `titolo`, `recensione`, `foto`, `descrizione`, `keywords`, `categoria`) VALUES('NULL', '" . mysql_real_escape_string($_POST['titolo']) . "', '" . $real_escape . "', '', '" . mysql_real_escape_string($_POST['descrizione']) . "', '" . mysql_real_escape_string($_POST['keywords']) . "', '" . mysql_real_escape_string($_POST['categoria']) . "')";
    	}
    E poi è ti sei scordato di fare l'escape al campo Descrizione e titotolo etc.

    Non hai bosngo di usare questo quando fai il load di una riga:
    $search = array("\\");
    $replace = array("'");
    $subject = $mostra_recensione[2];
    $nuovo_testo = str_replace($search, $replace, $subject);

    Lo carichi semplicemente
    ...

  9. #9
    Ma sei sicuro di quello che mi hai detto?
    Scusa se mi permetto di mettere in dubbio, ma se non faccio il foreach non mi fa salvare ed il report degli errori di mysql mi indica il punto in cui è presente un carattere speciale, ad esempio un'apostrofo.
    Non faccio il real_escape del titolo perchè non è un campo soggetto all'editor html, la descrizione per ora non mi interessa e non vine neanche riempita.

    Per quanto riguarda il load invece facio il str_replace per togliere ciò che il foreach mette.
    Mi pare di capire che dovrei usare il foreach o il real_escape, ma questo da solo sembra che non funzioni.

    Grazie per i consigli preziosi.
    Dindya

  10. #10
    Originariamente inviato da andrea-dindya
    Ma sei sicuro di quello che mi hai detto?
    Scusa se mi permetto di mettere in dubbio, ma se non faccio il foreach non mi fa salvare ed il report degli errori di mysql mi indica il punto in cui è presente un carattere speciale, ad esempio un'apostrofo.
    Non faccio il real_escape del titolo perchè non è un campo soggetto all'editor html, la descrizione per ora non mi interessa e non vine neanche riempita.

    Per quanto riguarda il load invece facio il str_replace per togliere ciò che il foreach mette.
    Mi pare di capire che dovrei usare il foreach o il real_escape, ma questo da solo sembra che non funzioni.

    Grazie per i consigli preziosi.
    mysql real escape serve proprio per sostituire i caratteri speciali di fine stringa. Forse l'errore è dovuto ad una impostazione del php aggiuntivo che ti aggiunge un ulteriore escape.

    In questo caso non c'è bisogno ne di mysql real escape e del foreach, e neanche del replace al load.

    sono anni che non uso php e potrei sbagliarmi, ma se controlli in php.ini lo dovresti trovare.

    Se php non fa da solo l'escape devi in ogni caso "proteggere" tutti i campi che inserisci in una query per l'attacco che si chiama mysql injection:
    http://www.tizag.com/mysqlTutorial/m...-injection.php
    ...

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.