Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [ZendFramework] Dane z mysql, (ominięcie htmlspecialchars)
in5ane
post
Post #1





Grupa: Zarejestrowani
Postów: 1 335
Pomógł: 34
Dołączył: 9.11.2005
Skąd: Wrocław

Ostrzeżenie: (10%)
X----


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.

Ten post edytował in5ane 24.06.2009, 19:49:37


--------------------
> > > Tworzenie stron < < <
Go to the top of the page
+Quote Post
batman
post
Post #2





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




Pokaż kod, którym zapisujesz i którym odczytujesz dane. Jeśli używasz Zend_Form, to dołącz też kod formularza.


--------------------
I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features.
Go to the top of the page
+Quote Post
phpion
post
Post #3





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Taka mała uwaga: nl2br powinieneś stosować dopiero w momencie wyświetlania tesktu na stronie, a nie podczas zapisywania go do bazy danych.
Go to the top of the page
+Quote Post
in5ane
post
Post #4





Grupa: Zarejestrowani
Postów: 1 335
Pomógł: 34
Dołączył: 9.11.2005
Skąd: Wrocław

Ostrzeżenie: (10%)
X----


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.

Ten post edytował in5ane 24.06.2009, 19:47:59


--------------------
> > > Tworzenie stron < < <
Go to the top of the page
+Quote Post
nospor
post
Post #5





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
batman
post
Post #6





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




Używasz helpera escape, który uniemożliwia wykonanie kodu html. Helper ten po prostu go wyświetla. I dlatego masz problem.


--------------------
I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features.
Go to the top of the page
+Quote Post
in5ane
post
Post #7





Grupa: Zarejestrowani
Postów: 1 335
Pomógł: 34
Dołączył: 9.11.2005
Skąd: Wrocław

Ostrzeżenie: (10%)
X----


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.

Ten post edytował in5ane 24.06.2009, 19:56:35


--------------------
> > > Tworzenie stron < < <
Go to the top of the page
+Quote Post
batman
post
Post #8





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




Tak samo jak przy zapisywaniu.
  1. <?php
  2. echo nl2br($zmienna_wyciagnieta_z_bazy);
  3. ?>


--------------------
I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features.
Go to the top of the page
+Quote Post
in5ane
post
Post #9





Grupa: Zarejestrowani
Postów: 1 335
Pomógł: 34
Dołączył: 9.11.2005
Skąd: Wrocław

Ostrzeżenie: (10%)
X----


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.

Ten post edytował in5ane 24.06.2009, 20:01:36


--------------------
> > > Tworzenie stron < < <
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 15:17