从db表生成消息

时间:2011-09-24 22:46:41

标签: php mysql

我正在尝试从db表生成新闻。

我的表看起来像那样

enter image description here

从db表生成新闻的功能

function generateNews ($lang, $db)
{
    $title = 'title_' . $lang;
    $short = 'short_' . $lang;
    $detailed = 'detailed_' . $lang;
    $result=$db->query("SELECT id, $title as title, $short as short, $detailed as detailed, ndate FROM news");

    while($row=$result->fetch_object()) {
        $title=makeEntry ('title', $row->title);
        $stitle=makeEntry ('stitle', $row->short);
        $content=makeEntry ('content',$row->detailed);
        $footer=makeEntry ('footer',$row->ndate);

        echo makeEntry ('entry',$title.$stitle.$content.$footer);
    }   
}   

function makeEntry ($part,$data)
{
    if($part=='title')
        return '<h3 class="entry-header">'.$data.'</h3>'."\n";
    else if ($part=='stitle')
        return '<h4 class="entry-stitle">'.$data.'</h4>'."\n";
    else if ($part=='content')
        return '<div class="entry-content"><p>'.$data.'</p></div>'."\n";
    else if ($part=='footer')
        return '<div class="entry-footer">'.$data.'</div>'."\n";
    else if ($part=='entry')
        return '<div class="entry">'.$data.'</div>'."\n";
}

它有效,但是这段代码非常简单,所以我觉得它可以缩短。有什么建议?

顺便说一句。不要发布关于sql注入漏洞的信息。我已将表列名称列入白名单

2 个答案:

答案 0 :(得分:2)

使用switch case控制结构可以摆脱这些elseif ($part == )语句。

答案 1 :(得分:2)

这是另一种可能的解决方案:

function makeEntry($part,$data)
{
    $results = array( 'title' => '<h3 class="entry-header">'.$data.'</h3>'."\n",
                      'stitle' => '<h4 class="entry-stitle">'.$data.'</h4>'."\n",
                      //etc etc....
                     );
    return $results[$part];
}