2014-09-07 1 views
0

post 방법의 html 양식을 사용하여 이전 페이지의 4 개 필드가 있습니다. 각 필드의 strlens이 200보다 낮은 지 확인하려면 제외하고 모두 잘 작동합니다. 다음 코드는 항상 길이가 200보다 길어도 너무 길다는 것을 말합니다.여러 문자열의 PHP Strlen 확인

PHP :

$hsname = trim($_POST['hsname']); 
$hsstate = trim($_POST['hsstate']); 
$hsemail = trim($_POST['hsemail']); 
$hspassword = trim($_POST['hspassword']); 

if (strlen($hsname) || strlen($hsstate) || strlen($hsemail) || strlen($hspassword) > 200){ 

die("Each field can only contain 200 characters"); //this is always returned even though the fields are below 200. 
} 
else { 
echo "fields have good characters"; 
} 
+1

당신은 http://php.net/manual/en/language.operators.precedence.php – CBroe

답변

1

내가 번역 할이 시도 귀하의 조건 경우 : 같은

if (strlen($hsname) || strlen($hsstate) || strlen($hsemail) || strlen($hspassword) > 200) 

그것은`지금 잘못 그것은`왜 그렇게

if(strlen($hasname)!='' || strlen($hsstate)!='' || strlen($hsemail)!='' || strlen($hspassword) > 200) 

당신은 알아야한다 비교) 모든 strlen 또는보십시오 :

$maximumValue = max(strlen($hsname), strlen($hsstate), strlen($hsemail), strlen($hspassword)); 
// You got maximum value now, so: 
if($maximumValue > 200){} 

또는 더 빨리 : 당신이 0보다 문자 이있는 경우

strlen($hsname) 

그것은이 처음 3 개 문자열에 대한 동일하다 만약 조건을 만족 평가할 때, 일을 못해

if(strlen($hsname.$hsstate.$hsemail.$hspassword)/4>200){} 
+2

을 읽어야합니다. 실제로'(bool) strlen ($ var)'입니다. 이것은'strlen ($ var) ! = 0'. 그 외에도 '최소'는 '최대'여야합니다. – Gumbo

+0

True, use max;) 코드가 업데이트되었습니다. – Daimos

0

마지막 조건의 길이가 200보다 큰지 여부 만 확인하기 때문에 조건이 항상 true를 반환하는 이유는 다른 문자열의 길이가 0보다 큰지 여부가 확인되므로 조건은 "처음 4 개의 문자열 중 하나가 0보다 크거나 마지막 문자열이 200보다 큰 경우"를 읽습니다. 대신

foreach(array($hsname,$hsstate,$hsemail,$hspassword) as $string) { 
    if(strlen($string) > 200) { 
     die("Each field can only contain 200 characters"); 
    } 
} 
0

당신

,536,913 : 당신은 [당신이 게시물에 실제 값을 전달된다고 가정] 비교하려는 문자열의 각각에 대해 '> (200)'이 필요

에 대해 확인

$hsname = 'test'; 
$hsstate = 'test'; 
$hsemail = 'test'; 
$hspassword = 'test'; 

if (strlen($hsname) > 200 || strlen($hsstate) > 200 || strlen($hsemail) > 200 || strlen($hspassword) > 200){ 
    die("Each field can only contain 200 characters"); //this is always returned even though the fields are below 200. 
} else { 
    echo "fields have good characters"; 
} 
+0

이 코드를 시도했지만 제대로 작동하지 않습니다. 왜 – user176105

+0

대신 _POST에서 테스트 데이터로 시도해 볼 수없는 것 같습니다 - 원래 코드를 복사/붙여 넣기하고 '> 200' – Jonathan

0

필드가 실제로 있는지 확인하고 다음에 길이를 확인하십시오. 그 일의

한 가지 방법 :

$fields = array('hsname', 'hsstate', 'hsemail', 'hspassword'); 

foreach ($fields as $field) { 
    if (!array_key_exists($field, $_POST)) { 
     die("Field {$field} is missing"); 
    } 
    // Declare a variable whose name is in $field. 
    ${$field} = trim($_POST[$field]); 
    if (strlen(${$field}) > 200) { 
     die("Field {$field} must be less or equal to 200 characters"); 
    } 
} 

당신이 국제 문자 지원이있는 경우, 당신은 또한 데이터베이스 필드 길이에 대한 효과적인 문자열 길이를 확인 할 수 있습니다; 단일 UTF8 "문자"는 둘 이상의 데이터베이스 필드 "문자"일 수 있습니다. mb_ * 함수는 utf8 인코딩 및 디코딩 기능뿐만 아니라 여러분을 도울 수 있습니다.