• User

    Editor wysiwyg in cms php privato

    Salve ragazzi, sto creando da zero un cms in php e mysql, tutto funziona correttamente a parte la formattazione del testo degli articoli creati con un editor wysiwyg.
    Di seguito vi lascio due immagini, la prima riferita al codice dell'articolo creato e l'altra riferita al codice presente nel database dopo aver salvato l'articolo.

    Codice articolo:
    robertopaolucci.it/test-php/codice-articolo.png

    Codice database:

    robertopaolucci.it/test-php/codice-database.png

    da cosa può dipendere? Grazie anticipato,
    Roberto


  • User

    Ciao!!
    Il problema è molto probabilmente nella configurazione dell'editor di testo, che converte automaticamente i simboli in entità html. Si tratta di una funzione che teoricamente serve a garantire la creazione di codice valido, ma che personalmente trovo molto seccante (ad esempio perchè impedisce l'inserimento di embedded videos tramite iframe tag).
    Nel file di inizializzazione dell'editor devi disabilitare tale funzione. Ovviamente la sintassi della riga da aggiungere varierà a seconda dell'editor in questione (e dovrai fare riferimento alla documentazione ufficiale).
    P.s.
    Se in una pagina php stampi con echo il contenuto dell'articolo del database, probabilmente vedi anche i vari tag (<p>,<ol> etc.) stampati come se fossero parte integrante del testo e non codice html. Corretto?


  • User

    Grazie per la risposta, il problema è che a che senza editor, ma inserendo codice html direttamente nell'articolo mi da questo problema. Nella pagina php che mostra gli articoli ho uno "strip tags di php", ma anche inserendo i tag consenti non me li visualizza ugualmente, ed eliminando la funzione strip tag, il problema rimane.
    Se sei d'accordo ti faccio avere il cms, per vedere meglio ed individuare il problema.
    Consigli?


  • User

    Dunque: non voglio farti prendere una direzione sbagliata, ma secondo me devi prima risolvere il problema dell'inserimento dei dati nel database e solo dopo concentrarti sulla pagina che li richiama (in questo modo capisci a quale livello è il problema).
    Esempio pratico:
    (chiamerò form.php la pagina in cui è presente la textarea e script.php la pagina in cui è presente la query mysql che inserisce i dati nel database)
    Nella pagina form.php togli l'editor e tutto quello che non è strettamente necessario, in modo da ottenere un form "pulito" senza errori.
    Nella pagina script.php scrivi una semplicissima query mysql (o mysqli) per inserire i dati nel database SENZA manipolarli (proprio solo $_POST[textarea_name]) (della protezione da sql injection te ne puoi occupare dopo)
    Ora fai una prova compilando la textarea con un testo corto tipo "<p>Testo di esempio</p>". A questo punto accedi a phpmyadmin e verifica che la stringa sia IDENTICA (simboli maggiore/minore compresi) e che non compaiano entità html.

    In realtà ci vogliono 10 minuti al massimo... ma almeno scopri il responsabile del malfunzionamento.
    Parti da un sistema semplice e poi pian piano aggiungi a gruppi le funzioni che ti interessano; ogni volta controlla che il sistema funzioni così trovi sicuramente il colpevole.

    P.s.
    Sicuramente già lo sai, ma non è necessario eliminare fisicamente dalle pagine il codice che non vuoi venga eseguito.. basta solo commentarlo così <?php /* ... codice che non verrà eseguito... */ ?>


  • User

    Grazie per la risposta, ho fatto le prove ma non sono riuscito a giungere ad una conclusione. Ho provato a inserire direttamente nel database del testo in html e..miracolosamente il testo nel front è formattato.quindi la pagina che mostra gli articoli funziona correttamente e credo che il problema sia nella pagina che inserisce gli articoli nel db.Vi lascio lascio il codice della pagina mostra gli articoli e della pagina di modifica articoli che inserisce il testo nel db.
    ci potrebbero essere altre pagine php responsabili del mio problema?Grazie ragazzi :ciauz:


  • User

    Ho sbagliato ad inserire la risposta.
    Grazie per la risposta, ho fatto le prove ma non sono riuscito a giungere ad una conclusione. Ho provato a inserire direttamente nel database del testo in html e..miracolosamente il testo nel front è formattato.quindi la pagina che mostra gli articoli funziona correttamente e credo che il problema sia nella pagina che inserisce gli articoli nel db.Vi lascio lascio il codice della pagina mostra gli articoli e della pagina di modifica articoli che inserisce il testo nel db.

    articledisplay:

    [PHP]<?php/** * articledisplay.php * * Display the Article * * @version 1.2 2011-02-03 * @package Smithside Auctions * @copyright Copyright (c) 2011 Smithside Auctions * @license GNU General Public License * @since Since Release 1.0 */
    $id = (int) $_GET['id'];// Get the existing information for an existing item$item = Article::getArticle($id);if ($item) :?><h1><?php echo htmlspecialchars($item->getTitle()); ?></h1>

    <?php echo($item->getText()); ?>
    <?php endif;?>[/PHP]

    articlemaint:

    [PHP]
    $accessLevel = Contact::accessLevel();if ($accessLevel != 'Admin') : echo 'Sorry, no access allowed to this page';else :
    $id = (int) $_GET['id'];// Is this an existing item or a new one?if ($id) { // Get the existing information for an existing item $item = Article::getArticle($id);} else { // Set up for a new item $item = new Article;}?>

    <form action="index.php?content=articles" method="post" name="maint" id="maint">
    <fieldset class="maintform"> <legend><?php echo ($id) ? 'ID: '. $id : 'Add an Article' ?></legend> <ul> <li><label for="title" class="required">Title</label><br /> <input type="text" name="title" id="title" class="required" value="<?php echo htmlspecialchars($item->getTitle()); ?>" /></li> <li><label for="text" class="required">Text</label><br /> <textarea rows="30" cols="80" name="text" id="text" class="required"> <?php echo($item->getText()); ?> </textarea></li> </ul>

    // create token    $salt = 'SomeSalt';    $token = sha1(mt_rand(1,1000000) . $salt);     $_SESSION['token'] = $token;    ?>    <input type="hidden" name="id" id="id" value="<?php echo $item->getId(); ?>" />    <input type="hidden" name="task" id="task" value="article.maint" />    <input type='hidden' name='token' value='<?php echo $token; ?>'/>    <input type="submit" name="save" value="Save" />    <a class="cancel" href="index.php?content=articles">Cancel</a>  </fieldset></form><?php endif; ?>
    

    [/PHP]

    ci potrebbero essere altre pagine php responsabili del mio problema?Grazie ragazzi :ciauz: