【问题标题】:only print a variable once page is loaded仅在加载页面后打印变量
【发布时间】:2012-06-05 16:26:15
【问题描述】:

我正在寻找一种使用 php 和 javascript 的简单方法,在页面顶部打印一个 php 变量,并且只有在页面加载并运行 while 循环后。

基本上,我有一个 while 循环遍历我的数据库,并在表格中打印出包含用户详细信息的一行。 每次找到用户时,它都会给页面开头声明的变量加 1。

这是我计算搜索后找到多少用户的基本方法。

然后我打印出变量通知我。 唯一的问题是,我只能在循环结束后打印变量,这意味着它必须位于我的页面底部和表格下方。这很愚蠢,因为我必须滚动到一张长表的底部才能找到数字。

有没有一种方法可以在循环完成后将计数设置为变量,然后我可以让脚本返回并在表格上方打印变量?

非常感谢你们提供的任何建议。

干杯,编辑

编辑:添加代码示例:

<?php
$count = '0';
//Print all users with similar names
while($row = mysql_fetch_assoc($result))
{
//Start the form for each user to enable editing, along with row onhover colour
echo "<form method='post' action='editor.php'>
    <tr class='tablehover'>";
//Depending on searchby, change which column is bold. Helps pick out users
if($searchby == 'username') {
    echo "<td><div class='userhighlight'>".$row['Username']."</div></td>";
}
else {
    echo "<td>".$row['Username']."</td>";
}
if($searchby == 'firstname') {
    echo "<td><div class='userhighlight'>".$row['First Name']."</div></td>";
}
else {
    echo "<td>".$row['First Name']."</td>";
}
if($searchby == 'lastname') {
    echo "<td><div class='userhighlight'>".$row['Last Name']."</div></td>";
}
else {
    echo "<td>".$row['Last Name']."</td>";
}
if($searchby == 'office') {
    echo "<td><div class='userhighlight'>".$row['Office']."</div></td>";
}
else {
    echo "<td>".$row['Office']."</td>";
}
if($searchby == 'lastlogin') {
    echo "<td><div class='userhighlight'>".$row['Last_Login']."</div></td>";
}
else {
    echo "<td>".$row['Last_Login']."</td>";
}

//Set ID of found user
$id = $row['User ID'];
//Create query to load user roles
$roleqry = "SELECT * FROM `site roles` WHERE `User ID`='$id'";
$roleresult = mysql_query($roleqry);
//Set $roles to gather roles
while($roles = mysql_fetch_assoc($roleresult)) {

//Echo out the rest of the user details into the table
echo "<td>".$roles['Admin']."</td>";
echo "<td>".$roles['Create User']."</td>";
echo "<td>".$roles['Edit User']."</td>";
echo "<td>".$roles['SandS']."</td>";
echo "<td>".$roles['SandS Admin']."</td>";
//Echo the hidden ID field, for editing, along with the edit button
}
echo "<td><input type='text' name='id' size='1' value='".$row['User ID']."' readonly style='visibility:hidden;width:1px;'>
            <input type='submit' value='Edit'></td></tr></form>";
echo "<tr><td colspan='11'><hr /></td></tr>";
$count = $count + 1;
}
?>

这显然结束了循环。但是我现在别无选择,只能在此之后回显设置变量 $count ,将其放在页面底部:

echo "<br />".$count." user's found";

【问题讨论】:

  • 附带说明:请停止使用古老的 mysql_* 函数编写新代码。它们不再被维护并且社区已经开始了弃用过程。相反,您应该了解准备好的语句并使用 PDO 或 MySQLi。

标签: php variables loops count while-loop


【解决方案1】:

您可以将它们连接到一个变量并稍后打印,而不是在循环时打印表格行。

像这样:

$output = '';
$i = 0;

while($row = mysql_fetch_array($result))
{
    $i++;
    $output .= ....
}

echo $i;
echo $output;

但如果你要打印出所有行,你应该使用 mysql_num_rows() 而不是这样计数。

【讨论】:

  • 谢谢,其他几个人建议我连接成变量。我将来可能会开始这样做,但目前我将简单地打印 mysql_num_rows 函数。谢谢
【解决方案2】:

您可以使用mysql_num_rows() 简单地计算结果集中的行数,对吗? 然后你可以在表格开始之前设置计数:

Count: <?php echo mysql_num_rows($result) ?>
<table>...</table>

【讨论】:

  • 谢谢。对于直接的解决方案,我会这样做,因为它不涉及对我当前页面的太多重新请求。
【解决方案3】:

这里有很多可能性,这又快又脏

<html>...<body>
Rows found: <span id="rowcount">still calculating</span>
<table>
....
</table>
<script language="JavaScript">
document.getElementById('rowcount').innerHTML='<?php echo $rowcount; ?>';
</script>
...
</html>

【讨论】:

  • 感谢您,这绝对符合要求。我决定在显示表格之前简单地使用 mysql_num_rows() 函数来计算行数并打印
【解决方案4】:

嗯,不是很清楚,不过可以在变量里面创建表,然后先打印增量:

$i=0;
$table = '<table>';
while($row = mysql_fetch_array($result))
{
  $table .= '<tr><td>'.htmlentities($row['field']).'</td></tr>';
  $i++;
}
$table .= '</table>';

echo $i;
echo $table;

【讨论】:

  • 谢谢,其他几个人建议我将表格存储在一个变量中,然后在最后打印出来。我将来可能会考虑这样做
【解决方案5】:

我想将逻辑与页面的呈现分开。 所以你应该首先收集你需要的所有数据,然后进行演示。

Smarty 这样的模板系统可以对此有所帮助。很难快速修复,只需将表存储在一个变量中,然后在加载完所有数据后打印它就足够了。

【讨论】:

  • 感谢您的建议,其他几个人建议我以这种方式工作,所以我可能会考虑这样做!
猜你喜欢
  • 2013-09-08
  • 1970-01-01
  • 2017-11-22
  • 2014-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-30
相关资源
最近更新 更多