2011-09-14 4 views
2

표 형식의 데이터가 포함 된 양식이 있고 각 행에 POST를 통해 POST를 통해 PHP 페이지에 전달되도록 동일한 이름의 확인란이 있습니다. 모든 것이 잘 작동하지만 페이지의 항목을 선택하지 않은 경우와 관련된 문제가 있습니다. 이는 특별한 방법으로 처리해야하는 특수한 경우이지만 가장 좋은 방법을 결정하는 방법을 파악하려고합니다. $_POST 배열이 완전히 비어있는 경우와 같이이 조건이 발생할 때를 알 수 있습니다.

빈 데이터 세트가 PHP의 페이지에 게시 된시기를 결정하는 데 도움이되는 전략은 무엇입니까?

답변

2

를 사용합니다. $_POST 배열이 비어 있으면 체크 된 체크 박스가 없습니다.

+0

맞습니다. 그렇다면 양식을 제출했는지 어떻게 알 수 있습니까? 케이스 A, 사용자가 방금 방문한 페이지와 사례 B를 구분해야합니다. 사용자가 데이터가 게시되지 않은 페이지로 다시 양식을 제출했습니다. –

+1

아, 그렇다면 요청이 POST인지 확인하는 방법을 알아 보려면이 링크를 확인하십시오. http://stackoverflow.com/questions/1538065/find-out-http-method-in-php. –

+0

완벽하면 여분의 데이터가 저장됩니다. –

4

이 작업은 몇 가지 방법으로 수행 할 수 있습니다.

//Method 1 
if($_POST) { 
//Do Stuff 
} 

//Method 2 
if(!empty($_POST)) { 
//Do Stuff 
} 

//Method 3 - For detecting if a form was submitted 
<input type="submit" name="submit" /> 
if(sizeof($_POST)>1) { 
//Do Stuff 
} 

값 2 인 경우 방법 2가 실패합니다. 걱정하지 않아도됩니다.

방법 3은 제출 단추에 이름을 지정하는 방식으로 이루어 지므로 아무 것도 선택하지 않으면 적어도 제출됩니다. 그런 다음 sizeof()이 1을 초과하는지 확인하여 항목이 확인되었는지 확인합니다.

DEMO :http://wecodesign.com/demos/stackoverflow-7424062.php

+0

필요한 경우, 당신은 콜백 함수를 사용할 수있는 모든 빈 값

//if html input submit button has NO name value if (sizeof($post)): //Do stuff endif; // OR if html input submit button HAS a name value if (sizeof($post) > 1): //Do stuff endif; 

필터 그것은 항상 경우에도 설정되지 않습니다이 POST 데이터가 없었습니까? 아니면 그것은 HTTP POST 대 HTTP GET 인 경우에 의존합니까? – Drizzt321

+2

$ _POST가 항상 설정됩니다. –

+0

@Ben 당신 말이 맞아요, 그 예제를 삭제했습니다. 두 가지 방법을 보여주는 데모 링크를 추가했습니다. –

5

난 당신이 당신의 자신의 질문에 대답 한 생각 empty 기능

if(empty($_POST)) { 
//do empty $_POST stuff here 
} 
+0

오른쪽 ... 페이지가 게시되지 않은 경우, 즉 누군가 링크를 통해 페이지에 직접 액세스 한 경우에도 true가 반환됩니다. –

+0

정확하지만 Paul Grime이 위에서 언급 한 것처럼 HTTP 방식을 찾는 방법입니다. 그러나 페이지가 여전히 POST되었을 수 있습니다. 누군가가 양식 데이터를 보내지 않았을 수 있습니다. – Drizzt321

+0

예, 누군가 폼 데이터없이 POST 한 것을 정확히 확인하려고합니다. $ _POST가 비어 있는지 확인하고 요청 메소드가 올바른 해결책으로 보입니다. –

0
if (!empty($_POST["field"])) { 
    // Field sent 
} else { 
    // Field empty 
} 
4

알려진 값으로 숨겨진 입력 필드를 페이지에 추가하십시오. 이 필드는 항상 POST 데이터와 함께 전달되므로 사용자가 직접 URL이 아닌 양식 제출을 통해 방문했음을 알 수 있습니다.

+0

아 물론, 추가 숨겨진 필드. 내가 생각하는'$ _SERVER [ 'REQUEST_METHOD']'해결책을 사용할 것이지만, 이것은 괜찮은 것입니다. 감사합니다. –

0

(count($_POST) == 0) //returns boolean

> = '진정한'값을 '게시'또는 양식을 게시 할 때 뜻

< 입력 유형 = '숨겨진'이름 =하지만 정보가 없습니다 - : 그것은 간단 등의 들어가셨습니까?

+0

양식이 게시되었지만 데이터가없는 경우 - 양식의 경우, 데이터가 없으면 모든 항목이 삭제되므로 게시 할 때 && 빈을 결정해야합니다. –

+0

사용자가 "전체"상자를 선택하도록 강요하는 것은 어떻습니까? 경우에 따라 상자를 확인하는 것을 잊을 수도 있습니다. 또는 적어도 모든 것을 삭제하고 OK라고 말하도록 강제하는지 묻는 모달 대화 상자를 팝업하십시오. – Drizzt321

+0

확인란을 사용하여 사용자가 무언가를 활성화/비활성화하도록 설정할 수 있습니다. 선택을 해제하면 비활성화로 설정됩니다. 이 경우 상자를 확인하도록 강요하는 것은 의미가 없습니다. –

2
<form> 
<input type="text" name="user" value="" /> 
<input type="submit" name="post" value="Save" /> 
</form> 

//php 
if (isset($_POST['post'])) 
{ 
    //code here 
} 
0

게시물 데이터는 양식을 제출할 때 사용할 수 있습니다.

if($_POST) 
{ 
    // Bar 
} 

// Foo 

양식이 Foo이 수행 될 제출하지 않을 경우 다음을 감안할 때.

양식이 제출되면 Bar이 수행되고 Foo이 수행됩니다. 주어진 다음의

: 양식이 Foo를 제출하지 않은 경우

if ($_POST) 
{ 
    // Bar 
} 
else 
{ 
    // Foo 
} 

을 수행 할 수 있습니다.

양식이 제출 된 경우 Bar이 수행됩니다.

다른 질문에 대해서는 비어 있거나 적절한 데이터를 확인하는 것이 기본적인 서버 측 양식 유효성 검사입니다.그것은 수 있습니다 특정 사례를 들어

if ($_POST) 
{ 
    $form_helper = new FormHelper(); 

    $form_helper->validate($_POST["email"], "email"); 
    $form_helper->validate($_POST["password"], "password"); 

    if (! $form_helper->notifications()) 
    { 
     // Bar 
    } 
} 

(그리고 라이브러리없이) : 당신이 라이브러리를 사용하는 경우 그만큼 간단 할 수

if ($_POST) 
{ 
    if (empty($_POST["checklist"]) 
    { 
     // Delete all entries. 
    } 
    else 
    { 
     // Do something else. 
    } 

    // Foo 
} 
+0

맞았지 만 앞에서 언급했듯이 데이터가 POST를 통해 제출되고 비어있는 경우를 처리해야합니다. 사용자가 단순히 양식 페이지를 방문하면 Foo 코드가 실행되지 않습니까? –

+0

@Paul : 게시물 데이터가 없으면 실행되지 않습니다. 비어있는 것처럼 나는 방금 당신을 보여 줬다.양식 데이터의 유효성을 검사해야합니다. –

+0

내가 오해가 있다고 생각 ... 사용자가 단순히 데이터를 게시하지 않고 페이지를 방문 할 때 푸의 코드가 실행되지 않는 방법에 대해 설명 바랍니다. –

0

이 확인됩니다 어떤 형태의 값을 입력 한 경우 - 기본 입력 값 = ''이라고 가정합니다.

$ post = array_filter ($ _ POST, 'strlen'); // 정확한 필터링이는 isset ($ _ POST)를 참조에

$post = array_filter($_POST,function ($k){ return $k != '' || $k != 'my default value' || *some other condition etc etc* ; }); 
관련 문제