使用POST和GET请求相同路线时是否保留请求?

时间:2019-01-20 12:40:06

标签: php post get routing request

我正在尝试制作一个经过验证的简单表格,并且应该显示错误。此外,字段的值应保持不变。

我正在使用简单的路由代码来确定显示哪个页面。 我的问题是,提交表单时,表单的值始终会重置。 我在Google上搜索了一下,发现当请​​求更改时,表单值会丢失。

这是一个小例子,展示了我想要实现的目标:

$route = $_SERVER['REQUEST_URI'];

switch ($route) {
    case '/kontakt':
        ?>
        <form method="POST" action="/kontakt">
            <input type="text" required name="test">
            <input type="submit">
        </form><?php
        break;
}

提交后,输入的值应留在该字段中。

那么,当路由到同一路由但一次使用POST和一次使用GET而又不更改表单值以使用_POST数组时,如何保留请求?

2 个答案:

答案 0 :(得分:1)

首先让我们抓取我们需要使用哪个请求来获取请求参数。

$request =& $_SERVER['REQUEST_METHOD'] === 'POST' ? $_POST : $_GET;

如果没有设置,最好在这里检查它是否设置好-请将其留空。

$name = $request['name'] ?? ''; # PHP 7+
$name = isset($request['name']) ? $request['name'] : ''; # PHP 5.6 >

然后您可以进行路由

# switch: endswitch; for readability
switch(($route = $_SERVER['REQUEST_URI'])):
    case '/kontack': ?>
        <form method="POST" action="/kontakt">
        <input type='text' value='<?= $name; ?>' name='name' />
        ....
        <?php break;
endswitch;

然后,它将连续将名称重新插入到value字段中。但是,如果您访问新页面然后返回-它将会消失。如果您希望它始终保持不变,遍及任何路线,都可以使用会话。

session_start();

# We want to use the request name before we use the session in-case the user
# Used a different name to what we previously knew
$name = $request['name'] ?? $_SESSION['name'] ?? ''; # PHP 7
$name = isset($request['name']) ? $request['name'] : isset($_SESSION['name']) ? $_SESSION['name'] : ''; # PHP 5.6 >

# Update what we know
$_SESSION['name'] = $name;

注意::我展示了PHP 5.6>和PHP 7的示例。您只需要根据所使用的PHP版本使用一个即可。

答案 1 :(得分:0)

第一次进入路线时,请发送HTML-valueAttribute-variable作为null。发布后返回路线时,将发布值发送到HTML-valueAttribute-variable:

当您第一次到达路线时:

<?php
    //Value that is sent to the view/page when accessing route without having posted a value
    $testValue=null
?>
    <form method="POST" action="/kontakt">
        <input type="text" required name="test"
            <?php
                if($testValue != null)
                {
                    echo "value='".$testValue."'";
                }
            ?>
        >
        <input type="submit">
    </form>

发布后使用路线时:

<?php
    //Value that was posted is sent to view/page
    $testValue=$POST['test']
?>
    <form method="POST" action="/kontakt">
        <input type="text" required name="test"
            <?php
                if($testValue != null)
                {
                    echo "value='".$testValue."'";
                }
            ?>
        >
        <input type="submit">
    </form>