【问题标题】:Cannot seem to use $_POST twice on the same page似乎无法在同一页面上使用 $_POST 两次
【发布时间】: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=&lt;?php echo $_GET['pg']; ?&gt;"

标签: php html xml


【解决方案1】:

每次提交表单时,页面都会重新加载,PHP 只能访问触发页面重新加载的表单中的 POST 变量。这意味着当您提交第二个表单时,$_POST['Page'] 将不复存在。

有很多方法可以解决这个问题,这里有一个相当简单的方法。在您的第二种形式中,创建一个包含 $_POST['Page'] 变量值的隐藏输入。这样,当提交第二个表单时,页面值将传播到流程的下一步。将此代码添加到您的 section_select 表单就足够了:

<?php

if(isset($_POST['Page'])) {
    ?>
    Page: <?php echo $_POST['Page'] ?>
    <input type="hidden" name="Page" value="<?php $_POST['Page'] ?>" />
    <?php
}

?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-25
    相关资源
    最近更新 更多