Как установить слепое поле ввода для проверки формы?

0

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

<?php

// Set email variables
$email_to = '[email protected]';
$email_subject = 'Website Message';

// Set required fields
$required_fields = array('fullname','email','comment');

$fakes = array('Email1');

// set error messages
$error_messages = array(
    'fullname' => 'Please enter a Name to proceed.',
    'email' => 'Please enter a valid Email Address to continue.',
    'comment' => 'Please enter your Message to continue.'
);

// Set form status
$form_complete = FALSE;

// configure validation array
$validation = array();

// check form submittal
if(!empty($_POST)) {

    // Sanitise POST array
    foreach($_POST as $key => $value) $_POST[$key] = remove_email_injection(trim($value));

    foreach($fakes as $fake) 
        if($fake == 'Email1') if(!check_for_content($_POST[$fake])) die;
        else {

    // Loop into required fields and make sure they match our needs
    foreach($required_fields as $field) {       
        // the field has been submitted?
        if(!array_key_exists($field, $_POST)) array_push($validation, $field);

        // check there is information in the field?
        if($_POST[$field] == '') array_push($validation, $field);

        // validate the email address supplied
        if($field == 'email') if(!validate_email_address($_POST[$field])) array_push($validation, $field);
    }

    // basic validation result
    if(count($validation) == 0) {
        // Prepare our content string
        $email_content = 'New Website Comment: ' . "\n\n";

        // simple email content
        foreach($_POST as $key => $value) {
            if($key != 'submit') $email_content .= $key . ': ' . $value . "\n";
        }

        // if validation passed ok then send the email
        mail($email_to, $email_subject, $email_content);

        // Update form switch
        $form_complete = TRUE;
    }
}
}
function validate_email_address($email = FALSE) {
    return (preg_match('/^[^@\s]+@([-a-z0-9]+\.)+[a-z]{2,}$/i', $email))? TRUE : FALSE;
}

function remove_email_injection($field = FALSE) {
   return (str_ireplace(array("\r", "\n", "%0a", "%0d", "Content-Type:", "bcc:","to:","cc:"), '', $field));
}

function check_for_content($fake = FALSE) {
    return (preg_match('[A-Z0-9._%+-]', $Email1))? TRUE : FALSE;
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>

    <!-- Contact Form Designed by James Brand @ dreamweavertutorial.co.uk -->
    <!-- Covered under creative commons license - http://dreamweavertutorial.co.uk/permissions/contact-form-permissions.htm -->

    <title>Contact Form</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/mootools/1.3.0/mootools-yui-compressed.js"></script>
    <script type="text/javascript" src="validation/validation.js"></script>
    <script type="text/javascript">
        var nameError = '<?php echo $error_messages['fullname']; ?>';
        var emailError = '<?php echo $error_messages['email']; ?>';
        var commentError = '<?php echo $error_messages['comment']; ?>';
    </script>
    </head>

    <body>
<div id="Contactus">
      <p>Chisel Multimedia</p>
      <p>275 Roswell Street NE <br />
    Marietta GA 30060</p>
    </div>
<br />
<div id="formWrap">
      <div id="form">
    <?php if($form_complete === FALSE): ?>
    <form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="post" id="comments_form">
        <div id="label1" 865style="display:none">
        <div class="row">
        <div class="label">Email</div>
        <!-- end .label -->
        <div class="input">
              <input type="text" id="Email1" class="detail" name="Emial1"  />
            </div>
        <!-- end .input -->
        <div class="context">e.g. John Smith or Jane Doe</div>
        <!-- end .context--> 
      </div>
          <!-- end .row -->
          </div>


        <div class="row">
        <div class="label">Your Name</div>
        <!-- end .label -->
        <div class="input">
              <input type="text" id="fullname" class="detail" name="fullname" value="<?php echo isset($_POST['fullname'])? $_POST['fullname'] : ''; ?>" />
              <?php if(in_array('fullname', $validation)): ?>
              <span class="error"><?php echo $error_messages['fullname']; ?></span>
              <?php endif; ?>
            </div>
        <!-- end .input -->
        <div class="context">e.g. John Smith or Jane Doe</div>
        <!-- end .context--> 
      </div>
          <!-- end .row -->

          <div class="row">
        <div vlass="label">Your Email Address</div>
        <!-- end .lable -->
        <div class="input">
              <input type="text" id="email" class="detail" name="email" value="<?php echo isset($_POST['email'])? $_POST['email'] : ''; ?>" />
              <?php if(in_array('email', $validation)): ?>
              <span class="error"><?php echo $error_messages['email']; ?></span>
              <?php endif; ?>
            </div>
        <!-- end .input -->
        <div class="context">[email protected]</div>
        <!-- end .context--> 
      </div>
          <!-- end .row -->

          <div class="row">
        <div vlass="label">Your Message</div>
        <!-- end .lable -->
        <div class="input">
              <textarea id="comment" name="comment" class="mess"><?php echo isset($_POST['comment'])? $_POST['comment'] : ''; ?></textarea>
              <?php if(in_array('comment', $validation)): ?>
              <span class="error"><?php echo $error_messages['comment']; ?></span>
              <?php endif; ?>
            </div>
        <!-- end .input --> 
      </div>
          <!-- end .row -->

          <div class="submit">
        <input type="submit" id="submit" name="submit" value="Send Message" />
      </div>
          <!-- end submit -->
        </form>
    <?php else: ?>
    <p style="font-size: 10px; color: #255e67;     width: 65%;">Thank you for your Message!</p>
    <?php endif; ?>
  </div>
      <!-- end form --> 
    </div>
<!-- end formWrap -->

</body>
</html>
  • 0
    Под «слепым» вы подразумеваете «скрытый»?
  • 0
    да извини я имею ввиду скрытый
Показать ещё 5 комментариев
Теги:
validation
forms

1 ответ

0
Лучший ответ

У вас много ошибок в коде, что мешает вам получать правильные результаты

<input type="text" id="Email1" class="detail" name="Emial1"  />

Обратите внимание, что name="Emial1", но в php-коде вы проверяете 'Email1'. Исправьте один из них. Следующий фрагмент:

        function check_for_content($fake = FALSE) {
            return (preg_match('[A-Z0-9._%+-]', $Email1))? TRUE : FALSE;
        }

Использование переменной $ Email1 просто неуместно. Выражение выражений - это отсутствие границ. По крайней мере, это должно быть

        function check_for_content($fake = FALSE) {
            return (preg_match('/[A-Z0-9._%+-]/i', $fake))? TRUE : FALSE;
        }

И когда вы называете эту функцию, почему не условие?

if($fake == 'Email1') if(!check_for_content($_POST[$fake])) die();

Я думаю, это должно быть наоборот.

Во всяком случае, лично я просто буду использовать что-то вроде этого:

foreach($fakes as $fake)
    if(!empty($_POST[$fake])) { die();} 
// dont need 'else'

Также при отладке вашего php-кода убедитесь, что вы включили ошибки, это действительно помогает

error_reporting(0);
ini_set('display_errors', 0);
  • 0
    Есть ли какие-либо другие предложения, которые вы должны помешать спам-битам пытаться войти, потому что теперь он работает правильно, но спам-биты все еще проходят
  • 0
    Вы уже реализовали хорошее решение, и я не знаю лучшего. Но попробуйте назвать поле электронной почты не «email», а просто, например, «field1» - его функциональность не зависит от имени поля, и ваша форма будет иметь только один «email».
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню