下面的代码中有3个while
。在此之前,我只有1个while
,但在扩展CMS后,它不想再显示内容了,我不确定是什么导致了这个错误。
<?php
$stmt = $dbConnection->prepare('SELECT * FROM paginas WHERE public="1"');
$stmt->execute();
$result = $stmt->get_result();
$url = $dbConnection->prepare('SELECT * FROM websettings WHERE setting="url"');
$url->execute();
$urlresult = $url->get_result();
$startpagina = $dbConnection->prepare('SELECT * FROM websettings WHERE setting="startpagina"');
$startpagina->execute();
$startresult = $startpagina->get_result();
if(mysqli_num_rows($result) > 0) {
while ($row = $result->fetch_assoc()) {
while ($urlrow = $urlresult->fetch_assoc()) {
while ($startrow = $startresult->fetch_assoc()) {
if(!empty($_GET[$urlrow['value']])) {
if(isset($_GET[$urlrow['value']]) && $_GET[$urlrow['value']] == $row['name']) {
?>
<h1><?php echo $row["heading"]; ?></h1>
<?php echo ubbreplace($row["content"]); ?>
<?php
}
} else {
header("Location: ?" . $urlrow['value'] . "=" . $startrow["value"]);
}
}
}
}
} else {
echo "Er zijn nog geen pagina's aangemaakt.";
}
?>
有人能帮帮我吗?我真的在试着修复它,没有什么能真正起作用。
解决方案
<?php
$stmt = $dbConnection->prepare('SELECT * FROM paginas WHERE public="1"');
$stmt->execute();
$result = $stmt->get_result();
if(mysqli_num_rows($result) > 0) {
while ($row = $result->fetch_assoc()) {
$url = $dbConnection->prepare('SELECT * FROM websettings WHERE setting="url"');
$url->execute();
$urlresult = $url->get_result();
while ($urlrow = $urlresult->fetch_assoc()) {
$startpagina = $dbConnection->prepare('SELECT * FROM websettings WHERE setting="startpagina"');
$startpagina->execute();
$startresult = $startpagina->get_result();
while ($startrow = $startresult->fetch_assoc()) {
if(!empty($_GET[$urlrow['value']])) {
if(isset($_GET[$urlrow['value']]) && $_GET[$urlrow['value']] == $row['name']) {
?>
<h1><?php echo $row["heading"]; ?></h1>
<?php echo ubbreplace($row["content"]); ?>
<?php
}
} else {
header("Location: ?" . $urlrow['value'] . "=" . $startrow["value"]);
}
}
}
}
} else {
echo "Er zijn nog geen pagina's aangemaakt.";
}
?>
摆脱"dynamic"parametername-将其隐藏在可以以静态方式访问的参数后面:
?page=index
成为
`?p_mode=page&p_selection=index`
或者其他什么。(你真的需要page
是动态的吗?-我想不是。)
然后,您可以很容易地使用单个查询(假设前两个参数不是硬编码的,而是从GET参数p_mode
和p_selection
中使用的):
set @setting_name = "page";
set @setting_value = "index";
SELECT
p.*
FROM
paginas p
right JOIN
websettings ws
ON
ws.`value` = p.`name`
WHERE
p.`public` = 1 AND
ws.`setting` = @setting_name AND
ws.`value` = @setting_value;
http://sqlfiddle.com/#!9/ce97a/2
但是,请注意,在这个小示例中,您的"设置名称"是无用的,因为它只连接值。
(参见此示例,导致错误的结果:http://sqlfiddle.com/#!9/d4abb0/1)
因此,如果您想要不同的密钥,请将它们添加到paginas
表中,使它们(和值)成为唯一的一对:
public | heading | content | key | value
1 Test Test mode index
1 Test 2 Test 2 anotherKey index
并在一次运行中查询它们。
添加结尾:请阅读此帖子:https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem
试着询问您的实际问题,而不是您认为未来可能有效的解决方案。