【发布时间】:2019-09-13 07:09:47
【问题描述】:
我正在尝试访问 XML 中的不同元素,以便可以编辑它们或从网页中添加新元素。我正在使用 PHP 循环遍历父标签并显示在选择列表中,然后使用提交按钮来发布所选元素 - 没问题。
然后,我使用 PHP 查找所有选定元素子元素的名称,并在另一个选择列表表单中显示这些名称。这会正确显示列表中的子项,但是当我点击提交时,如果我回显 $_POST("Section") 但清除之前的 $_POST("Page"),则会正确显示。
我认为这与使用 action="" 有关,但有趣的是,如果我将其中一个更改为 GET,它会按预期工作。我实际上想要再次进入低级儿童的第三步,所以不能将该解决方案用作一种狡猾的解决方法。
我不会发布 XML,因为其中包含敏感数据,您可以相信我正在逐步解决问题,这是 php 清除 $_POST 对我来说是个大问题。
请放轻松 - 我真的在四月学会了如何制作一个基本的 html 网页。
尝试了一系列不同的表单操作,包括它所在的 .php,以及
<?php echo $_SERVER['PHP_SELF']; ?>" >
如前所述 - 使用一个作为 GET 和一个 POST 似乎可以解决问题
<?php
//pages processing and put into an array
$pages_array = array();
$xml = simplexml_load_file('XML/links.xml') or die ("Failed to load");
foreach($xml->page as $page){
array_push($pages_array, $page->name);
}
$pagecount = count($pages_array);
?>
<form name="page_select" method="POST" action="">
<select name="Page">
<?php
for ($i = 0; $i < $pagecount; $i++){
print '<option>'.$pages_array[$i].'</option><br>';
}
?>
</select>
<input type="Submit" name="edit_page" value="edit"/>
</form>
<br></br>
<?php
// save page selected into $pg and display page being edited
$pg = $_POST["Page"];
echo 'YOU ARE EDITTING PAGE: '.$pg;
?>
****** 然后在页面下方 *****
<?php
// section processing
$section_array = array();
$xml = simplexml_load_file('XML/links.xml') or die ("Failed to load");
foreach($xml->page as $page){
if($page->name == $pg){
foreach($page->sections->section as $section){
array_push($section_array, $section->name);
}
}
}
$sectioncount = count($section_array);
?>
<form name="section_select" method="POST" action="">
<select name="Section">
<?php
for ($i = 0; $i < $sectioncount; $i++){
print '<option>'.$section_array[$i].'</option><br>';
}
?>
</select>
<input type="Submit" name="edit_section" value="edit"/>
</form>
<br></br>
<?php
$sct = $_POST["Section"];
echo 'YOU ARE EDITTING SECTION: '.$sct;
?>
我希望输出在提交第二个表单后记住两个数组,但是由于第一个 POST 变量被擦除,这意味着我也丢失了第二个数组,因为当它返回推到 $section_array $page->name 时never = $pg,因为 $pg 现在为空
【问题讨论】:
-
“第一个被擦除的 POST 变量”是什么意思?这是在哪里发生的?
-
请原谅我缺乏术语。我提交第一个表单,然后将其写入变量 $pg = $_POST["Page"]。当我提交第二个表单时, $_POST["Section"] 工作正常,但 $_POST["Page"] 被清除。我猜这与我执行所有操作的顺序有关,或者与刷新页面有关 - 但我无法终生解决
-
您一次只能提交一份表格。
$_POST的内容将取决于用户提交的表单。 -
每次提交表单时,
$_POST只包含该表单中的字段。 -
我不确定我是否遵循您正在尝试做的事情,但您可以随时将hidden inputs(或可见)添加到您的任何表单中,以跟踪状态。因此,如果您知道
$pg,您可以将其作为隐藏输入包含在另一个表单中,当该表单发布时,该值将再次出现在您的$_POST中。如果按照建议您想使用GET,则需要使用相同的方法 - 在表单操作中包含当前值,例如action="foo.php?pg=<?php echo $_GET['pg']; ?>"。