IF循环期间变量的变化

时间:2016-09-02 08:52:55

标签: php

我正在编写PHP脚本来制作目录。我的数据库中的相关列是Vid,banner,category和Scategory。 Vid是主键,banner是我的img文件的路径,category和Scategory都是它们各自ID的数字。由于我只是在测试脚本,因此一切都过于简化了。目前有20条记录。

<html>
<head>
<style type="text/css">

</style>  
</head>
<body>
<?php

require "config.php";

$sql = "SELECT Vid,banner,category,Scategory FROM display"; 
$result = $conn->query($sql);
$row = $result;
$min = 10;
$max = 20;

while ($row = mysqli_fetch_assoc($result)) {

    implode ('', $row);
    $vid = $row['Vid'];
    $banner = $row['banner'];
    $cid = $row['category'];
    $sid = $row['Scategory'];


    if ($cid = 2 && $sid = 1){  

        echo 
         '
          <div style="display:inline-block;"> 
           <div style="border-color:blue; border-style:solid;">
             <a href="#test'.$vid.'">
             <img src="'.$banner.'" />
           </div>
          </div>';  
        echo $vid;
        echo $cid;
        echo $sid;



        if ($vid % 2 == 0){
            echo '<br>'; 
        }
    }
}


require'close.php';
?>
</body>
</html>

现在代码运行得很好但是很奇怪我使用$ cid和$ sid作为IF循环中的条件。鉴于有20条记录,$ cid和$ sid都有一半的值,因为&#39; 1&#39;因此,当我设置IF条件时,我认为它会返回5条记录,但它会返回所有20条。当我回显$ vid $ cid和$ sid时,它会返回正确的$ vid,但是$ sid返回我设置的任何条件。例如,设置为$ cid = 1和$ sid = 2的条件将返回1:1:2,2:1:2,3:1:2等。

现在这里真的很奇怪,无论为cid设置的条件是什么,它返回为&#39; 1&#39;,如果我设置它&#39; 7&#39;它仍然以&#39; 1&#39;返回。而$ sid会返回任何数字。此外,当我将任一条件设置为null时,它不返回任何内容。

所以我的问题是,如果我写错了,为什么它会按照它的方式或如何写它。

另外作为一个附带问题,当我在<a>之前添加<img>时,它会返回与<img>相关联的正确ID。但是当我在<a>之后直接放置<img>时,它会返回下一个迭代行的ID,并且第一次迭代返回空白。任何人都碰巧知道为什么会发生这种情况,因为无论他们在声明中的位置如何,它仍然是同一循环迭代的一部分?

5 个答案:

答案 0 :(得分:1)

您正在使用单个相等并将值分配给变量。要比较值,您必须使用=====

=====有什么区别?

请参阅以下条件以查看差异:

2 == "2" -> Equal
2 == 2 -> Equal
2 === "2" -> Not Equal
2 === 2 -> Equal

未来如何避免这种情况? - 约达条件

您可以将条件更改为以下内容,以确保以正确的方式使用条件。你只能使用它来进行同等比较而不是>, <, <=, >=

//throws an error
if (0 = $isNull) { ... }

//the right one
if (0 == $isNull) { ... }

答案 1 :(得分:0)

    在您的if语句中
  1. ==而不是=
  2. implode line什么都不做

答案 2 :(得分:0)

使用双等于而不是单打。不:

if( $foo = 2 )

...但:

if( $foo == 2 )

您的代码正在更改值而不是测试它们。

答案 3 :(得分:0)

使用if ($cid = 2 && $sid = 1)更改if ($cid == 2 && $sid == 1)。我认为你只是错误地做了,因为你的其他if没问题!

答案 4 :(得分:0)

在你的if语句中,你使用的是单个等于运算符,它需要是==或===