Как мне изменить файлы PHP и Javascript, чтобы флажок был обязательным?

Я хочу, чтобы флажок моей формы был обязательным, но я не знаю, как изменить файл PHP на стороне сервера и файл JS.

Я прочитал некоторые вопросы и ответы по этому поводу, но я не могу найти способ реализовать то, что я увидел в своей форме, так как мои знания PHP и Javascript скудны.

Я добавил простой REQUIRED, но, как я читал, этого недостаточно для моей цели.

Я показываю им свои файлы HTML, PHP и JS, чтобы узнать, могут ли они дать мне представление о том, что Я должен добавить или изменить, чтобы это было правильно.

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

Спасибо

//  -************** FILE PHP ************  //

<?php

/***************** Configuration *****************/

$contact_email_to = "[email protected]";
$contact_subject_prefix = "Mensaje de formulario de contacto: ";
$contact_error_name = "¡El nombre es demasiado corto o vacío!";
$contact_error_email = "Por favor, introduzca un email valido";
$contact_error_subject = "El tema es demasiado corto o vacío!";
$contact_error_message = "Mensaje demasiado corto! Por favor, introduzca algo.";

/********** Do not edit from the below line ***********/

if (!isset($_SERVER['HTTP_X_REQUESTED_WITH']) AND strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest') {
  die('Sorry Request must be Ajax POST');
}

if (isset($_POST)) {

  $name = filter_var($_POST["name"], FILTER_SANITIZE_STRING);
  $email = filter_var($_POST["email"], FILTER_SANITIZE_EMAIL);
  $subject = filter_var($_POST["subject"], FILTER_SANITIZE_STRING);
  $message = filter_var($_POST["message"], FILTER_SANITIZE_STRING);

  if (strlen($name)<4){
    die($contact_error_name);
  }

  if (!filter_var($email, FILTER_VALIDATE_EMAIL)){
    die($contact_error_email);
  }

  if (strlen($message)<3){
    die($contact_error_subject);
  }

  if (strlen($message)<3){
    die($contact_error_message);
  }

  if (!isset($contact_email_from)) {
    $contact_email_from = "contactform@" . @preg_replace('/^www\./','', $_SERVER['SERVER_NAME']);
  }

  $sendemail = mail($contact_email_to, $contact_subject_prefix . $subject, $message,
    "From:  $name <$contact_email_from>" . PHP_EOL .
    "Reply-To: $email" . PHP_EOL .
    "X-Mailer: PHP/" . phpversion()
  );

  if ( $sendemail ) {
    echo 'OK';
  } else {
    echo 'No se pudo enviar el correo! Por favor, compruebe su configuración de correo PHP.';
  }
}
?>


// ***********  FILE   JAVASCRIPT ********* //


jQuery(document).ready(function($) {
"use strict";

    //Contact
    $('form.contactForm').submit(function(){

        var f = $(this).find('.form-group'), 
        ferror = false, 
        emailExp = /^[^\s()<>@,;:/]+@\w[\w\.-]+\.[a-z]{2,}$/i;

        f.children('input').each(function(){ // run all inputs

            var i = $(this); // current input
            var rule = i.attr('data-rule');

            if ( rule !== undefined ){
            var ierror=false; // error flag for current input
            var pos = rule.indexOf( ':', 0 );
            if ( pos >= 0 ){
                var exp = rule.substr( pos+1, rule.length );
                rule = rule.substr(0, pos);
            }else{
                rule = rule.substr( pos+1, rule.length );
            }
            
            switch( rule ){
                case 'required':
                if ( i.val()==='' ){ ferror=ierror=true; }
                break;
                
                case 'minlen':
                if ( i.val().length<parseInt(exp) ){ ferror=ierror=true; }
                break;

                case 'email':
                if ( !emailExp.test(i.val()) ){ ferror=ierror=true; }
                break;

                case 'checked':
                if ( !i.attr('checked') ){ ferror=ierror=true; }
                break;
                
                case 'regexp':
                exp = new RegExp(exp);
                if ( !exp.test(i.val()) ){ ferror=ierror=true; }
                break;
            }
                i.next('.validation').html( ( ierror ? (i.attr('data-msg') !== undefined ? i.attr('data-msg') : 'wrong Input') : '' ) ).show('blind');
            }
        });
        f.children('textarea').each(function(){ // run all inputs

            var i = $(this); // current input
            var rule = i.attr('data-rule');

            if ( rule !== undefined ){
            var ierror=false; // error flag for current input
            var pos = rule.indexOf( ':', 0 );
            if ( pos >= 0 ){
                var exp = rule.substr( pos+1, rule.length );
                rule = rule.substr(0, pos);
            }else{
                rule = rule.substr( pos+1, rule.length );
            }
            
            switch( rule ){
                case 'required':
                if ( i.val()==='' ){ ferror=ierror=true; }
                break;
                
                case 'minlen':
                if ( i.val().length<parseInt(exp) ){ ferror=ierror=true; }
                break;
            }
                i.next('.validation').html( ( ierror ? (i.attr('data-msg') != undefined ? i.attr('data-msg') : 'wrong Input') : '' ) ).show('blind');
            }
        });
        if ( ferror ) return false; 
        else var str = $(this).serialize();		
            $.ajax({
                type: "POST",
                url: "contactform/contactform.php",
                data: str,
                success: function(msg){
                   // alert(msg);
                    if (msg == 'OK') {
                        $("#sendmessage").addClass("show");			
                        $("#errormessage").removeClass("show");	
                    }
                    else {
                        $("#sendmessage").removeClass("show");
                        $("#errormessage").addClass("show");
                        $('#errormessage').html(msg);
                    }
                    
                }
            });
        return false;
    });

});
<!DOCTYPE html>
<html lang = "en">
<body>
<section id = "contact-page">
    <div class = "container">
      <div class = "center">
        <h2>Deje su mensaje</h2>
        <p class = "lead">Deje su mensaje con sus ideas y veremos que es lo mejor para usted y su negocio.</p>
      </div>
      <div class = "row contact-wrap">
        <div class = "col-sm-8 col-sm-offset-2">
          <div id = "sendmessage">Your message has been sent. Thank you!</div>
          <div id = "errormessage"></div>
          <form action = "" method = "post" role = "form" class = "contactForm">
            <div class = "form-group">
              <input type = "text" name = "name" class = "form-control" id = "name"  placeholder = "Nombre" data-rule = "minlen:4" data-msg = "Por favor ingrese al menos 4 caracteres" />
              <div class = "validation"></div>
            </div>
            <div class = "form-group">
              <input type = "email" class = "form-control" name = "email" id = "email"   placeholder = "Email" data-rule = "email" data-msg = "Por favor introduzca una dirección de correo electrónico válida" />
              <div class = "validation"></div>
            </div>
            <div class = "form-group">
              <input type = "text" class = "form-control" name = "subject" id = "subject"  placeholder = "Tema" data-rule = "minlen:4" data-msg = "Por favor ingrese al menos 8 caracteres del tema" />
              <div class = "validation"></div>
            </div>
            <div class = "form-group">
              <textarea class = "form-control" name = "message" rows = "5" data-rule = "required" data-msg = "Por favor escribe algo para nosotros" placeholder = "Mensaje"></textarea>
              <div class = "validation"></div>
            </div>
            <input type = "checkbox" name = "acceptPolicies" required = "required" value = "acceptPolicies" /> He leído y acepto su <a href = "privacidad.html" target = "_blank">Política de Privacidad</a>
            <div class = "text-center"><button type = "submit" class = "btn btn-primary btn-lg">Enviar</button></div>
          </form>
        </div>
      </div>
      <!--/.row-->
    </div>
    <!--/.container-->
  </section>
</body>
</html>
Поведение ключевого слова "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
0
64
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Ввод флажка просто ничего не отправит в конечную точку формы, если он не отмечен.

Поэтому вы можете просто добавить следующий код на серверной стороне:

if (!isset($_POST['acceptPolicies'])) {
  // Checkbox wasn't checked, handle appropriately (error message, log, redirection, etc.)
}

Кроме того, общий совет: вам следует избегать слишком частого использования die (кроме случаев, когда сразу после заголовка перенаправления или таких конкретных случаев). Если в форме есть ошибки ввода, лучше перенаправить в форму после сохранения ключа ошибки в сеансе, а затем отобразить соответствующее сообщение об ошибке в форме.

Спасибо за вклад @Jeto, но у меня есть вопрос. Где я должен поместить именно тот фрагмент кода, который показывает мне? Я не понимаю PHP и не хочу портить форму. Если вы скажете мне, где я должен это разместить или почему я должен заменить ваш код, я был бы признателен.

Diana 23.02.2019 17:25

Например, вы можете добавить его перед блоком if (strlen($name)<4){. Вы также можете заменить это // comment, которое я поставил, на die('You should accept policies'); или что-то еще, если вы хотите сохранить его таким же, как это было сделано для других случаев ошибок (хотя, как я уже упоминал, это не идеально). Если честно, вам, вероятно, следует спросить того, кто сделал этот PHP-скрипт, изменение кода, который вы не понимаете, - не самая лучшая идея.

Jeto 23.02.2019 17:29

Спасибо @Jeto, я просто хочу поставить галочку. Я попытался добавить ваш пример, и он выдает синтаксическую ошибку: `if (!isset($_POST['acceptPolicies'])) { die($contact_error_acceptPolicies)}`

Diana 23.02.2019 18:31

Вы пропустили ; перед закрытием }.

Jeto 23.02.2019 18:36

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