2012-01-07 3 views
0

PHP로 처리해야하는 양식을 개발할 때 양식과 PHP를 하나의 파일에 넣는 경향이 있습니다. signup.php를 사용하고 $ _GET 메소드를 사용하여 양식으로 수행해야 할 작업을 파악하십시오.jQuery/Ajax 및 PHP 양식 처리 설계

예를 들어 /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 스크립트에 extbox하십시오. 내가 jQuery를 포스트 사용하고 그렇게하려면, 파일 jquerysignup.php이

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'); 
    } // 
} 

만 PHP 함수 validUserName 및 validEmail이 포함되어 있습니다.

두 개의 .php 파일이있는 위치에 있는데, 하나는 서버 측 유효성 검사를위한 것이고, 다른 하나는 클라이언트 측 유효성 검사를위한 것입니다. 클라이언트 측 및 서버 측 유효성 검사를 모두 유지하려고하지만 중복 기능을 포함하는 여러 파일을 보관하고 싶지는 않습니다.

나는 통합 솔루션을 찾아 내거나 고민하고 있으며 더 좋은 방법이 있어야한다는 것을 알고 있지만이 특정 문제를 다루기위한 예제는 찾을 수 없습니다.

나는 이것을 위해 모범 사례/해결책에 대한 몇 가지 지침을 정말 고맙게 생각한다. 해커가 항상 자신의 브라우저의 속성으로 그것을 조작 할 수 있기 때문에

답변

1

나는 서버 측 작업이 필요

유일한 검증 고유성 검증은 ..., comapletely 자바 스크립트 유효성 검사에 의존하지 않는 당신의 결정에 동의 .. .And 그것을 위해 당신은

는 동일한 파일에 ..

무엇 아약스 요청을 할 것입니다

데이터와 서버 스크립트와 데이터베이스 검사에서 확인 후 해당 스크립트에 요청을 전송하지 왜 .. Ajax를 사용하고 있어야합니다 답장을 보내주세요.

당신은 ..

그냥 당신이 jQuery를 사용하여 사용자 자격 증명을 확인하고 그가 양식을 제출 이제

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

를 설정 .. javascript..why하지에서 같은 파일을 호출 할 수 있습니다

그런 다음 사용자가 동일한 페이지로 이동하도록하십시오.u는 이전

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 스크립트를 검사합니다. 그리고 그들이 설정되어있는 경우에만 그들을 procees ... 그리고 그때 그것은 그것이 양식이 제출됩니다, 모든 것이 맞다면 그것은 형태를 보여주지 않고 리다이렉트 할 것입니다. 단지 오류를 표시합니다. 양식이 제출되지 않은 경우 또는 오류로 인해 우리는 당신이 태그에 동일한 페이지에 넣을 수 있습니다 JQuery와 유효성 검사 스크립트의

한 가지 더 휴식 .. 의견을

+0

감사합니다, 내가 가진 ..이 양식이 표시됩니다 리디렉션하지 않았다 당신이 묘사 한 방법에 대해 생각해 보았습니다.하지만 질문을하는 이유는 기술적 인 해결책보다는이 유형의 시나리오에 '가장 좋은 관행'이 있는지를 보는 것이 었습니다. 나는 모든 것이 서버 측에서 클라이언트 측 코드를 분리하고 싶은지에 달려 있다고 생각한다. 이 문제를 해결하는 방법에 대해서는 아직 두 가지 생각이 있지만 양식 처리 코드를 그대로두고 jQuery 이벤트를 validUserName 및 validPassword 함수가 포함 된 별도의 .php 파일에 게시하도록 결정했습니다. . – amer