2012-02-01 2 views
1

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

Любая помощь будет высоко оценена.

Заранее благодарен!

EDIT

Я использую этот 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="[email protected]"; 
$theSubject7="New form submission"; 
$theHeaders7="MIME-Version: 1.0 
Content-type: text/html; charset=iso-8859-1 
From: [email protected] 
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"); 
} 
?> 
+0

Не злоупотребляйте 'значение Подобным образом он создает серьезные проблемы с доступностью. Используйте правильный '

+0

Если вы используете подходящий класс проверки в своем серверном решении, вы можете создать для сервера необходимый javascript для проверки ваших входов. Таким образом, вы имеете дело только с обновлением требований к проверке один раз, а затем ваш сервер гарантирует недействительные данные и не позволяет браузеру пользователя помогать с проверкой перед отправкой формы. – deed02392

+0

см. Выше, я включил мой php – jacktheripper

ответ

3

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

Примечание: пользователь ALWAYS может отключить 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

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

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

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

Затем для проверки 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 и mallicious инъекции кода, если это будет сохранен в базе данных или отображается другим пользователям.

+0

Пожалуйста, пожалуйста, игнорируйте проверку Javascript. Это не верно. Единственное, что делает Javascript, это сделать ваш сайт интерактивным - более удобным для использования и т. Д. Чтобы внедрить правду, просто используйте детали из браузера и относитесь к ним с презрением. Вы не ошибетесь. –

Смежные вопросы