2015-01-16 3 views
0

나는 아래의 html 양식을 가지고 php 파일 (workcard_done.php)에 제출합니다. 내 문제는 코드를 제출할 때입니다. else echo "nothing here"; isset에서 not (!) 연산자를 설정하면 원하는 결과를 얻을 수 있습니까? 그것은 if(isset($_POST['submit']) && !empty($_POST['submit']))와 함께 잘 작동합니다.

누구나 저를 미치게 만드는 아래 코드를 잘못 설명 할 수 있습니까?

<!DOCTYPE html> 
<HTML> 
<head> 
<title>yoyo</title> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
</head> 
<body> 
<form action="workcard_done.php" name="workCard_open" method="POST"> 
<br> 
<table> 
<tr> 
<th>title 1</th> 
<th>title 2</th> 
</tr> 
<tr> 
<td><input type="text" name="name[]" value="" ></td> 
<td><input type="text" name="price[]" value="" class="matr_price"/></td> 
</tr> 
<tr> 
<td><input type="text" name="name[]" value="" ></td> 
<td><input type="text" name="price[]" value="" class="matr_price"/></td> 
</tr> 
<tr> 
<td>Total incl. VAT:</td> 
<td><span type="text" name"sum[]" id="sum">0</span></td> 
</tr> 
</table> 
<input type="submit" name"submit" class="submit" value="Done"/> 
</form> 
</body> 
</html> 

workcard_done.php

<!DOCTYPE html> 
<html> 
<head> 
<title>title...</title> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
<link rel="stylesheet" type="text/css" href="style.css"> 
</head> 
<body> 
<pre> 
<?php 
error_reporting(E_ALL); 
if(isset($_POST['submit']) && !empty($_POST['submit'])) { 
    $name = $_POST['name']; 
    $price = $_POST['price']; 
    $user = $_POST['user']; 

    print_r($name); 
    echo "<br>"; 
    print_r($price); 
    echo "<br>"; 
    print_r($user); 
    echo "<br>"; 
} 
else { 
    echo "nothing here"; 
} 
?> 
</pre> 
</body> 
</html> 

는 isset에없는 (!) 연산자를 설정하면, 나는 아래 결과를 원 얻는다.

Array 
(
    [0] => slange 
    [1] => rfd 
) 
Array 
(
    [0] => 123 
    [1] => 200 
) 
Array 
(
    [user] => 2 
) 
+0

'! isset ($ _ POST [ 'submit']) &&! empty ($ _ POST [ 'submit'])'은 항상 FALSE로 평가됩니다. '$ _POST [ 'submit']'이 설정되어 있지 않으면 빈 상태가되고'! empty()'는 FALSE로 평가됩니다. 설정되면'! isset()'은 FALSE로 평가됩니다. 각 식에서 완전한 식은'거짓 '입니다. – axiac

답변

4

는 당신은 =

+0

좋은 캐치 메이트. – Daan

+0

... 죄송합니다. @JimboSlice 내 잘못, 네 말이 맞아. 모든 것이 지금 작동합니다. 고맙습니다. – Nomis

+0

좋은 행운을 빕니다! – JimboSlice

0

<input type="submit" name"submit"에 체크를 HTML의 줄을 놓친 :

<input type="submit" name"submit" class="submit" value="Done"/> 

는 그 이유 isset($_POST['submit']) == FALSE있어, 버튼에 이름이 없습니다 제출합니다. 속한 등호 (=)를 추가하면 갑자기 문제가 사라집니다.

+0

브라우저에서받은 스크립트를 보려면'print_r ($ _ POST);'를 사용하십시오. – axiac

+0

... 죄송합니다 @axiac 내 잘못, 당신 말이 맞아. 모든 것이 지금 작동합니다. 고맙습니다. – Nomis

0

$ _POST [ '제출']이 아니라 $ _POST를 확인하십시오.

사용자가 Enter 키를 누르면 어떻게됩니까? 제출 버튼은 절대 실행되지 않으며이 값은 존재하지 않습니다.

그런데 CRSF 토큰을 잊지 마세요.

+1

'$ _POST'를 검사하는 것은 항상 빈 필드가 길이가 0 인 문자열을 반환하기 때문에 항상 유효합니다. – Neat

+0

isset ($ _ POST) => 예, 항상 true ! empty ($ _ POST) => 채우는. 이렇게하면 제출 단추를 확인하는 것보다 위의 방법을 사용하는 것이 좋습니다. – Blaatpraat

+0

텍스트 나 패스워드 필드에서 사용자가 'Enter'키를 누르면 폼이 전송되고 비활성화되어 있지 않으면'submit' 버튼의 값도 전송됩니다. 양식에 둘 이상의 '제출'버튼이 포함되어 있으면 비활성화되지 않은 첫 번째 항목이 전송됩니다. – axiac

0

다른 답변 상태로 =을 잊어 버렸지 만 $_POST['user']에 액세스하려고 시도했지만 입력 필드 중 어느 것도 이름이 user이 아닙니다.

관련 문제