• User

    php e tinymce problema di salvataggio dati

    Buongiorno a tutti ragazzi e un grazie anticipato a chi saprà aiutarmi.
    Premetto che nonostante parecchio tempo che programmo in php mi ritengo ancora un neofita.

    Il mio problema è il seguente: quando salvo un testo su db editato con tinymce il 90% delle volte la query non funziona. Ora cerco di spiegarmi meglio.
    Questo è il file editor.php che mostra l'editor:
    [php]
    <?php
    session_start();
    if (isset($_SESSION['id_user'])) {
    $user = $_SESSION['id_user'];
    }

    ?>

    <head>
    <title>Editor</title>

    <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
    <link rel="stylesheet" href="css/editor.css" type="text/css" />
    

    <script type="text/javascript" src="tinymce/jscripts/tiny_mce.js"></script>
    <script type="text/javascript">
    tinyMCE.init({
    //General options
    mode : "textareas",
    theme : "advanced",
    plugins : "safari,spellchecker,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template,imagemanager,filemanager",
    // Theme options
    theme_advanced_buttons1 : "save,newdocument,|,bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,styleselect,formatselect,fontselect,fontsizeselect",
    theme_advanced_buttons2 : "cut,copy,paste,pastetext,pasteword,|,search,replace,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code,|,insertdate,inserttime,preview,|,forecolor,backcolor",
    theme_advanced_buttons3 : "tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,emotions,iespell,media,advhr,|,print,|,ltr,rtl,|,fullscreen",
    theme_advanced_buttons4 : "insertlayer,moveforward,movebackward,absolute,|,styleprops,spellchecker,|,cite,abbr,acronym,del,ins,attribs,|,visualchars,nonbreaking,template,blockquote,pagebreak,|,insertfile,insertimage",
    theme_advanced_toolbar_location : "top",
    theme_advanced_toolbar_align : "left",
    theme_advanced_statusbar_location : "bottom",
    theme_advanced_resizing : false,
    // Example content CSS (should be your site CSS)
    content_css : "css/example.css",
    // Drop lists for link/image/media/template dialogs
    template_external_list_url : "js/template_list.js",
    external_link_list_url : "js/link_list.js",
    external_image_list_url : "js/image_list.js",
    media_external_list_url : "js/media_list.js",
    // Replace values for the template plugin
    template_replace_values : {
    username : "Some User",
    staffid : "991234"
    }
    });
    </script>
    </head>
    <body>
    <div id="wrapper" style="background-image: url(imagesEditor/sfondo.jpg);">
    <?php
    echo "<input type="button" value="Logout" onclick="location.href='logout.php'">";
    ?>
    <div id="header">
    <?php
    if (isset($user)) {
    if($user == 1) {
    echo "<form method="post" action="save.php"><p><textarea name="content" cols="90" rows="20">";
    include ('../articolo.php');
    echo "</textarea></p></form>";
    }
    } else {
    echo "<b>Il Login non è stato correttamente effettuato,<br /> ripetere l'operazione</b><br /><br />";
    echo "<input type="button" value="Login" onclick="location.href='login.htm'">";
    }
    ?>
    </div>
    </div>
    </body>
    </html>
    [/php]L'articolo arriva all'editor tramite l'[php]include ('../articolo.php');[/php] ed è un testo con formattazione html e alcune volte dei link a funzioni javascript. L'action del form come avrete visto è save.php che riporto qui sotto.
    [php]
    <?php
    session_start();
    require_once("../includes/db_conn.php");

    if (isset($_SESSION['articolo'])) {
    $indice = $_SESSION['articolo'];
    }

    $contenuto = $_POST['content'];

    if ($indice == '0') {
    echo "Erorre durante l'inserimento: l'indice è nullo!";
    } else {
    $strSQL = "UPDATE testi SET strArticolo = '";
    $strSQL .= $contenuto;
    $strSQL .= "' WHERE intTestoID = '";
    $strSQL .= $indice;
    $strSQL .= "'";
    mysql_query($strSQL);
    if (mysql_query($strSQL)){
    $_SESSION['articolo'] = '0';
    echo $strSQL;
    header("location: pagina.php");
    }else{
    echo "<br />Erorre durante l'inserimento chiudere il programma e riprovare <br />";
    echo $strSQL;
    }
    }
    ?>
    [/php]Gli errori che si manifestano sono i seguenti:

    • Nella pagina dell'editor i caratteri speciali vengono sostituiti con � e se si salva in questa condizione il risultato è uno scempio, quindi bisogna pazientemente correggere tutto.
    • Al momento del salvataggio la query non funziona (Questo chiaramente perchè tra i caratteri speciali c'è l'apice.)

    Il mio problema è che sostituisco tutti gli apici (o le ") con il codice relativo (" o simile) mi rimpiazza anche quello che non dovrebbe quindi la chiamata ad eventuali funzioni javascript viene "annullata".
    Ora quello che vi chiedo è:

    • posso fare in modo (vedi punto 1) di visualizzare l'articolo senza i problemi riportati sopra?
    • posso convertire solo i caratteri speciali del testo senza intervenire su quelli all'inteno dei tag html?

    Sono sicuro che molti di voi riterranno questo mio problema facilmente sormontabile ma per me sta diventando un incubo!:x
    Sono settimane che ci smanetto sopra provando tutto quello che mi è venuto in mente e anche tutto quello che sono riuscito a trovare sulla rete, ma non riesco a venirne a capo:bho:.... Please HELP ME!!:(:perfavore:


  • User

    Ciao non ho mai incluso un editor wyswyg però forse potresti risolvere usando la funzione htmlentities

    htmlentities("$_POST['content'])


  • User Attivo

    @Dragon said:

    [...]Il mio problema è che sostituisco tutti gli apici (o le ") con il codice relativo (" o simile) mi rimpiazza anche quello che non dovrebbe quindi la chiamata ad eventuali funzioni javascript viene "annullata".[...]

    Ciao Dragon,
    ti consiglio di usare la funzione
    [php]$content=mysql_real_escape_string($_POST['content']);[/php]quando prendi in input il tuo articolo.

    In questo modo ai caratteri "problematici" (\x00, \n, \r, *, ', ",\x1a) viene fatto l'escape aggiungendo un backslash e php non li vedrà più come caratteri speciali.

    Facci sapere,
    Luca
    *