了解PHP POST以及如何提交多个命令


understanding PHP POST and how to submit multiple commands

我的页面中有越来越多的代码。就个人而言,我对所有不同的部分是如何工作的有很好的理解,但我不明白它们是如何协同工作的。我的第一段代码从SQL数据库中提取一个名称,然后将其传递到另一个表中,并根据我选择的名称对该表进行排序:

<form method="post" enctype="multipart/form-data">
<table id="" summary="PAGE HEADER" style='width:20%'>
<tr> 
  <th>
  <?php
    include('./db.php');
    $PM = mysqli_query($con, "SELECT DISTINCT PMName FROM report ORDER BY PMName ASC");
  ?> 
    <b style="font-family: Candara, Calibri, Segoe, Optima, Arial, sans-serif;">Choose PM: </b>
    <br> 
    <span class="custom-dropdown custom-dropdown--red">    
    <Select class="custom-dropdown__select custom-dropdown__select--red" name="PMName" onChange="submit(this.form)"<> 
  <?php
    while ($row = mysqli_fetch_row($PM)) {
    $selected = array_key_exists('PMName', $_POST) && $_POST['PMName'] == $row[0] ? ' selected' : '';
    $sel = ($table === $row[0]) ? "id='sel' selected" : "";
    printf(" <option value='%s' %s>%s</option>'n", $row[0], $selected, $row[0]);
    }
  ?>  
  </th>
</span>
</tr>
</select>    
</form>

因为结果是巨大的,我构建了一种"上一页,下一页"的交易,这样用户一次只能显示10个结果。

<?php
if (isset($_POST['next'])) {
$postedLimit = (isset($_POST['next']) ? (int) $_POST['next'] : 0);
$nextLimit = $postedLimit + 10;
session_start();
$_SESSION['page'] = ((int) $nextLimit / 10)+1;
$result = mysqli_query($con, "SELECT * FROM report WHERE PMName = '$PMSelection' AND REGNSB <> 0.000 ORDER BY RegNSB DESC Limit $nextLimit,$LimitItems");
}
?>
<table id="box-table-a" stlye="widgth:20%">
<form method="POST" action="">
<div class="container">
<div class="right">Page <?= $_SESSION['page'] ?> of <?= $totalPages ?>   
<input type="submit" name="next" value="next" onclick="this.value=<?php echo $nextLimit; ?>">
</div></form></div></table>

我的问题是,当我点击这个"下一步"按钮时,这个查询就会运行:

$result = mysqli_query($con, "SELECT * FROM report WHERE PMName = '$PMSelection' AND REGNSB <> 0.000 ORDER BY RegNSB DESC Limit $nextLimit,$LimitItems");

但是,(请原谅我不理解这整件事的工作原理…)$PMSelection现在是空的,并且没有向SQL查询传递任何值,所以无论我用什么名称过滤列表都会消失。我来自VBA的世界,在那里,一旦我定义了某个东西,我就可以永远使用它。。。为什么$PMSelection在某一点上有一个值,但后来没有值,这让我很困惑……

我的问题是:

  1. 为什么$PMSelection在定义和以前使用过之后,在我尝试使用它时仍然不可用
  2. 我如何使$PMSelection保存在某个地方/以某种方式,以便我可以在第二段代码中访问它

如果您想在不同的页面或语言中的第二位代码中使用$_SESSION,请使用它。一旦您在会话中存储了值,您就可以使用它。

在您的第一页上,将变量$PMSelection填充到$_SESSION中,如下所示:

if (!empty($_POST['PMName'])) {
    $_SESSION['PMSelection'] = $_POST['PMName'];
}

第二个页面,如果稍后调用,可以像这样返回这个值:

$PMSelection = $_SESSION['PMSelection'];

你可以用你所有的数据做到这一点。

另一种方式

如果第一个页面的<form>元素在提交时将其数据发送到第二个页面,那么在调用第二个页时,您将获得$_POST数组中的所有输入字段数据。但你必须这样更改你的<form>标签:

<form action="second_page.php" method="post" enctype="multipart/form-data">

如果表单中没有包含此数据的输入元素,并且数据不敏感,则可以创建一个隐藏的输入字段并将数据放入其中,如下所示:

<input type="hidden" name="PMSelection" value="{value}" /><!-- single data -->
<input type="hidden" name="PMSelection[]" value="{value1}" /><!-- array data -->
<input type="hidden" name="PMSelection[]" value="{value2}" />
<input type="hidden" name="PMSelection[]" value="{value2}" />
[...]