2012-01-07 2 views
0

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

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

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

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

<?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, чтобы отправить сообщение t extbox для скрипта .php для проверки. Для этого я использую JQuery сообщение:

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

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

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

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

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

Вы можете вызвать тот же файл с javascript..why не ..

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

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

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

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

Просто дайте кнопку отправить название позволяет говорить имя = «отправить»

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

Do как у делали раньше

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 s и обрабатывает только их, если они установлены ... И если нет, то он будет проверять, отправлена ​​ли форма, если все правильно, тогда она будет перенаправлена ​​без отображения формы, иначе просто отобразится erroes .. Если форма не отправлена или из-за ошибки, мы не перенаправлять он будет показывать форму ..

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

+0

Спасибо за ваши отзывы, я был подумал о методе, который вы описали, но причина для запроса вопроса заключалась в том, чтобы увидеть, была ли «лучшая практика» для этого типа сценария, а не для технического решения. Я думаю, все зависит от того, сколько вы хотите отделить клиентский код от серверной части. Я все еще в двух умах о том, как решить эту проблему, но на данный момент я решил, что код процесса формы должен оставаться таким, как есть, и отправлять события jQuery в отдельный .php-файл, который содержит функции validUserName и validPassword , – amer