PHP Форма на той же странице Отправка сообщения - PullRequest
0 голосов
/ 17 января 2020

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

МОЙ HTML КОД:

<form action="order-mail.php" method="post" class="">
                <div class="row">
                    <div class="col-md-12">
                        <ul>
                            <li>
                                <i class="fa fa-user" aria-hidden="true"></i>
                                <input placeholder="Full Name *"  type="text" name="first_name" maxlength="50" size="30" required>
                            </li>
                        </ul>
                    </div>
                    <div class="col-md-6">
                        <ul>
                            <li>
                                <i class="fa fa-envelope" aria-hidden="true"></i>
                                <input placeholder="Email Address *"  type="text" name="email" maxlength="80" size="30">
                            </li>
                        </ul>
                    </div>
                    <div class="col-md-6">
                        <ul>
                            <li>
                                <i class="fa fa-phone" aria-hidden="true"></i>
                                <input placeholder="Phone No. *"  type="text" name="telephone" maxlength="30" size="30">
                            </li>
                        </ul>
                    </div>
                    <div class="col-md-12">
                        <ul>
                            <li>
                                <i class="fa fa-paper-plane-o" aria-hidden="true"></i>
                                <textarea  name="comments" placeholder="To help us understand better, enter a brief description about your project."></textarea>
                            </li>
                        </ul>
                    </div>
                    <div class="col-md-12">
                        <ul>
                            <li>
                                <input type="submit"  value="Submit">
                            </li>
                        </ul>
                    </div>
                </div>
            </form>

МОЙ PHP КОД:

<?php
        if(isset($_POST['email'])) {

            // EDIT THE 2 LINES BELOW AS REQUIRED
          $email_to = "email@mydomain.com";
          $email_subject = "xyz Form Submissions";

          function died($error) {
                // your error code can go here
            echo "We are very sorry, but there were error(s) found with the form you submitted. ";
            echo "These errors appear below.<br /><br />";
            echo $error."<br /><br />";
            echo "Please go back and fix these errors.<br /><br />";
            die();
          }

            // validation expected data exists
          if(!isset($_POST['first_name']) ||
            !isset($_POST['email']) ||
            !isset($_POST['telephone']) ||
            !isset($_POST['comments'])) {
            died('We are sorry, but there appears to be a problem with the form you submitted.');       
        }

            $first_name = $_POST['first_name']; // required
            $email_from = $_POST['email']; // required
            $telephone = $_POST['telephone']; // not required
            $comments = $_POST['comments']; // required

            $error_message = "";
            $email_exp = '/^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/';

            if(!preg_match($email_exp,$email_from)) {
              $error_message .= 'The Email Address you entered does not appear to be valid.<br />';
            }

            $string_exp = "/^[A-Za-z .'-]+$/";

            if(!preg_match($string_exp,$first_name)) {
              $error_message .= 'The First Name you entered does not appear to be valid.<br />';
            }

            if(strlen($comments) < 2) {
              $error_message .= 'The Comments you entered do not appear to be valid.<br />';
            }

            if(strlen($error_message) > 0) {
              died($error_message);
            }

            $email_message = "Form details below.\n\n";

            function clean_string($string) {
              $bad = array("content-type","bcc:","to:","cc:","href");
              return str_replace($bad,"",$string);
            }

            $email_message .= "First Name: ".clean_string($first_name)."\n";
            $email_message .= "Email: ".clean_string($email_from)."\n";
            $email_message .= "Telephone: ".clean_string($telephone)."\n";
            $email_message .= "Comments: ".clean_string($comments)."\n";

        // create email headers
            $headers = 'From: '.$email_from."\r\n".
            'Reply-To: '.$email_from."\r\n" .
            'X-Mailer: PHP/' . phpversion();
            @mail($email_to, $email_subject, $email_message, $headers);  

            ?>
            <!-- include your own success html here -->

            Thank you for the Submission

            <?php
          }
?>

1 Ответ

0 голосов
/ 17 января 2020

Ваша проблема может быть решена с помощью стандартного логика c flow:

<?php

// deal with user input, if it exists 
if( $_POST['email']) {

    $error_message = '';
    // validate input, build $error_message if errors 

    // if no error message, send email 
    if( !$error_message ) {

        // send email...

        // redirect to next page
        header('Location: /path/to/next/page');
        die;
    }

}

// done with php logic; show view
?>
<html>
    <head>
    ... snip ...
    </head>
    <body>
    ... snip ...
    <?php if( isset( $error_message )): ?>
         <div><?= $error_message ?></div>
    <?php endif; ?>

    ... the rest of your page ...

Что здесь выполнено:

  • Отделенные логи c от представления. Это процедурная имитация MVC: сначала обработайте ввод данных пользователем, затем выполните все логики c, чтобы отобразить страницу, и, наконец, выведите вывод. Обратите внимание, что вам почти никогда не нужно использовать команду print или echo.
  • Часть «контроллер», поскольку она предшествует любому выводу, может свободно использовать команды header() и, таким образом, может перенаправлять или отправлять вывод в любом формате (то есть, закодированном json). Это также позволяет использовать шаблоны, такие как PRG (Post-Redirect-Get). Каждое использование POST должно быть либо ответом ajax, либо последующим перенаправлением. Обратите внимание, что успешная отправка приведет к плавному переходу на следующую страницу.

Как показано, однако, есть несколько проблем, которые необходимо преодолеть, если поля не проверяются: все входные данные будут очищены, потому что страница обновилась, и кнопка «Назад» предложит повторить отправку. страницу, если вы попытаетесь go вернуться.

Без использования ajax мало что можно сделать для последней, кроме перенаправления обратно на ту же страницу, передавая пользовательский ввод как GET, или использовать SESSION для удержания пользовательского ввода. Перенаправление - это то, что нужно, но для этого примера я оставлю это простым.

Поскольку неудачная проверка приводит к «провалу» выполнения скрипта до html, мы можем использовать переменные POST, если они есть, для предоставления атрибута значения входных данных:

<div class="col-md-12">
    <ul>
        <li>
            <i class="fa fa-user" aria-hidden="true"></i>
            <input placeholder="Full Name *"  
                   type="text" 
                   name="first_name" 
                   value="<?= $_POST['first_name'] ?? '' ?>" 
                   maxlength="50" 
                   size="30" 
                   required
                   >
        </li>
    </ul>
</div>

Примечание: просмотр переменных POST, на которые есть ссылки в представлении (html), следует рассматривать как признак того, что это можно сделать лучше!

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...