【问题标题】:Ignored if-statement忽略的 if 语句
【发布时间】:2013-04-30 14:38:51
【问题描述】:

这只是我的第二个问题,所以请温柔,我是 PHP 新手。

我已经编写了一个查询数据库的语句,然后检查一个文件以查看是否存在相关文件,然后再创建一个 div 来放入图像。问题是输出为没有图像的行创建了 div。

$query = "SELECT vehicle_make_logo FROM vehicle_makes";

$result = mysql_query($query);
if(!$result) die ("Database access failed: " . mysql_error());

$rows = mysql_num_rows($result);

for  ($j = 0; $j < $rows; ++$j)
{       
   $row = mysql_fetch_row($result);
   $image = 'images/vehicleBrands/'.$row[0];
   if(file_exists($image)){
       echo '<div class="component"><a href=""><img class="icons" src="images/vehicleBrands/'.$row[0].'"></a></div>';   
       }    
}

我尝试添加一个空的 else 语句,但没有做任何事情。 任何帮助将不胜感激。

【问题讨论】:

  • IE9 不在乎 PHP 中的 if()。记住。 PHP 在服务器上运行。 IE 将从不看到 PHP 代码 - 它只会看到 PHP 生成的 HTML。
  • 你是对的,Firefox 正在创建 div,但显示结果不同。那么我的 if 语句就被忽略了吗?
  • php if 语句永远不会进入浏览器。它们在服务器端处理,只有生成的 HTML 进入浏览器。在您的情况下,如果 IE 生成额外的 div,则问题出在显示的 CSS 或 HTML 元素上。为了调试它,试着弄清楚那些额外的 div 包含什么。你能用这些信息更新你的问题吗?
  • 请使用IE浏览器输出。您确定您在正确的网页上吗? print "test" 会在 if 之前、if 之后以及至少在你的 for 中工作吗?
  • 如果 php root 和 document root 不同,那么相对路径 images/vehicleBrands/ 对于 php 和 webserver 将不同

标签: php html mysql internet-explorer if-statement


【解决方案1】:

发生的另一种可能性是您的数据库表中有行,其中有一个verhicle_make_logo 的空字段,此时您的 if 语句正在检查该文件夹是否存在,它显然是这样做的。如果您确定不是这种情况,请忽略以下内容,如果是,那么这可能是一个解决方案。

<?php

$query = "SELECT vehicle_make_logo FROM vehicle_makes";

$result = mysql_query($query);
if(!$result) die ("Database access failed: " . mysql_error());

$rows = mysql_num_rows($result);

for  ($j = 0; $j < $rows; ++$j)
{       
   $row = mysql_fetch_row($result);
   $image = 'images/vehicleBrands/'.$row[0];
   if(!empty($row[0]) && file_exists($image)){
       echo '<div class="component"><a href=""><img class="icons" src="images/vehicleBrands/'.$row[0].'"></a></div>';   
   }    
}

【讨论】:

  • 谢谢,我发现它是空单元格,额外的验证成功了。
【解决方案2】:

浏览器永远不会覆盖 PHP 代码,因为它永远不会看到 PHP 代码。浏览器只会准确呈现 PHP 代码传递给它的内容。如果 IE 创建了额外的 div 标签,则可能是您的 HTML 格式错误,IE 尝试对其进行规范化并在此过程中创建额外的 div 以关闭您可能忽略的一些打开的标签。

尝试复制页面的view-source 代码并通过 HTML 验证器运行以查看。

【讨论】:

    【解决方案3】:

    永远不要认为,无论您使用哪种浏览器,都会影响 PHP 的行为方式。因为,它不能!对您来说可能是这样,因为有时,您的 PHP 脚本输出/回显的 HTML 标记/代码...可能会根据您的浏览器类型以不同的方式呈现使用,特别是的 IE,因为它很烂。现在,要回到你的代码,试试这个

    <?php
    
    $query = "SELECT vehicle_make_logo FROM vehicle_makes";
    
    $result = mysql_query($query) or die(mysql_error());
    if(mysql_num_rows($rows) > 0) {
    
        for($j=0; $j < count($rows); ++$j){
    
            $row = mysql_fetch_row($result);
            $image = 'images/vehicleBrands/'.$row[0];
            if(file_exists($image)){
           echo '<div class="component">
                <a href=""><img class="icons" src="images/vehicleBrands/'.$row[0].'"></a></div>';   
           }    
        }
    }else {echo 'No record found';}
    

    【讨论】:

    • 这也不起作用,因为第 6 行的 else 被挤爆了
    • 不,它不起作用,我现在已经找到了解决方案。数据库中某些图像的条目为空,因此即使 $images 变量包含图像/车辆品牌,它仍然有效。通过简单地将列更改为“NOT NULL”并为不存在的图像添加文件名,脚本会返回正确数量的 div
    猜你喜欢
    • 1970-01-01
    • 2015-11-27
    • 1970-01-01
    • 2020-10-28
    • 2015-08-13
    • 2014-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多