TinMCE textarea: chyby pri vkladani do DB

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
muflix
Člen | 92
+
0
-

Dobrý den, snažím se rozchodit TinyMCE což se mi povedlo, ale mám problém při ukládání textarey do databáze (Nette2.0,Dibi,PHP5.3)

latte layout

...
<script type="text/javascript" src="{$basePath}/js/jquery.min.js"></script>
<script type="text/javascript" src="{$basePath}/js/tiny_mce/tiny_mce.js"></script>
...

latte šablona

...
<script type="text/javascript">
    tinyMCE.init({
        mode: "specific_textareas",
        editor_selector: "mceEditor",
        /*
        entity_encoding : "raw",
        entities : "160,nbsp,38,amp,34,quot,162,cent,8364,euro,163,pound,165,yen,169,copy,174,reg,8482,trade,8240,permil,60,62,8804,le,8805,ge,176,deg,8722,minus",
*/
        theme : "advanced",
        theme_advanced_buttons1 : "newdocument,|,bold,italic,underline,|,justifyleft,justifycenter,justifyright,fontselect,fontsizeselect,formatselect",
        theme_advanced_buttons2 : "cut,copy,paste,|,bullist,numlist,|,outdent,indent,|,undo,redo,|,link,unlink,anchor,image,|,code,preview,|,forecolor,backcolor",
        theme_advanced_buttons3 : "insertdate,inserttime,|,spellchecker,advhr,,removeformat,|,sub,sup,|,charmap,emotions",
        theme_advanced_toolbar_location : "top",
        theme_advanced_toolbar_align : "left",
        theme_advanced_statusbar_location : "bottom",
        theme_advanced_resizing : true

    });
</script>
...

v Modelu Novinky.php

public function vlozNovinku($arr)
        {
            $this->db->query('INSERT INTO [novinky]', $arr);
        }

Presenter

protected function createComponentVlozNovinkuForm()
        {
            $form = new Nette\Application\UI\Form;
            $form->addProtection('CSFR ochrana: Vypršel časový limit, odešlete formulář znovu');
            $form->addText('perex', 'Perex:');
            $form->addTextArea('text', 'Text:')->getControlPrototype()->class('mceEditor');;
            $form->addSubmit('vlozit', 'vložit');
            $form->getElementPrototype()->onsubmit('tinyMCE.triggerSave()'); //kvuli TinyMce
            $form->onSuccess[] = callback($this, 'VlozNovinkuFormSubmitted');
            return $form;
        }

TinyMce se mi normálně načte, ale po vložení diakritiky, obarvení text apod (html) mi Dibi vyhodí chybu
exception ‚DibiDriverException‘ with message 'Incorrect string value: …

při vkládání SQL

SQL: INSERT INTO `novinky` (`perex`, `text`, `id_uzivatele`) VALUES ('zxc', '<p>sda a <span style=\"color: #ff9900;\">&scaron;čě &scaron;č&nbsp;&nbsp; &scaron;č as</span></p>\r\n<p>df</p>', 1)

řekl bych, že v tom SQL dotazu, dělá problém \r\n takže sem upravil továrničku

$this->novinky->vlozNovinku(array(
                    'perex' => $form->values->perex,
                    'text' => str_replace("\r\n", "<br />", $form->values->text),
                    'id_uzivatele' => $this->getUser()->getId()
                ));

a přidal sem funkci str_replace a to pomohlo, ale jen částečně, protože mi to zase hází chybu při složitějších textech.. např

43

INSERT INTO `novinky` (`perex`, `text`, `id_uzivatele`)
VALUES ('SD65F4', '<p>ŠČŠI ĚŠÍÉÁ ÍÉĚŠ ĚŠÉI Ě<span style=\"color: #0000ff;\">Í
ĚŠÍ</span>ÁRĚŠÉ</p><br /><p>SALŮKD <span style=\"color: #0000ff;\">ASDJ ÁĚŠČ
ĚÁÍÍÁĚČ</span> ÉŠÁ Ȩ́AS</p><br /><p>ASK DJAS ÍŠÍĚ<span style=\"color:
#0000ff;\">Š ÝÁŠŽ ÁĚŽ ÍĚ</span></p>', 1)
Incorrect string value: '\xC4\x8D\xC4\x9B \xC5...' for column 'text' at row 1

prosím kde sem zase co popletl a jak to mohu spravit ? :-)

muflix
Člen | 92
+
0
-

chyba byla v tom, že tabulka byla sice v utf ale její sloupečky v latin, už to funguje.