而循环导致网站消失

时间:2014-09-06 10:03:57

标签: php html css

$i = 0;
$sql_query = mysql_query("SELECT * FROM designs WHERE accessibility=`2` ORDER BY id DESC LIMIT 5");
while ($row = mysql_fetch_assoc($sql_query) {
    if ($i == "0") { ?><div style="width: 49%; float: left;"><a href="designs.php?id=<?php echo $row["id"]; ?>"><img id="lookup_designs_item_icon" src="img/designs/<?php echo $row["id"]; ?>.jpg" alt="<?php echo $row["resolution"]; ?> | <?php echo $row["artist"]; ?>"/></a></div>
    <?php } elseif ($i == "1") { ?><div style="width: 49%; float: right;"><a href="designs.php?id=<?php echo $row["id"]; ?>"><img id="lookup_designs_item_icon" src="img/designs/<?php echo $row["id"]; ?>.jpg" alt="<?php echo $row["resolution"]; ?> | <?php echo $row["artist"]; ?>"/></a></div>
    <?php } $i++; if ($i == "7") { end while; }
}

为什么这段代码不起作用?如果我没有数据库手动完成。你知道,只是认为你是PHP并在HTML和CSS中创建代码,它的工作原理。但是只要你把PHP混合到它,一切都变得空白,整个网站。

1 个答案:

答案 0 :(得分:0)

while ($row = mysql_fetch_assoc($sql_query) {
  

&#34; PHP解析错误:语法错误,意外&#39; {&#39;在

正如评论中所提到的,在开始大括号(波浪形支架)之前,您在while条件下缺少右括号(圆括号)。这应该是:

while ($row = mysql_fetch_assoc($sql_query)) {

但是,在while循环结束时,您确实有另一个明显的解析错误。以下是无效语法:

if ($i == "7") { end while; }

这应该是:

if ($i == "7") { break; }

  

&#34;将PHP和HTML混合在一起&#34; - 只是不要混用PHP和HTML ......它很难阅读/维护。

无论使用何种语法(传统或替代(Tero Kilkanen建议) - 这是为了使这类代码更容易阅读),你根本就不应该像这样混合PHP和输出,通过退出/解析PHP解析模式。

如果您需要构建一些HTML以便稍后输出,那么在循环结束时构建一个字符串并echo一次。

所以,而不是:

    $i = 0;
            $sql_query = mysql_query("SELECT * FROM designs WHERE accessibility=`2` ORDER BY id DESC LIMIT 5");
            while ($row = mysql_fetch_assoc($sql_query) {
            if ($i == "0") { ?><div style="width: 49%; float: left;"><a href="designs.php?id=<?php echo $row["id"]; ?>"><img id="lookup_designs_item_icon" src="img/designs/<?php echo $row["id"]; ?>.jpg" alt="<?php echo $row["resolution"]; ?> | <?php echo $row["artist"]; ?>"/></a></div>
            <?php } elseif ($i == "1") { ?><div style="width: 49%; float: right;"><a href="designs.php?id=<?php echo $row["id"]; ?>"><img id="lookup_designs_item_icon" src="img/designs/<?php echo $row["id"]; ?>.jpg" alt="<?php echo $row["resolution"]; ?> | <?php echo $row["artist"]; ?>"/></a></div>
            <?php } $i++; if ($i == "7") { end while; }
    }

做这样的事情:

// HTML to be output
$htm = '';

$i = 0;
$sql_query = mysql_query("SELECT * FROM designs WHERE accessibility=`2` ORDER BY id DESC LIMIT 5");
while ($row = mysql_fetch_assoc($sql_query)) {
    if ($i == "0") {
        $htm .= <<<EOD
<div style="width: 49%; float: left;">
    <a href="designs.php?id={$row["id"]}"><img id="lookup_designs_item_icon" src="img/designs/{$row["id"]}.jpg" alt="{$row["resolution"]} | {$row["artist"];}"/></a>
</div>
EOD;
    }
    elseif ($i == "1") {
        $htm .= <<<EOD
<div style="width: 49%; float: right;">
    <a href="designs.php?id={$row["id"]}"><img id="lookup_designs_item_icon" src="img/designs/{$row["id"]}.jpg" alt="{$row["resolution"];} | {$row["artist"];}"/></a>
</div>
EOD;
    }
    $i++;
    if ($i == "7") {
        break;
    }
}

// Output HTML
echo $htm;

现在,代码更容易一目了然,很快就会发现可以进一步优化。例如......

  • if块之间似乎有所不同的唯一位是样式属性的float: left / float: right部分。所以这些可以结合起来。
  • $i是一个整数,但您将其与if条件中的字符串进行比较。这有效,但不是&#34;正确&#34;。
  • 当$ i为2,3,4,5或6时,您似乎没有在循环中做任何事情?所以你应该早点打破。即。只是else { break; }似乎会做同样的事情?