我最近创建了一个名为feed.php的php文件,它用于从MySQL数据库中获取项目并在网页上显示它们(以新闻源样式的方式)。我完成它的方式涉及使用19 if / elseif / else语句 - 这个数字正在增长。
简而言之,这些陈述的作用决定了信息的显示方式。我将包含下面的代码,但它很长且重复。
<?
$con = mysqli_connect("localhost","username","password","database");
if (!$con)
{
die('Could not connect: ' . mysqli_connect_error());
}
$query = "SELECT * FROM mainfeed ORDER BY timestamp DESC LIMIT 0 , 1000";
$comments = mysqli_query($con, $query);
echo "<h1>Recent Posts</h1><br><br><hr>";
while($row = mysqli_fetch_array($comments, MYSQLI_ASSOC))
{
$comment = $row['comment'];
$timestamp = $row['timestamp'];
$file = $row['file'];
$info = pathinfo($file);
$info['extension'];
$comment = htmlspecialchars($row['comment'],ENT_QUOTES);
$ytlink = $row['ytlink'];
$tag = $row['tag'];
$tag2 = $row['tag2'];
$tag3 = $row['tag3'];
$handle = $row['handle'];
$score = $row['score'];
$id = $row['id'];
$ytarray=explode("/", $ytlink);
$ytendstring=end($ytarray);
$ytendarray=explode("?v=", $ytendstring);
$ytendstring=end($ytendarray);
$ytendarray=explode("&", $ytendstring);
$ytcode=$ytendarray[0];
$display = Array('jpg', 'jpeg', 'png', 'PNG', 'gif');
$vid = Array('MOV', 'mov', 'mp4');
if($tag != ''){
$tagdisp = "<br><a href='/$tag' class='posttag'>$tag</a>";
}
elseif($tag==''){
$tagdisp="";
}
if($tag2 != ''){
$tagdisp2 = "<a href='/$tag2' class='posttag'>$tag2</a>";
}
elseif($tag2==''){
$tagdisp2="";
}
if($tag3 != ''){
$tagdisp3 = "<a href='/$tag3' class='posttag'>$tag3</a>";
}
elseif($tag3==''){
$tagdisp3="";
}
if($tag != 'explicit' && $tag2 != 'explicit' && $tag3 != 'explicit'){
if ($file != NULL) {
if (in_array($info['extension'], $display)){
echo " <div class='card'>
<h3>Handle: $handle</h3><br />
<p>$comment</p><br /><br />
<a href='$file'><img src='$file' style='width:70%; margin-left:15%; margin-right:15%; margin-top:5px; border-style:none;'></a><br>
<p>Post #$id</p>
<p id='scorecount-$id'>Score: $score</p><br>
<button onclick='myfunction($id,1)'>⇧</button><button onclick='myfunction($id,-1)'>⇩</button><br>
<br>$tagdisp $tagdisp2 $tagdisp3<br>
<p style='color: grey'>$timestamp</p><hr>
</div>
";
}
elseif(in_array($info['extension'], $vid)) {
echo " <div class='card'>
<h3>Handle: $handle</h3><br />
<p>$comment</p><br /><br />
<video controls='controls' width='70%' src='$file' style='border-style: solid'></video><br>
<p>Post #$id</p>
<p id='scorecount-$id'>Score: $score</p><br>
<button onclick='myfunction($id,1)'>⇧</button><button onclick='myfunction($id,-1)'>⇩</button><br>
<br>$tagdisp $tagdisp2 $tagdisp3<br>
<p style='color: grey'>$timestamp</p><hr>
</div>
";
}
else {
echo " <div class='card'>
<h3>Handle: $handle</h3><br />
<p>$comment</p><br /><br />
<a href='$file'><h3>Click Here To View Attached File</h3></a><br>
<p>Post #$id</p>
<p id='scorecount-$id'>Score: $score</p><br>
<button onclick='myfunction($id,1)'>⇧</button><button onclick='myfunction($id,-1)'>⇩</button><br>
<br>$tagdisp $tagdisp2 $tagdisp3<br>
<p style='color: grey'>$timestamp</p><hr>
</div>
";
}
}
elseif($ytlink != NULL) {
echo " <div class='card'>
<h3>Handle: $handle</h3><br />
<p>$comment</p><br /><br />
<iframe width=\"420\" height=\"315\" src=\"http://www.youtube.com/embed/$ytcode\" frameborder=\"0\" allowfullscreen></iframe><br />
<p>Post #$id</p>
<p id='scorecount-$id'>Score: $score</p><br>
<button onclick='myfunction($id,1)'>⇧</button><button onclick='myfunction($id,-1)'>⇩</button><br>
<br>$tagdisp $tagdisp2 $tagdisp3<br>
<p style='color: grey'>$timestamp</p><hr>
</div>
";
}
else {
echo " <div class='card'>
<h3>Handle: $handle</h3><br />
<p>$comment</p><br />
<p>Post #$id</p>
<p id='scorecount-$id'>Score: $score</p><br>
<button onclick='myfunction($id,1)'>⇧</button><button onclick='myfunction($id,-1)'>⇩</button><br>
<br>$tagdisp $tagdisp2 $tagdisp3<br>
<p style='color: grey'>$timestamp</p><hr>
</div>
";
}
}
if($tag == 'explicit' OR $tag2 == 'explicit' OR $tag3 == 'explicit'){
if ($file != NULL) {
if (in_array($info['extension'], $display)){
echo " <div class='cardexp'>
<h3>Handle: $handle</h3><br />
<p>$comment</p><br /><br />
<img src='$file' style='width:70%; margin-left:15%; margin-right:15%; margin-top:5px; border-style:solid;'><br>
<p>Post #$id</p>
<p id='scorecount-$id'>Score: $score</p><br>
<button onclick='myfunction($id,1)'>⇧</button><button onclick='myfunction($id,-1)'>⇩</button><br>
<br>$tagdisp $tagdisp2 $tagdisp3<br>
<p style='color: grey'>$timestamp</p><hr>
</div>
";
}
elseif(in_array($info['extension'], $vid)) {
echo " <div class='cardexp'>
<h3>Handle: $handle</h3><br />
<p>$comment</p><br /><br />
<video controls='controls' width='70%' src='$file' style='border-style: solid'></video><br>
<p>Post #$id</p>
<p id='scorecount-$id'>Score: $score</p><br>
<button onclick='myfunction($id,1)'>⇧</button><button onclick='myfunction($id,-1)'>⇩</button><br>
<br>$tagdisp $tagdisp2 $tagdisp3<br>
<p style='color: grey'>$timestamp</p><hr>
</div>
";
}
else {
echo " <div class='cardexp'>
<h3>Handle: $handle</h3><br />
<p>$comment</p><br /><br />
<a href='$file'><h3>Click Here To View Attached File</h3></a><br>
<p>Post #$id</p>
<p id='scorecount-$id'>Score: $score</p><br>
<button onclick='myfunction($id,1)'>⇧</button><button onclick='myfunction($id,-1)'>⇩</button><br>
<br>$tagdisp $tagdisp2 $tagdisp3<br>
<p style='color: grey'>$timestamp</p><hr>
</div>
";
}
}
elseif($ytlink != NULL) {
echo " <div class='cardexp'>
<h3>Handle: $handle</h3><br />
<p>$comment</p><br /><br />
<iframe width=\"420\" height=\"315\" src=\"http://www.youtube.com/embed/$ytcode\" frameborder=\"0\" allowfullscreen></iframe><br />
<p>Post #$id</p>
<p id='scorecount-$id'>Score: $score</p><br>
<button onclick='myfunction($id,1)'>⇧</button><button onclick='myfunction($id,-1)'>⇩</button><br>
<br>$tagdisp $tagdisp2 $tagdisp3<br>
<p style='color: grey'>$timestamp</p><hr>
</div>
";
}
else {
echo " <div class='cardexp'>
<h3>Handle: $handle</h3><br />
<p>$comment</p><br />
<p>Post #$id</p>
<p id='scorecount-$id'>Score: $score</p><br>
<button onclick='myfunction($id,1)'>⇧</button><button onclick='myfunction($id,-1)'>⇩</button><br>
<br>$tagdisp $tagdisp2 $tagdisp3<br>
<p style='color: grey'>$timestamp</p><hr>
</div>
";
}
}
}
mysqli_close($con);
?>
我觉得我用来创建这个Feed的方法(以及我告诉浏览器显示不同媒体类型的方式,可能不是我可以做到的最佳方式。
如果我要重写这个文件,那么实现相同结果的最佳(最有效和最有效)方法是什么?
非常感谢。
答案 0 :(得分:1)
function getCardTemplate($comment, $id, $score, $tagdisp, $tagdisp2, $tagdisp3, $timestamp, $innerTemplate) {
return " <div class='card'>
<h3>Handle: $handle</h3><br />
<p>$comment</p><br /><br />".$innerTemplate.
"<p>Post #$id</p>
<p id='scorecount-$id'>Score: $score</p><br>
<button onclick='myfunction($id,1)'>⇧</button><button onclick='myfunction($id,-1)'>⇩</button><br>
<br>$tagdisp $tagdisp2 $tagdisp3<br>
<p style='color: grey'>$timestamp</p><hr>
</div>
";
}
然后传递所需的文字为$innerTemplate
。您仍然会遇到很多情况,但它的重复性会更低,更易读,也更容易维护。