Как передать и поместить переменную со страницы php в другую страницу (форму)? - PullRequest
1 голос
/ 29 февраля 2020

Я работаю над двумя страницами, первая из которых имеет форму с тремя полями: имя, адрес электронной почты и сообщение). Эта страница отправит эти данные на вторую страницу, которая будет проверяться, если эти поля соответствуют критериям.

Если на второй странице любое из этих полей не соответствует критериям, я хочу перенаправить на первую. страницу (или третью php одну), заполните форму с предыдущей информацией и попросите пользователя правильно исправить поля.

Я пытаюсь отправить данные со второй страницы на первую (или третий. Кто-нибудь знает хороший способ сделать это?

Вот мой код:

Первая страница - продолжение. html

<form action="validate.php" method="POST" name="emailform">
    <div class="form-group">
        <input type="text" id="name" name="nome" placeholder="Type your name">
    </div>
    <div class="form-group">
        <input type="text" id="email" name="email" placeholder="type your@email.com here">
    </div>
    <div class="form-group">
        <textarea class="form-control" cols="30" rows="10" maxlength="300" id="message" name="mensagem" placeholder="Leave your message." ></textarea>
    </div>

    <div class="form-group">
        <input type="submit" name="submit" value="Send message" onclick="alert('Thank you!')" ></form>

Вторая страница - подтвердить. php

if(isset($_POST['nome'])) $nome = $_POST['nome'];
if(isset($_POST['email'])) $email_visitante = $_POST['email'];
if(isset($_POST['mensagem'])) $mensagem = $_POST['mensagem'];

// if does not meet the criteria, redirect to contato.html and update the form with the info
if(empty($nome)){
    Header("location:contato.html"); 
}
if(empty($email_visitante)){
    Header("location:contato.html");
}
if(empty($mensagem)){
    Header("location:contato.html");
}
// check for letters and space only
if (!preg_match("/^[a-zA-Z ]*$/",$nome)) {
    Header("location:contato.html");
}
// check if e-mail address is well-formed
if (!filter_var($email_visitante, FILTER_VALIDATE_EMAIL)) {
    Header("location:contato.php");
}

Кто-нибудь знает, как это сделать? Отправка на третью страницу или перенаправление на первую (и заполнение формы снова)

Ответы [ 2 ]

0 голосов
/ 01 марта 2020

Часть вашей проблемы заключается в том, что при любой неудачной проверке вы используете перенаправление. В качестве альтернативы вы можете отобразить сообщение об ошибке для пользователя: предложить им исправить свои данные, вернувшись назад на страницу (браузер вернется).

Когда формы становятся длиннее, пользователям нужно держать руку с исправлением ошибок. Их ошибки должны быть четко указаны вместе с сообщением о том, как они могут это исправить.

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

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

Я добавил общее уведомление об ошибке c. Что не очень помогает в его нынешнем виде. Вы можете улучшить это, изменив код проверки, чтобы он возвращал массив уведомлений об ошибках, и используйте его в своей форме для более точной обратной связи. Вы также можете добавить - все поля обязательны для заполнения - текст, чтобы помочь пользователю.

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

Ваш шаблон регулярного выражения имени в его текущей форме не допускает дефисы и апострофы. Я не изменил это ниже. Имейте это в виду. «Майкл О'Лери» столкнется с ошибкой и, вероятно, не поймет, почему. Вы должны быть осторожны при использовании строгих правил для пользовательского ввода. Также это приведет к отклонению какого-либо юникода.

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

<?php
$nome            = $_POST['nome']     ?? null;
$email_visitante = $_POST['email']    ?? null;
$mensagem        = $_POST['mensagem'] ?? null;
$feedback        = null;

if(isset($_POST['submit'])) {
    if(validate($nome, $email_visitante, $mensagem) !== false) {
        process($nome, $email_visitante, $mensagem);
        // Redirect to success/thankyou/confirmation page.
        header('location:success.html');
        exit;
    }
    // This is a generic message, could this be more helpful?
    $feedback = 'Your form has errors.  Please correct them.';
}
form($nome, $email_visitante, $mensagem, $feedback);

function process($nome, $email_visitante, $mensagem) {
    // do something with your values.
}

function validate($nome, $email_visitante, $mensagem) {
    if(empty($nome)) {
        return false;
    }
    if(empty($email_visitante)){
        return false;
    }
    if(empty($mensagem)){
        return false;
    }
    if (!preg_match("/^[a-zA-Z ]*$/",$nome)) {
        return false;
    }
    if (!filter_var($email_visitante, FILTER_VALIDATE_EMAIL)) {
        return false;
    }

    return true;
}

function form($nome = null, $email_visitante = null, $mensagem = null, $feedback = null) {
?>
    <?= $feedback ?>
    <form action='' method='POST' name='emailform'>
        <div class='form-group'>
            <label for='name'>Your name:</label>
            <input type='text' id='name' name='nome' value='<?= htmlspecialchars($nome) ?>'>
        </div>
        <div class='form-group'>
            <label for='email'>Your email address:</label>
            <input type='text' id='email' name='email' value='<?= htmlspecialchars($email_visitante) ?>'>
        </div>
        <div class='form-group'>
            <label for='message'>Your message:</label>
            <textarea class='form-control' cols='30' rows='10' maxlength='300' id='message' name='mensagem'><?= htmlspecialchars($mensagem) ?></textarea>
        </div>
        <div class='form-group'>
            <input type='submit' name='submit' value='Send message'>
        </div>
    </form>
<?php
}
0 голосов
/ 29 февраля 2020

Вы должны использовать сеансы и хранить там данные на одной странице, а доступ на другой, вот небольшое использование

<?php
// page 1
session_start();
// Set session variables
$_SESSION["nome"] = $nome;
$_SESSION["email"] = $email_visitante;
$_SESSION["mensagem"] = $mensagem;

<?php
// page 2|3|N - any other page
session_start();
// Get session variables
$nome = $_SESSION["nome"];
$email_visitante = $_SESSION["email"];
$mensagem = $_SESSION["mensagem"];
...