我目前正在开展个人内容管理系统项目,但我遇到了一个问题。
<ul>
<?php
if(!$result) { //Check for result
die("You have no pages ☹ Why not create one?");
} else {
while ($pages = mysqli_fetch_assoc($result)) { //Loop through results
?>
<li class="triple"><span><?php echo $pages["title"]?></span><span><?php echo $pages["visible"] ?><span /><form action = "editPage.php" method="post"><input type="submit" value="Edit Page" name="<?php $pages["title"];?>" /></form></li> //Create li elements for each result that gets created
<?php
};
};
?>
</ul>
基本上我正在使用查询结果来自MySQL表并制作页面列表,我遇到的问题是,最终形式我想要发生的是我想要存储一个会话变量说哪个页面将被编辑,但我不能在末尾的表单中使用$_POST
来获取名称,因为显然该名称是从表中自动生成的。使用它的每个人都会有一个不同的页面名称,所以我不能只获得一个名称,例如$_POST['homepage']
。
如果有人可以就如何解决我的问题提出任何建议,甚至可以提出更好的解决方案来存储哪个页面将被编辑,因为它会转到另一个页面(editPage.php),这将是很棒的。
答案 0 :(得分:0)
使用$_SESSION[]
存储$ page数组的数据,并在editPage.php上再次访问它。您需要确保在两个页面上都调用start_session();
,以使其按预期工作。由于您正在创建多个表单,并且在PHP运行时不知道将提交哪个表单,因此您需要将所有页面存储在$ _SESSION中,然后遍历它们以检查在editPage中选择的那个页面。 .PHP:
$_SESSION['pages'] = array();
while ($page = mysqli_fetch_assoc($result)) {
$_SESSION['pages'][] = $page;
echo "<li class=\"triple\">
<span>".$page["title"]."</span>
<span>".$page["visible"]."</span>
<form action=\"editPage.php\" method=\"post\">
<input type=\"hidden\" name=\"pageID\" value=\"".$page['id']."\">
<input type=\"submit\" value=\"Edit Page\">
</form>
</li>";
}
然后在editPage.php
foreach($_SESSION['pages'] as $page){
if($page['id'] == $_POST['pageID']){ $editpage = $page; break; }
}
// do stuff with $editpage data
另一种选择是使用serialize($page)
并将带有表单数据的数组发送到隐藏的输入元素中。
<input type='hidden' name='data' value='<?php echo serialize($page); ?>'>
然后你可以使用$editpage = unserialize($_POST['data']);
将它变回editPage.php中的数组。