Сохранить запрос при запросе того же маршрута с POST и GET? - PullRequest
0 голосов
/ 20 января 2019

Я пытаюсь сделать простую форму, которая будет проверена и ошибки должны быть показаны.Также значения полей должны остаться.

Я использую простой код маршрутизации, чтобы определить, какую страницу показывать.Моя проблема в том, что значения формы всегда сбрасываются при отправке.Я немного погуглил и обнаружил, что при изменении запроса значения формы теряются.

Это небольшой пример, показывающий, чего я хочу достичь:

$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 голосов
/ 20 января 2019

Позволяет сначала получить запрос, который нам нужно использовать для получения аргументов запроса.

$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.

0 голосов
/ 20 января 2019

Когда вы попадаете на маршрут в первый раз, отправьте переменную HTML-valueAttribute как ноль. Когда вы вернетесь к маршруту после публикации, отправьте значение сообщения в переменную HTML-valueAttribute:

При достижении маршрута в первый раз:

<?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>
...