JQuery / Ajax & PHP дизайн обработки форм - PullRequest
0 голосов
/ 07 января 2012

Когда я разрабатываю формы, требующие обработки на PHP, я склоняюсь к тому, чтобы поместить форму и PHP в один файл, например, signup.php и использовать метод $ _GET, чтобы выяснить, что мне нужно делать с формой.

Например, если запрошен /site/signup.php, то я знаю, что мне нужно отобразить HTML-форму, но если запрошен /site/signup.php?action=newsignup (отправка html-формы), то я знаю, чтомне нужно обработать его.

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

Грубый пример того, что я хотел бы сделать:

<?php

if (isset($_GET['action'] && $_GET['action'] == "newsignup")
{

   $name = cleanInput($_POST['name'];
   $email = cleanInput($_POST['email'];


   if(validUserName($name)== TRUE)
   {
      // do processing here

   } else {

      // fail processing here
   }

   if(validEmail($email)== TRUE)
   {
      // do processing here

   } else {

      // fail processing here
   }

   // Do database stuff etc

   // Display success message 

} else {

  // Not $_GET so must be a new sign-up. Display html form


    <form id="signup" action="signup.php?action=newsignup" method="post">
       <input type="text" name="name" id="name" />
       <input type="text" name="email" id="email" />
       <input type="submit" id="submit" value="Submit" />
    </form>

}

Теперь я начинаю использовать jQuery / Ajax для проверки на стороне клиентачтобы дать отзыв, пока пользователь заполняет форму, когда данные вводятся в текстовое поле в форме, данные проверяются в реальном времени, используя событие keyup для публикации этого текстаполе для сценария .php для проверки.Для этого я использую jQuery Post:

function name_check(){  

var username = $('name').val();

    if(name == "" || name.length < 4){

        $('#name').css('border', '3px #CCC solid');
        $('#text').text('');

    }else{

            $.post('jquerysignup.php', { name: $('#name').val()}, function(response) {
                $('#phpout').html(response['message']); // return an error string if exists

                if(response['returnval'] == 0){
                    $('#name').css('border', '3px green solid');
                    $('#submit').fadeIn('slow')

                } else if (response['returnval'] == 2){
                    $('#name').css('border', '3px red solid');
                    $('#submit').fadeOut('slow')
                } else {
                    $('#name').css('border', '3px red solid');
                    $('#submit').fadeOut('slow')      
                }

            }, 'json');
    } //
}

Файл jquerysignup.php содержит только функции PHP validUserName и validEmail.

Сейчас я нахожусь в положении, где есть два файла .php, один для проверки на стороне сервера и теперь один для стороны клиента.Я хочу сохранить проверку как на стороне клиента, так и на стороне сервера, но я не хочу, чтобы несколько файлов содержали дублирующиеся функции.

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

Я был бы очень признателен за некоторые рекомендации в передовой практике / решение этой проблемы.

1 Ответ

1 голос
/ 07 января 2012

Я согласен с вашим решением не полагаться на валидацию javascript, потому что хакер всегда может манипулировать этим как свойством своего браузера ...

Единственная проверка, которая требует работы на стороне сервера, это проверка уникальности ... И для этого вы должны использовать Ajax ..

Почему бы не в том же файле ..

то, что будет делать ajax-запрос, это отправлять запрос на сервер-скрипт с данными, и этот скрипт после проверки из базы данных проверяет ответ на ваш результат.

Вы можете вызвать тот же файл из JavaScript .. почему бы и нет ..

Просто установите

if(isset($_POST['ajax_variable_name']))
{
    your validation logic goes here and echo corresponding result..
}

Теперь, когда вы проверили учетные данные своих пользователей с помощью jquery, и он отправил форму ..

Затем также разрешите пользователю перейти на ту же страницу ..

Просто дайте вашей кнопке отправки имя, скажем name = "submit"

И в верхней части этой этой страницы

Делай, как ты делал раньше

if(isset($_PoST['submit']))
{
if correct validation make changes in database and redirect him to success page...
}

Еще раз:

if( check if ajax request is made here)
{
---echo result... 
}
else
{
--whole page--
First form submit check if success then redirect

Then normal form
}

Таким образом, он будет проверять ваши jquery-скрипты и обрабатывать только их, если они установлены ... И если нет, то он будет проверять, отправлена ​​ли форма, если все правильно, то он будет перенаправлять без отображения формы, иначе просто отображать ошибки. Если форма не отправлена ​​или из-за ошибки, которую мы не перенаправили, она покажет форму ..

Еще одна вещь, остальная часть скрипта проверки jquery, которую вы можете поместить на той же странице в тегах.

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