Создание корректного динамического RSS-канала с использованием PHP, который передает переменные через GET - PullRequest
0 голосов
/ 20 мая 2011

Можно ли создать действительный динамический RSS-канал, который передает переменную, содержащую значения, которые будут использоваться для построения запроса MySQL и возвращать результат в виде канала?

Этот код будет генерировать канал:

<?php
$dbh = new PDO('mysql:host=127.0.0.1;dbname=local', 'local', 'local');

$sql = 'SELECT * FROM table_name';

$open = <<<XMLHEAD
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="../_src/css/rss.css" ?>
<rss version="2.0">
<channel>
    <title>Test</title>
    <description>Test</description>
    <lastBuildDate>2011-05-20</lastBuildDate>
    <pubDate>2011-05-20</pubDate>
XMLHEAD;

echo $open;

// item
foreach ($dbh->query($sql) as $row) 
{
    echo $row['col1'] . ' ' . $row['col2'];
}

$dbh->exec();
$dbh = null;

$close = <<<XMLFOOT
    </channel>
</rss>
XMLFOOT;

echo $close;

header("Content-Type: application/rss+xml; charset=UTF-8");

?>

Мне просто нужно передать что-то вроде http://localhost/feed.php?date=20110520

, чтобы я мог построить это:

$d = $_POST['date'];

// Validate/clean here then set value
$date = $d;


$sql = 'SELECT * FROM table_name' where date=' . ''' . $date . ''';

Спасибо!

Ответы [ 2 ]

0 голосов
/ 20 мая 2011

Вы можете использовать Zend_Filter_Input для предотвращения инъекций sql

enter code here
          $filters = array(
        'page'  => array('HtmlEntities', 'StripTags', 'StringTrim'),
        'name'  => array('HtmlEntities', 'StripTags', 'StringTrim'),
        'val'   => array('HtmlEntities', 'StripTags', 'StringTrim'),
        'do'    => array('HtmlEntities', 'StripTags', 'StringTrim'),
        'obj'   => array('HtmlEntities', 'StripTags', 'StringTrim')
        );
    $validators = array(
        'page'      => array('Int'),
            'name'      => array(), 
            'val'   => array(), 
            'do'        => array(), 
            'obj'       => array()  
    );
    /* array('InArray', array('add', 'clear')), */

        $input = new Zend_Filter_Input($filters, $validators);
        $input->setData($this->getRequest()->getParams());`

Вы также можете использовать Zend_Feed для генерации канала из массива

    foreach ($result as $r) {
        $output['entries'][] = array(
                'title' => $r['name'],
                'link'  => $this->apiBaseUrl.$r['name'].".mp3", 
                'description' => $answers,
                'lastUpdated' => ''
                );
        }  $feed = Zend_Feed::importArray($output, 'atom'); $feed->send();
0 голосов
/ 20 мая 2011

Да. RSS это просто формат данных, как и любой другой.

Однако ваш псевдокод уязвим для внедрения SQL, и вы должны создавать файлы XML, используя библиотеку XML, а не смешивать строки вместе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...