表单不断抛出“不允许直接访问此页面.” 找不到错误


Form Keeps Throwing "Direct Access to this page is not allowed." Can't Find the Bug

我一直在用JavaScript,PHP和HTML编写表单。我似乎遇到了问题,我觉得这是一个小问题。我已经努力工作了几个小时,问题仍然存在。

我正在尝试工作的表格位于此处:http://www.cyberbytesdesign.com/s/ama/contact.php

以下是正在使用的 JavaScript:

$(function() {
    // Setup any needed variables.
    var $form   = $('#contact-form'),
        $loader = '<img src="img/loader.gif" height="20" width="20" alt="Loading..." />';
    $form.append('<div id="response" class="hidden">');
    var $response = $('#response');
    // Do what we need to when form is submitted.
    $form.on('click', 'input[type=submit]', function(e){
        // Hide any previous response text and show loader
        $response.hide().html( $loader ).show();
        // Make AJAX request 
        $.post('resources/script/contact-send.php', $form.serialize(), function( data ) {
            // Show response message
            $response.html( data );
            // Scroll to bottom of the form to show respond message
            var bottomPosition = $form.offset().top + $form.outerHeight() - $(window).height();
            if( $(document).scrollTop() < bottomPosition )
                $('html, body').animate({ scrollTop : bottomPosition });
            // If form has been sent succesfully, clear it
            if( data.indexOf('success') !== -1 )
                $form.find('input:not(input[type="submit"], input[type="reset"]), textarea, select').val('').attr( 'checked', false );
        });
        // Cancel default action
        e.preventDefault();
    });
});/*END FUNCTION*/

这是提交表单时使用的 PHP(它抛出错误"else { die('不允许直接访问此页面。

    // Get email address
    $email_address = 'test@gmail.com';
    // Ensures no one loads page and does simple spam check
    if( isset($_POST['name']) && empty($_POST['spam-check']) ) {
        // Declare our $errors variable we will be using later to store any errors
        $error = '';
        // Setup our basic variables
        $input_name = strip_tags($_POST['name']);
        $input_email = strip_tags($_POST['email']);
        $input_subject = strip_tags($_POST['subject']);
        $input_message = strip_tags($_POST['message']);
        // We'll check and see if any of the required fields are empty
        if( strlen($input_name) < 2 ) $error['name'] = '<label class="inline" for="contact-name">Please enter your <b>Name</b></label>.';
        if( strlen($input_message) < 5 ) $error['message'] = '<label class="inline" for="contact-message">Please leave a <b>Message</b></label>.';
        // Make sure the email is valid
        if( !filter_var($input_email, FILTER_VALIDATE_EMAIL) ) $error['email'] = '<label class="inline" for="contact-email">Please enter a valid <b>Email Address</b></label>.';
        // Set a subject & check if custom subject exist
        $subject = "Customer: Contact Us";
        if( $input_subject ) $message = "Subject: $input_subject'n";
        $message .= "'nMessage: $input_message'n";
        $message .= "'n---'nThis email was sent by $input_name from $input_email";
        // Now check to see if there are any errors 
        if( !$error ) {
            // No errors, send mail using conditional to ensure it was sent
            if( mail($email_address, $subject, $message, "From: $input_email") ) {
                echo '<p class="success"><b>EMAIL SENT SUCCESSFULLY.</b><br />' . "Dear $input_name, " . 'Thank You for contacting RAC-Engineering! Please allow us <b>24-48</b> hours to review your request and get back to you. If you need a response sooner, please contact us via telephone at (716) 695-2269.<br /><br /><b>Please verify that this is your correct Email Address:</b><br />' . "Email Address: <i>$input_email</i>" . '<br /><br /><span class="red"><b>PLEASE NOTE:</b></span><br /> If we do not respond to your request within a reasonable amount of time, please give us a call as there may have been an error on our end with your request.</p>';
            } else {
                echo '<p class="error">There was a problem sending your email! Please give us a call at (716) 695-2269 as there seems to be an error on our end with the form.</p>';
            }
        } else {
            // Errors were found, output all errors to the user
            $response = (isset($error['name'])) ? $error['name'] . "<br /> 'n" : null;
            $response .= (isset($error['email'])) ? $error['email'] . "<br /> 'n" : null;
            $response .= (isset($error['message'])) ? $error['message'] . "<br /> 'n" : null;
            echo "<p class='error'>$response</p>";
        }
    } else {
        die('Direct access to this page is not allowed.');
    }

最后,这是表单的 HTML:

        <div id="contact-form" class="row m-top-10">
          <form action="resource/script/question-send.php" method="post">
            <div class="column-4 required">
              <label class="no-margin" for="request-name"><strong>Name</strong></label>
              <input type="text" name="name" value="" id="request-name" placeholder="First / Last Name" required>
            </div>
            <div class="column-4 required">
              <label for="request-email"><strong>Email Address</strong></label>
              <input class="required" type="email" name="email" value="" id="request-email" placeholder="email@example.com" required>
            </div>
            <div class="column-4">
              <label for="request-subject"><strong>Subject</strong></label>
              <input type="text" name="subject" value="" id="request-subject" placeholder="e.g. Question">
            </div>
            <div class="row column-8 first-column m-top-30-desktop required">
              <label for="request-message"><strong>Your Message</strong></label>
              <textarea class="required" name="message" id="request-message" placeholder="Please include any additional information pertaining to your inquiry." required></textarea>
            </div>
            <div class="hidden">
              <label for="request-spam-check">Do not fill out this field:</label>
              <input name="spam-check" type="text" value="" id="request-spam-check" />
            </div>
            <div class="column-4 m-top-60 m-top-20-mobile">
              <input class="large strong btn btn-blue" type="submit" value="Submit">
            </div>
            <div class="column-4 textcenter last">
              <input class="large strong blue" type="reset" value="Reset">
            </div>
          </form>
          <span class="row"></span>
        </div>

非常感谢你,我一直在为此发疯,这一定是一双新眼睛可能能够捕捉到的非常小的事情。

而不是写:

if( isset($_POST['name']) && empty($_POST['spam-check']) ) {

尝试编写:

if (isset($_POST['name']) && trim($_POST['spam-check']) === "") {

我认为这可能会有所帮助。

更新:我知道为什么。

我看了一下您网站的代码:

<div id="contact-form" class="row m-top-10">
  <form action="resource/script/question-send.php" method="post">
    <div class="column-4 required">
      <label class="no-margin" for="request-name"><strong>Name</strong></label>
      <input type="text" name="name" value="" id="request-name" placeholder="First / Last Name" required>
    </div>
    <div class="column-4 required">
      <label for="request-email"><strong>Email Address</strong></label>
      <input class="required" type="email" name="email" value="" id="request-email" placeholder="email@example.com" required>
    </div>
    <div class="column-4">
      <label for="request-subject"><strong>Subject</strong></label>
      <input type="text" name="subject" value="" id="request-subject" placeholder="e.g. Question">
    </div>
    <div class="row column-8 first-column m-top-30-desktop required">
      <label for="request-message"><strong>Your Message</strong></label>
      <textarea class="required" name="message" id="request-message" placeholder="Please include any additional information pertaining to your inquiry." required></textarea>
    </div>
    <div class="hidden">
      <label for="request-spam-check">Do not fill out this field:</label>
      <input name="spam-check" type="text" value="" id="request-spam-check" />
    </div>
    <div class="column-4 m-top-60 m-top-20-mobile">
      <input class="large strong btn btn-blue" type="submit" value="Submit">
    </div>
    <div class="column-4 textcenter last">
      <input class="large strong blue" type="reset" value="Reset">
    </div>
  </form>
  <span class="row"></span>
</div>

在 JavaScript 中,你写了这个:

var $form   = $('#contact-form')

但是你意识到#contact-form是一个div,而不是它里面的形式。

将其更改为:

var $form = $('#contact-form form:first')

这应该可以解决所有问题。