简体   繁体   English

从db表生成消息

[英]Generating news from db table

I'm trying to generate news from db table. 我正在尝试从db表生成新闻。

My table look like that 我的桌子看起来像那样

在此输入图像描述

And the function that generated news from db table 以及从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";
}

It works, but this code is very simple so I feel like it could be shortened. 它的工作原理,但这段代码非常简单,所以我觉得它可以缩短。 Any suggestions? 有什么建议?

BTW. BTW。 Don't post about sql injection holes. 不要发布关于sql注入漏洞的信息。 I already whitelisted table column names 我已将列列名列入白名单

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

Here's another possible solution: 这是另一种可能的解决方案:

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];
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM