Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZendFramework] Dane z mysql
Forum PHP.pl > Forum > PHP > Frameworki
in5ane
Cześć, mam mały problem. Otóż wysyłam sobie dane z formularza do mysql (dane przechodzą poprzez nl2br, aby entery zamieniło na <br />) i jak pobieram dane z mysql, to zamiast mi wyświetlać te entery, to mi wyświetla na stronie tagi <br />, na 100% sam nie umieszczałem w kodzie htmlspecialchars, a więc musi być coś innego lub standardowo przy przesyłaniu (lub odbieraniu danych). Proszę o pomoc.
batman
Pokaż kod, którym zapisujesz i którym odczytujesz dane. Jeśli używasz Zend_Form, to dołącz też kod formularza.
phpion
Taka mała uwaga: nl2br powinieneś stosować dopiero w momencie wyświetlania tesktu na stronie, a nie podczas zapisywania go do bazy danych.
in5ane
Funkcja służąca za dodawanie do bazy:
  1. <?php
  2. function addAction() {
  3.        $this->view->title = "Dodaj ogłoszenie";
  4.        
  5.        if ($this->_request->isPost()) {
  6.            $filter = new Zend_Filter_StripTags();
  7.            $title = trim($filter->filter($this->_request->getPost('title')));
  8.            $content = nl2br($this->_request->getPost('content'));
  9.            $telephone = trim($filter->filter($this->_request->getPost('telephone')));
  10.  
  11.            if ($title != '' && $content != '') {
  12.                $date = time();
  13.                $data = array('title' => $title, 'content' => $content, 'telephone' => $telephone, 'date' => $date, );
  14.                $announcements = new announcements();
  15.                $announcements->insert($data);
  16.                $this->_redirect('/index/announcements');
  17.                return;
  18.            }
  19.        }
  20.        
  21.        $this->view->announcements = new stdClass();
  22.        $this->view->announcements->id = null;
  23.        $this->view->announcements->title = '';
  24.        $this->view->announcements->content = '';
  25.        $this->view->announcements->telephone = '';
  26.        $this->view->announcements->time = '';
  27.  
  28.        $this->view->action = 'add';
  29.        $this->view->buttonText = 'Dodaj';
  30.    }
  31. ?>


Formularz dodający:
  1.    <form action="<?php echo $this->baseUrl; ?>/index/<?php echo $this->action; ?>" method="post">
  2.        <input type="hidden" name="id" value="<?php echo $this->album->id; ?>" />
  3.        <strong>Tytuł:</strong><br /><input type="text" name="title" /><br /><br />
  4.        <strong>Opis:</strong><br /><textarea name="content"></textarea><br /><br />
  5.        <strong>Telefon:</strong><br /><input type="text" name="telephone" /><br /><br />
  6.        <input type="submit" name="add" value="<?php echo $this->escape($this->buttonText); ?>" />
  7.    </form>


Funkcja służąca za odczytywanie:
  1. <?php
  2.    function showAction() {
  3.        $this->view->title = "Ogłoszenia";
  4.        
  5.        $id = (int)$this->_request->get('id');
  6.        $announcements = new announcements();
  7.        $where = 'id ='. $id;
  8.        $select = $announcements->select()->where($where);
  9.        $this->view->row_show = $announcements->fetchRow($select);
  10.    }
  11. ?>


Widok - odczytywanie:
  1. <strong>Tytuł:</strong> <?php echo $this->escape($this->row_show->title); ?><br /><br />
  2.    <strong>Data dodania:</strong> <?php $date = $this->escape($this->row_show->date); echo date('d.m.Y, H:i', $date); ?><br /><br />
  3.    <strong>Telefon:</strong> <?php echo $this->escape($this->row_show->telephone); ?><br /><br />
  4.    <strong>Opis:</strong> <?php echo $this->escape($this->row_show->content); ?>


Chciałbym jeszcze zabezpieczyć w tej pierwszej funkcji zmienną content tym flitrem, ale tak, żeby mi tego <br /> nie usunęło.

Z góry dzięki za pomoc.
nospor
wkladasz do bazy z nl2br a potem po pobraniu z bazy jeszcze to escapujesz. to chyba wiec logiczne, ze <br /> zostaną wyescepowane i poleci tekst <br /> a nie html <br />

poza tym jak juz napisano:
Cytat
Taka mała uwaga: nl2br powinieneś stosować dopiero w momencie wyświetlania tesktu na stronie, a nie podczas zapisywania go do bazy danych.
batman
Używasz helpera escape, który uniemożliwia wykonanie kodu html. Helper ten po prostu go wyświetla. I dlatego masz problem.
in5ane
Cytat(nospor @ 24.06.2009, 18:51:13 ) *
wkladasz do bazy z nl2br a potem po pobraniu z bazy jeszcze to escapujesz. to chyba wiec logiczne, ze <br /> zostaną wyescepowane i poleci tekst <br /> a nie html <br />

poza tym jak juz napisano:


Nie wiedziałem w sumie co to escape robi, nie doczytałem, używałem, bo było w tutorialu.
batman
Tak samo jak przy zapisywaniu.
  1. <?php
  2. echo nl2br($zmienna_wyciagnieta_z_bazy);
  3. ?>
in5ane
A teraz mam pytanie, jak mogę zrobić tak:
  1. <?php
  2. $content = trim($filter->filter($this->_request->getPost('content')));
  3. ?>

ale, żeby działało <br />, no bo chodzi, mi o to, aby ludzie nie wpuścili mi zbędnego kodu html do bazy.


@edit: dzięki batman, już działa.
@edit2: tobie nospor też wielkie dzięki.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.