while循环未按预期结束

时间:2015-04-09 20:04:30

标签: php while-loop

我可能在这里很疯狂,但我很困惑为什么我的while循环似乎永远不会结束,它会导致页面不断加载,然后在服务器上扼杀几分钟。

基本上我有相册表

+----+--------+--------+
| id | title  | parent |
+----+--------+--------+
| 1  | album1 | 0      |
+----+--------+--------+
| 2  | album2 | 0      |
+----+--------+--------+
| 3  | album3 | 2      |
+----+--------+--------+
| 4  | album4 | 3      |
+----+--------+--------+
| 5  | album5 | 4      |
+----+--------+--------+
| 6  | album6 | 1      |
+----+--------+--------+

所以基本上我们这里有一个像这样的

的专辑层次结构
- album1
  ^- album6
- album2
  ^- album3
     ^- album4
        ^- album5

我还有另一张照片表

+----+--------+-------+--------+
| id | title  | album | master |
+----+--------+-------+--------+
| 1  | photo1 | 1     | 1      |
+----+--------+-------+--------+
| 2  | photo2 | 2     | 2      |
+----+--------+-------+--------+
| 3  | photo3 | 6     | 1      |
+----+--------+-------+--------+
| 4  | photo4 | 4     | 2      |
+----+--------+-------+--------+
| 5  | photo5 | 5     | 2      |
+----+--------+-------+--------+
| 6  | photo6 | 3     | 2      |
+----+--------+-------+--------+

所以你可以看到我有照片并且他们属于每张专辑,但我也希望能够看到他们属于哪张专辑,或者可能是最低专辑。

我不想在相册表中添加一个col,表示哪张专辑是主专辑。如果我必须,但现在我想尝试不这样做。

要做到这一点,我想我会用while循环来做这件事。

因此,当我通过表单添加相册时,我会通过隐藏的输入字段获取当前相册ID并将其绑定到$parent

$parent = $_POST['album'];

由于您无法在根目录中添加照片,因此相册ID将始终大于1,因此即使我们将其添加到专辑1中,现在$parent也将等于1

所以我介绍了while标签

while ($parent>0) {

然后我从数据库中获取了$parent专辑的专辑数据,是的,我已经设置了类并且正在工作,我不相信这是问题,因为它没有while循环就可以自行运行。

    $item = $mysql->get_data("photos_albums", $parent);

然后我检查$parent专辑的父级是否大于0,因此不是根专辑

    if ($item['parent']>0) {

如果是,那么我们将$parent更改为之前的相册$parent并再次运行,直到我们获得父级为0的专辑

        $parent = item['parent'];

如果它不大于0,那么我们知道它是0并且$parent专辑是可能性最低的专辑而主专辑是这个专辑

    } else {
        $master = $item['id'];
    }
}

所有这些结合起来就是这个代码,对我来说不起作用,只会导致页面不断加载。

$parent = $_POST['album'];
$master = 0;

while ($parent>0)
    $item = $mysql->get_data("photos_albums", $parent);
    if ($item['parent']>0) {
        $parent = $item['parent'];
    } else {
        $master = $item['id'];
    }
}

我错过了什么吗?

2 个答案:

答案 0 :(得分:3)

父级仅在父级高于0

时重置
if ($item['parent']>0) {
    $parent = $item['parent'];
} else {
    $master = $item['id'];
    $parent = 0;
}

应该修复

答案 1 :(得分:1)

当你发现父母不大于0时 - 你没有设置while循环条件 - $ parent。

那是你失踪的东西,你只是设置$ parent,如果它是ISN' T 0。 确保更新两个条款的条件。