我有一些php和css代码,我试图分解成函数。我需要一些关于如何处理这个问题的建议。
<?php
$info = mysqli_query($dbc, "SELECT info_id, info_title FROM text") or die("Error: ".mysqli_error($dbc));
while ($info_row = mysqli_fetch_array($info))
{
$info_id = $info_row['info_id'];
$info_title = $info_row['info_title'];
?>
<div style="width: 100%;">
<div style="float: left;">
<?php echo $info_id; ?>
</div>
<div style="float: left;">
<?php echo $info_title; ?>
</div>
<div style="clear: both;"></div>
</div>
<?php } ?>
这样显示:
1个
2两个
3三
4四
以下是我将所有内容分离为函数的内容:
function get_info()
{
$dbc = get_dbc();
$info = mysqli_query($dbc, "SELECT info_id, info_title FROM text") or die("Error: ".mysqli_error($dbc));
while ($info_row = mysqli_fetch_array($info))
{
$result[] = $info_row;
}
mysqli_free_result($info);
return $result;
}
function display_info_id()
{
$result=forum();
foreach ($result as $info_row)
{
$info_id = $info_row['info_id'];
echo $info_id;
}
}
function display_info_title()
{
$result=forum();
foreach ($result as $info_row)
{
$info_title = $info_row['info_title'];
echo $info_title;
}
}
<?php get_info(); ?>
<div style="width: 100%;">
<div style="float: left;">
<?php display_info_id(); ?>
</div>
<div style="float: left;">
<?php display_info_title(); ?>
</div>
<div style="clear: both;"></div>
</div>
显示为: 1234 OneTwoThreeFour
我明白为什么它会这样显示,但我不明白如何让它显示我想要的方式。任何建议都会有所帮助。
编辑 -
这有可能与我拥有的3种功能有关吗?我不希望info_id和info_title在同一个函数中。
当我看到像WordPress这样的软件时,似乎我可能不得不在某种循环中包围我的HTML,并改变函数获取信息的方式?
答案 0 :(得分:3)
您正在为每个变量调用一个单独的循环。将它分成多个函数是不必要的,因为循环要求两个变量一起显示。
我该如何处理?我将SQL结果存储到一个完整的数组中,然后遍历该数组以输出您的HTML。如果您愿意,可以分为两个功能。如果您需要在页面上多次使用结果,这可能很有用。
我正在使用HEREDOC string syntax将PHP变量(包含在{}
中)与HTML块组合在一起。这样可以节省您通过<?php ?>
// This function is fine.
function get_info()
{
$dbc = get_dbc();
$info = mysqli_query($dbc, "SELECT info_id, info_title FROM text") or die("Error: ".mysqli_error($dbc));
while ($info_row = mysqli_fetch_array($info))
{
$result[] = $info_row;
}
mysqli_free_result($info);
return $result;
}
function display_result($result)
{
// Loop over your results and display each
foreach ($result as $r)
{
// Now use the HEREDOC syntax to form your HTML block instead
// of intermingling PHP function calls
echo <<<HTML
<div style="width: 100%;">
<div style="float: left;">
{$r['info_id']}
</div>
<div style="float: left;">
{$r['info_title']}
</div>
<div style="clear: both;"></div>
</div>
HTML;
// There must be no whitespace before or after the HTML; on the previous line!
}
}
现在检索您的数据并显示它:
<?php
$results = get_info();
display_result($results);
?>
答案 1 :(得分:1)
您需要将显示逻辑重构为一个循环,而不是两个单独的循环。
例如:
<?php get_info(); ?>
<div style="width: 100%;">
<div style="float: left;">
<?php display_info_id(); ?>
</div>
<div style="float: left;">
<?php
$result=forum();
foreach ($result as $info_row)
{
$info_id = $info_row['info_id'];
$info_title = $info_row['info_title'];
echo $info_id . " . $info_title . "<br/>\n";
}
?>
</div>
<div style="clear: both;"></div>
</div>