我正在尝试从db表生成新闻。
我的表看起来像那样
从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注入漏洞的信息。我已将表列名称列入白名单
答案 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];
}