【问题标题】:PHP EOF shows only one result from loopPHP EOF 仅显示循环的一个结果
【发布时间】:2011-06-01 21:10:17
【问题描述】:

我在我的 PHP EOF 中使用。

问题是它只显示一个来自 mySQL 循环的项目。

它只显示最后一个结果。

这在 EOF 中是必要的吗?或者我可以避免这个问题吗?

谢谢

function getYiBAdminBanner() {
global $site;
global $dir;
$queryYiBmenu = "SELECT * FROM `(YiB)_cPanel_Menu` WHERE Type = 'top'";
$resultYiBmenu=mysql_query($queryYiBmenu) or die("Errore select menu: ".mysql_error());
$countYiBmenu = mysql_num_rows($resultYiBmenu); 
while($rowYiBmenu = mysql_fetch_array($resultYiBmenu)) {
$menu = "<div id=\"menu\" style=\"display:none;\"><li><a href=\"".$site['url'].$rowYiBmenu['linkHref']."\" onMouseOut=\"javascript: $('#menu').hide('9000');\"><img class=\"imgmenu\" src=\"".$site['url'].$rowYiBmenu['linkIcon']."\">".$rowYiBmenu['linkTitle']."</a></li></div>";
}
if($countYiBmenu <= 0){
$menu = "No Modules Installed";
}
$bannerCode .= <<<EOF
<div style="width:520px; background-color: #EEE; height:30px;">
{$menu}
</div>
EOF;
return $bannerCode;
}

【问题讨论】:

  • 能否请您发布您的代码?
  • 你是在循环遍历一个 mySQL 结果还是一个文件?
  • 我正在遍历一个 mySQL 结果。没有可显示的代码。问题很简单。我应该发布两页代码吗? @Felix Kling 我认为你不需要这样的东西。
  • 如果您正在循环查看mysql 结果,据我所知,您不应该使用任何“EOF”(这是用于文件句柄)。你应该使用mysql_query -&gt; mysql_fetch_assoc or mysql_fetch_array -&gt; while loop。看我的例子。
  • 仅供参考,你称之为“EOF”的东西实际上被称为heredoc,你可以使用除EOF之外的另一个标识符来使其工作:phpf1.com/tutorial/php-heredoc-syntax.html

标签: php loops eof


【解决方案1】:

编辑:根据您的代码示例:尝试$menu .= &lt;your result&gt;$menu = $menu . &lt;your result&gt; 而不是$menu = &lt;your result&gt;。但不清楚您是否期待多个结果

如果您正在循环通过 mySQL 查询的结果,您应该执行以下操作:

$query = sprintf("SELECT firstname, lastname, address, age FROM friends WHERE firstname='%s' AND lastname='%s'",
    mysql_real_escape_string($firstname),
    mysql_real_escape_string($lastname));

// Perform Query
$result = mysql_query($query);

while ($row = mysql_fetch_assoc($result)) {
    echo $row['firstname'];
    echo $row['lastname'];
    echo $row['address'];
    echo $row['age'];
}

http://php.net/manual/en/function.mysql-query.php

如果您正在循环浏览文件的内容,您应该这样做:

<?php
$file = fopen("welcome.txt", "r") or exit("Unable to open file!");
//Output a line of the file until the end is reached
while(!feof($file))
  {
  echo fgets($file). "<br />";
  }
fclose($file);
?>

http://www.w3schools.com/php/php_file.asp

php manual fopen

我希望这会有所帮助,但您的问题不是很清楚您如何/在何处使用 EOF。

【讨论】:

  • 我的循环方式与您在第一个解决方案中所做的方式完全相同。我只有一排要显示。所以我然后以这种方式将该变量分配给 EOF {variable} 。它只显示一个结果,最后一个。它没有显示 mySQL 循环给出的所有结果
  • '我只有一行要显示' - 你的意思是'我只有一列要显示'?并且您有很多 ROW 正在循环,但只显示最后一行?您确实只需要发布与循环相关的代码。基本上不可能在没有看到代码的情况下“调试”您的问题,因为您说的是“EOF”,但我不知道那是什么。我认为您可能在每次循环时重新分配变量。您可能需要将变量存储为数组,如下所示:$myVariable[] = $row["YOURCOLUMNAME"];
  • ...如果你的循环中有这样的东西:$myVariable = $row["YOURCOLUMNNAME"]; 那么当然每次你循环遍历结果的行时,变量都会被最新的行覆盖,直到你到达end 并将其设置为最后一个结果。因此,您可能需要将 $myVariable[] = $row["YOURCOLUMNAME"]; 设置为数组。
  • 您正在使用 $menu = &lt;results&gt; 如果您在查询结果中有多个结果,您应该使用 $menu .= 但我在您的第一条评论中感到困惑,您说“我在结果中只有一行' 但是你说'只显示一个结果'所以我不知道你是否期望多个结果并且你是否有错字。但如果您期望多个结果,请确保将 .= 连接起来
  • 现在它只显示第一个结果而不是最后一个。但无论如何它并没有显示所有结果..我真的不知道问题出在哪里..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-09
  • 1970-01-01
  • 1970-01-01
  • 2013-06-27
  • 2019-03-11
  • 2015-07-09
相关资源
最近更新 更多