while 循环没有按预期结束
while loop not ending as expected
我在这里可能很疯狂,但我很困惑为什么我的 while
循环似乎永远不会结束,它导致页面不断加载,然后在几分钟后阻塞服务器。
基本上我有table个相册
+----+--------+--------+
| 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
我还有另一张table的照片
+----+--------+-------+--------+
| 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 |
+----+--------+-------+--------+
所以你可以看到我有照片,它们属于每个相册,但我也希望能够看到它们属于哪个主相册,或者可能是最低的相册。
我不想在相册 table 中添加一个栏来说明哪个相册是它的主相册。如果必须的话我可以但是现在我想尝试不这样做。
要做到这一点,我想我会用一个 while 循环来做。
因此,当我通过表单添加专辑时,我通过隐藏的输入字段获取当前专辑 ID,并将其绑定到 $parent
$parent = $_POST['album'];
并且由于您不能在根目录中添加照片,相册 ID 将始终大于 1,因此即使我们将其添加为相册 1,现在 $parent
将等于 1
所以我引入while标签
while ($parent>0) {
然后我从数据库中获取 $parent
专辑的专辑数据,是的,我已经设置了 class 并且可以正常工作,我不认为这是问题所在,因为它可以正常工作自己没有 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'];
}
}
我是不是漏掉了什么?
仅当父级高于 0 时才重置父级
if ($item['parent']>0) {
$parent = $item['parent'];
} else {
$master = $item['id'];
$parent = 0;
}
应该修复
当您发现 parent 不大于 0 时 - 您没有将 while 循环设置为条件 - $parent。
这就是你遗漏的东西,如果 $parent 不为 0,你只设置它。
确保更新两个子句的条件。
我在这里可能很疯狂,但我很困惑为什么我的 while
循环似乎永远不会结束,它导致页面不断加载,然后在几分钟后阻塞服务器。
基本上我有table个相册
+----+--------+--------+
| 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
我还有另一张table的照片
+----+--------+-------+--------+
| 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 |
+----+--------+-------+--------+
所以你可以看到我有照片,它们属于每个相册,但我也希望能够看到它们属于哪个主相册,或者可能是最低的相册。
我不想在相册 table 中添加一个栏来说明哪个相册是它的主相册。如果必须的话我可以但是现在我想尝试不这样做。
要做到这一点,我想我会用一个 while 循环来做。
因此,当我通过表单添加专辑时,我通过隐藏的输入字段获取当前专辑 ID,并将其绑定到 $parent
$parent = $_POST['album'];
并且由于您不能在根目录中添加照片,相册 ID 将始终大于 1,因此即使我们将其添加为相册 1,现在 $parent
将等于 1
所以我引入while标签
while ($parent>0) {
然后我从数据库中获取 $parent
专辑的专辑数据,是的,我已经设置了 class 并且可以正常工作,我不认为这是问题所在,因为它可以正常工作自己没有 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'];
}
}
我是不是漏掉了什么?
仅当父级高于 0 时才重置父级
if ($item['parent']>0) {
$parent = $item['parent'];
} else {
$master = $item['id'];
$parent = 0;
}
应该修复
当您发现 parent 不大于 0 时 - 您没有将 while 循环设置为条件 - $parent。
这就是你遗漏的东西,如果 $parent 不为 0,你只设置它。 确保更新两个子句的条件。