Контактная страница PHP - Как указать минимальное количество букв для полей ввода

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

Как я могу указать такие вещи, как имя должно состоять минимум из 6 букв, электронная почта должна иметь символ @ и правильное окончание .com, .org и т. д.; и сообщение должно состоять не менее чем из 20 букв.

СЦЕНАРИЙ PHP

<?php

if ($_POST['submit']) {

  if (!$_POST['firstname']) {
    $error = "<br/>- Please enter your first name";
  }
  
  if (!$_POST['lastname']) {
    $error = "<br/>- Please enter your last name";
  }

  if (!$_POST['email']) {
    $error. = "<br/>- Please enter your email";
  }
  if (!$_POST['message']) {
    $error. = "<br/>- Please enter a message";
  }
  if (!$_POST['check']) {
    $error. = "<br/>- Please confirm you are human";
  }
  
  if ($error) {
    $result='<div class = "alert alert-danger" role = "alert">
    <strong>Whoops, there is an error</strong>. Please correct the following: '.$error.'</div>';
  } else {
    mail("[email protected]", 
   "Contact message", 
    "Name: ".$_POST['name']."
    Email: ".$_POST['name']."
    Message: ".$_POST['message']);
    
    {
    $result='<div class = "alert alert-success" role = "alert">Thank you, I\'ll be in touch shortly. </div>';
    }
  }
}
?>

#HTML CODE#

  <form method = "post" role = "form">
            <div class = "row">
            <div class = "col-md-3"></div>
                  <div class = "contact-icon">
                      <i class = "fas fa-user"></i>
                  </div>

                  <div class = "form-inline">
                    <div class = "col-md-9 form-group">
                          <label for = "name">your name</label>
                          <span class = "fieldSpan">
                          <input type = "text" 
                          name = "name" 
                          id = "input-field-name"
                          class = "form-control" 
                          placeholder = "your name" 
                          value = "<?php echo $_POST['name']; ?>"> 
                    </div>
                </div>
            </div>

        <div class = "row">
        <div class = "col-md-3"></div>
              <div class = "contact-icon">
                <i class = "fas fa-envelope"></i>
              </div>

              <div class = "form-inline">
              <div class = "col-md-9 form-group">
                      <label for = "email">your email address</label>
                      <span class = "fieldSpan">
                      <input type = "email" 
                      name = "email" 
                      id = "input-field-email"
                      class = "form-control" 
                      placeholder = "[email protected]" 
                      value = "<?php echo $_POST['email']; ?>">
                  </div>
                </div>
         </div>

        <div class = "row">
        <div class = "col-md-3"></div>
              <div class = "contact-icon">
                  <i class = "fas fa-pencil-alt"></i>
              </div>
        
              <div class = "form-inline">
                 <div class = "col-md-9 form-group">
                        <label for = "message">your message</label>
                        <span class = "fieldSpan vertical-align:top">
                        <textarea name = "message" 
                        rows = "5" 
                        id = "input-field-message"
                        class = "form-control" 
                        placeholder = "your message">
                        <?php echo $_POST['message']; ?></textarea>
                        <br>
                        <br>
                    </div>
                    </div>
              </div>
        </div>
 

              <div class = "col-md-12">
                 <div class = "checkbox">
                    <label>
                        <input type = "checkbox" 
                        name = "check"> 
                        Check this box if you're human.
                      </label>
                  </div>
              </div>
        </div>

      <div class = "col-md-3"></div>
      <div class = "row">
          <div class = "col-md-9">
              <input type = "submit" 
              name = "submit" 
              class = "btn btn-secondary" 
              value = "send message"/>
            </div> 
        </div>

     </form>
      
     </div>
      </div>
    </div>
  </section>
  

 <!-- ----------- SCRIPTS------------ -->

    <script src = "https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity = "sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin = "anonymous"></script>

<script src = "https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity = "sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin = "anonymous"></script>

<script src = "https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity = "sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin = "anonymous"></script>

не каждое имя состоит из 6 букв

user10051234 17.12.2018 22:06

@tim - даже не ее собственный :-). Что касается формы - вам нужно немного поискать о проверке формы (и санации). в зависимости от всего вашего фреймворка приложения вы можете найти множество способов сделать это, включая выделенные библиотеки или плагины, в JS или php (или в обоих). Ajaxed или нет ..

Obmerk Kronen 18.12.2018 02:08

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

Angie G 18.12.2018 21:36
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
3
127
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

https://www.w3schools.com/php/php_form_url_email.asp

Привет! Это ответ, который вы ищете. Это концепция, называемая проверкой ввода, и каждый язык имеет свой способ работы с ней.

Ниже приводится отрывок из этой ссылки, по которой проверяются несколько желаемых полей.

<?php
// define variables and set to empty values
$nameErr = $emailErr = $genderErr = $websiteErr = "";
$name = $email = $gender = $comment = $website = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
  if (empty($_POST["name"])) {
    $nameErr = "Name is required";
  } else {
    $name = test_input($_POST["name"]);
    // check if name only contains letters and whitespace
    if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
      $nameErr = "Only letters and white space allowed"; 
    }
  }

  if (empty($_POST["email"])) {
    $emailErr = "Email is required";
  } else {
    $email = test_input($_POST["email"]);
    // check if e-mail address is well-formed
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
      $emailErr = "Invalid email format"; 
    }
  }

  if (empty($_POST["website"])) {
    $website = "";
  } else {
    $website = test_input($_POST["website"]);
    // check if URL address syntax is valid (this regular expression also allows dashes in the URL)
    if (!preg_match("/\b(?:(?:https?|ftp)://|www\.)[-a-z0-9+&@#/%?=~_|!:,.;]*[-a-z0-9+&@#/%=~_|]/i",$website)) {
      $websiteErr = "Invalid URL"; 
    }
  }

  if (empty($_POST["comment"])) {
    $comment = "";
  } else {
    $comment = test_input($_POST["comment"]);
  }

  if (empty($_POST["gender"])) {
    $genderErr = "Gender is required";
  } else {
    $gender = test_input($_POST["gender"]);
  }
}
?>

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

Это вам вообще помогло?

dillon.harless 17.12.2018 22:58

Да, понял. Спасибо за БЫСТРЫЙ ответ!

Angie G 18.12.2018 01:15

@AngieG Замечательно! Если бы это был ответ, который вы искали, не могли бы вы его принять? Работаю над моей репутацией! :)

dillon.harless 18.12.2018 14:31

Вы можете сделать это напрямую, используя функции HTML.

В этом посте был дан ответ о минимальной длине: минимальная длина Если вы используете элемент ввода электронной почты в html, браузер выполнит проверку автоматически.

Я проверил комментарии и понял, что вы имеете в виду, СПАСИБО! (Я действительно искал здесь ту же проблему, прежде чем опубликовать вопрос, извините.)

Angie G 18.12.2018 01:17

Другие вопросы по теме