Эффективная и эффективная проверка формы - PullRequest
1 голос
/ 01 февраля 2012

У меня есть рабочий пример формы здесь .Мне нужно использовать проверку формы Javascript of Jquery, чтобы убедиться, что пользователь ввел свои данные.До сих пор я пытался проверить значения, но, очевидно, это не сработало, потому что у входов и текстовой области уже есть значение по умолчанию, и поэтому пользователь может сразу отправлять, не заполняя ничего.

Любая помощьбудет очень признателен.

Заранее спасибо!

РЕДАКТИРОВАТЬ

Я использую этот php для отправки представленных данных на адрес электронной почты:

<?php
$name = $_POST['name'];
if ($name=="") {
$name="Nothing was returned for this part of the form.";
}
$email = $_POST['email'];
if ($email=="") {
$email="Nothing was returned for this part of the form.";
}
$subject = $_POST['subject'];
if ($subject=="") {
$subject="Nothing was returned for this part of the form.";
}
$comments = $_POST['comments'];
if ($comments=="") {
$comments="Nothing was returned for this part of the form.";
}
$theMessage7="<b>Results from the form at www.site.co.uk/contact.html</b><br /><br />" . "Name:&nbsp;" . $name . "<br />" . "Email:&nbsp;" . $email . "<br />" . "Subject:&nbsp;" . $subject . "<br />" . "Message:&nbsp;" . $comments . "<br />";
$theEmail7="mail@mail.com";
$theSubject7="New form submission";
$theHeaders7="MIME-Version: 1.0
Content-type: text/html; charset=iso-8859-1
From: form@bikeinc.co.uk
Subject: New form submission";
$theErrorFile7="www.site.co.uk/12345";
$theThanxFile7="received.html";
if (!(mail($theEmail7, stripslashes($theSubject7), stripslashes($theMessage7), stripslashes($theHeaders7)))) {
    header ( "Location: $theErrorFile7" );
        }else{
    header ( "Location: $theThanxFile7" );
}
?>

Ответы [ 2 ]

3 голосов
/ 03 февраля 2012

Эффективной формой проверки формы на стороне пользователя является использование плагина проверки jQuery , см. Примеры правильного использования.

Примечание: пользователь ВСЕГДА может отключить JavaScript или использовать своего рода бот для отправки недействительных не проверенных данных, поэтому вам всегда нужно написать правильную проверку на стороне сервера.

Каркасы часто обеспечивают эффективный способ проверки формы, например Zend_Validator.

Обычно готовят метод для вашего php-приложения, например:

public function validate() {
  if( !isset( $_POST['name'])){
    $this->field = 'name';
    $this->msg = 'Invalid user name';
    return false;
  }

  ...
  return true;
}

И использовать его в обоих скриптах отправки:

if( $form->validate()){
  send();
}

А в проверочном скрипте:

$data = array();
if( $form->validate()){
  $data['status'] = 'ok';
} else {
  $data['status'] = 'failure';
  $data['field'] = $form->field;
  $data['msg'] = $form->msg;
}
echo json_encode( $data);

Конец, чем используйте jquery и javascript для проверки формы "на лету":

<input type="text" name="name" value="" onchange="ajaxValidate();" />

function ajaxValidate(){
  // Call ajax to check script and put results
}

Если вы просто строите небольшой проект с одной формой или около того, вы можете реализовать несколько методов, таких как:

function is_post( $key); // Shorter than write isset( $_POST[ $key])
function get_post( $key, $defaultValue); // Shorter than isset( $_POST[ $key]) ? $_POST[ $key] : $default
function is_email(...); 
...

И проверка JQuery:

function validateForm() {
  $('.input').removeClass( 'error');
  var status = true;
  if( $('input[name=name]').val() == '')){
     $('input[name=name]').addClass( 'error');
     setMessage( 'Name cannot be empty');
     status = false;
  }

  ...

  return status;
}

<form onsubmit='return validateForm();' ...>
0 голосов
/ 03 февраля 2012

Вы можете попробовать использовать обязательный атрибут HTML5 ... однако это будет работать только с браузерами, которые его поддерживают. Например:

<label for="name">Name:</label>
<input type="text" name="name" required="required" id="name">

Это будет работать, только если вы используете тип документа HTML5.

Тогда для проверки PHP в экземпляре проверка HTML5 не была запущена из-за несовместимого браузера ... или если JavaScript не запускается из-за того, что он отключен / недоступен / не работает.

// check input
if (empty($_POST['name']))
{
    $errors['name'] = 'Please provide your name.';
}

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

<label for="name">Name:</label>
<input type="text" name="name" required="required" id="name">
<?php if (!empty($errors['name'])): ?><p class="error"><?php echo $errors['name']; ?></p><?php endif; ?>

Также ... не забудьте защитить себя от внедрения SQL, XSS и внедрения вредоносного кода, если это будет сохранено в базе данных или отображено другим пользователям.

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