2011-03-21 5 views
2

기본적으로 처리해야하는 몇 가지 큰 양식 (제출 된 많은 필드)이 있는데 매우 비슷하지만 하나 또는 두 개의 필드가 다를 수 있습니다. 먼저 모든 필드가 이스케이프되고 원래 이름의 변수에 할당됩니다 (따라서 $_POST['f_name']은 $ f_name). 그런 다음 데이터를 확인해야합니다. 특정 필수 입력란이 있어야하며 특정 필드가 많이 일치해야합니다 (비밀번호/이메일 확인). 특정 필드는 정규식 검사를 통과해야합니다. 긴 if/else 문을 통해이 작업을 수행합니다. 여기서 각 오류는 자체 오류 메시지입니다. 이제는 서툰 코드를 반복하지 않고 편집하고 유지 관리하기 쉬운 루핑 함수로 바꾸고 싶습니다.많은 필드가있는 처리

그러나이 문제는 특히 검사를 수행하고 개별 오류 메시지를 할당하는 데 약간의 문제가 있습니다.

그런 검증/오류보고 기능을 개발하는 방법에 대해 제안을 듣고 싶습니다.

$name = mysqli_real_escape_string($mysqli, $_POST['name']); 
$password = mysqli_real_escape_string($mysqli, $_POST['password']); 
$password_re = mysqli_real_escape_string($mysqli, $_POST['password_re']); 

if ($name == '') : 
$data = "Please enter name"; 
elseif ($password != $password_re) : 
$data = "Passwords don't match"; 
endif; 

답변

2

우선 내가 귀하의 게시물 배열을 청소하는 기능을 만들 것 : 여기

코드가 같은 모습의 짧은 버전입니다.

$clean_post = sanitize($_POST); 

function sanitize($input) { 
    if (is_array($input)) { 
     foreach($input as $var=>$val) { 
      $output[$var] = sanitize($val); 
     } 
    } 
    else { 
     if (get_magic_quotes_gpc()) { 
      $input = stripslashes($input); 
     } 
     $input = cleanInput($input); 
     $output = mysql_real_escape_string($input); 
    } 
    return $output; 
} 

다음 나는 개인적으로 내가 숟가락 내 양식 오류가 공급되는 것이 싫다는 $ 데이터 배열 내의 필드와 설정 오류 변수와 동일한 이름으로 된 div를 추가하고 그들 사이의 IFS를 제거합니다.

if ($name == '') 
$data['name'] = "Please enter name"; 

if ($password != $password_re) 
$data['password] = "Passwords don't match"; 

마지막으로 div의 내용을 $ data 배열 값으로 설정합니다. 무엇이든이 제출되기 전에

<div><?=$data[name];?></div> 
<input type="text" name="name" value="<?=$clean_post[name];?>"> 

<div><?=$data[password];?></div> 
<input type="password" name="password" value="<?=$clean_post[password];?>"> 
<input type="password" name="password_re" value="<?=$clean_post[password_re];?>"> 

희망이,

+0

PHP 짧은 태그를 사용하는 것은 결코 좋은 생각이 아닙니다. –

+0

나쁘지 않은데, sanitize 함수의 문제는 여전히 모든 단일 POST를 같은 이름의 var에 할당해야한다는 것입니다. 여전히 그것을 피하는 방법을 찾으려고합니다. –

+0

@nick rulez : 짧은 태그는보기에서 사용할 때 가독성을 크게 높여 주며, 유일한 문제는 이식성을 줄이는 것입니다. 이식성은 서버를 제어 할 때 문제가되지 않습니다. – notJim

-1

내가이 자바 스크립트 폼 검사기를 사용하여 클라이언트 측에서이 작업을 수행하는 것이 더 말하고 싶지만 할 수 있습니다. javascript 양식 유효성 검사를 검색하십시오. 페이지로드를 줄여 사용자에게 제출하기 전에 오류를 수정하도록합니다.

<form name="myForm" action="demo_form.asp" onsubmit="return validateForm()" method="post"> 
First name: <input type="text" name="fname"> 
<input type="submit" value="Submit"> 
</form> 

<script language="javascript"> 
function validateForm() 
{ 
var x=document.forms["myForm"]["fname"].value 
if (x==null || x=="") 
    { 
    alert("First name must be filled out"); 
    return false; 
    } 
} 
</script> 
+0

무시할 수 있기 때문에 클라이언트 측 유효성 검사에 의존 할 수 없습니다. 서버 측의 유효성을 확인해야한다는 사실 때문에 문제는 단지 효율성 문제 일뿐입니다. –

1

나는 일이 개 문제에 대한 접근 방식을 절단 및 건조가 있다는 것을 확실하지 않다 : 여기에 "자바 스크립트 양식 유효성 검사"에 대한 최초의 구글 히트에서 촬영 한 가지 방법의 간단한 예제입니다. 우리 회사가이 문제를 어떻게 처리했는지를 다음과 같이 설명합니다.

1) 전면 검증. 예, 무시할 수 있습니다. 그러나 첫 번째 방어선으로 만 사용하는 경우 훌륭한 솔루션입니다 (국제 은행 그룹을 비롯한 가장 큰 고객 중 일부는 받아 들일 수 있음). 기본적으로 필드 당 몇 가지 추가 문자이기 때문에 Cedric Dugas' inline validation script의 단순함을 좋아합니다. . 인라인 검증에 대한 또 하나의 큰 이점은 개별 요소에 대한 CSS를 통한 간단한 경고 트리거와 함께 서버 측 유효성 검증 오류에 대해 하나의 중앙 집중식 경고 영역을 사용할 수 있으며 대다수는 인라인으로 잡히고 훨씬 더 사용자 친화적임을 경고합니다 .

2) "stuff"를 처리하는 클래스 "garbage in, garbage out"이라고합니다. 게시물 데이터의 배열을 취하고, 요소 이름에 따라 필드를 설정하고 그에 따라 처리합니다. 유효성 검사와 관련된 문제는 유효성 검사를위한 제네릭 형식 데이터가 없으면 서둘러 코드를 작성하는 많은 세부 사항에 들어갈 수 있다는 것입니다. 또한 필드 이름이 그에 맞게 정렬되어야하기 때문에 실제로 프런트 엔드에서 MORE 작업을해야 할 수도 있습니다.우리의 경우, 표준화 된 필드 이름 지정에 대한 필요성을 항상 인식하지 못하는 고객으로부터의 외부 웹폼 응답을 처리하며, 이는 두통이 될 수 있습니다.

3) "청킹"섹션. 거대한 형태의 시나리오에서 Ajax를 통해 단계별로 "청킹 (chunking)"방식을 사용하여 한 번의 큰 제출에서 서버 손상을 최소화했습니다. 따라서 사용자가 프로필 정보를 업데이트하고 제출합니다. 사용자가 백그라운드 정보 섹션을 수행하고 업데이트가 발생합니다 ... 등. 모든 상황에 적합하지는 않지만 제대로 작동 할 수있는 제품이 있습니다. 시작부터 끝까지 진행하면서 점진적으로 검증 할 수 있습니다. 그래도 각 개별 질문에 대해이 접근 방식을 권장하지는 않습니다.

4) "강제 위생"이 악의적 인가요? 우편 번호, 주소 등의 경우 클라이언트 정보를 간단히 수정할 수 있습니다. 누락 된 우편 번호를 짖기보다는 자동으로 가져 와서 100 % 수정하십시오. 그것이 Google과 USPS의 아름다움입니다. 평균적인 사용자보다 더 자유롭고 똑똑합니다.

+0

감사합니다. 매우 통찰력이 있습니다. –

관련 문제