2013-04-17 3 views
0

나는 폼의 각 부분을 검증하는 함수를 사용하고있다. 이 특정 양식의 경우 전화 번호는 선택 항목입니다. 그래서 나는 다음과 같은 기능을 함께했다 :PHP 함수의 값을 올바르게 반환하지 않습니까?

if(isset($_POST['phone'])) { $phone = $_POST['phone']; } 

//Call phone validation function 
$phone = validPhone($phone); 
if (strlen($phone) == 0) { 
    $mistakes[] = 'Your phone number must contain only NUMERIC characters.'; 
} 

    function validPhone($phone) { 
     if ($phone != '') { 
      $phone = trim($phone); 
      if (!ctype_digit(str_replace(' ', '', $phone))) { 
       $phone = ''; 
      } else { 
       //accept phone entry and sanitize it 
       $phone = mysql_real_escape_string(stripslashes($phone)); 
      } 
     } else { 
      $phone = 'not specified'; 
     } 
     return $phone; 
    } 

내 문제는 $ 전화를 위해,이 비트를 뭔가를 입력하지 않는 경우이다 :

else { 
    $phone = 'not specified'; 
} 

아무것도 없기 때문에, 생략 될 것으로 보인다 데이터베이스에 입력됩니다.

다음은 적절한 데이터베이스 PHP입니다 : 아무것도 사용자가 입력되지 때마다 데이터베이스에 항목이 '지정되지 않은'것에 대한

//Insert Into Database 
$sql="INSERT INTO signups (phone) 
VALUES 
(''".$phone."')"; 

if (!mysql_query($sql)) { 
    die('Error: ' . mysql_error()); 
} 

내 의도입니다. 내가 뭔가 잘못하고 있니? 이 모든

더 중요한 것은, 당신이 테스트를 구동하고 조사해야 캐치 될 수 있도록

+2

함수에 전달하기 전에'$ phone' * 값을'trim()'해야합니다. –

+0

@ Simo389 first try 광고 전화 번호 항목이없는 경우 현재 상태에서 validPhone 함수가 매개 변수없이 실행되고 빈 매개 변수없이 실행되므로 validPhone 함수의 매개 변수에 기본값을 지정합니다. 따라서 함수의 $ phone 매개 변수에 기본값을 지정해야합니다 값입니다. 매개 변수로 함수에 값이 전달되지 않으면 값으로 미리 정의한 기본값을 사용합니다. 여기에 설명이 필요합니다. –

+0

어디에서이 기본값을 지정해야합니까? 분명히 양식을 제출 한 후에이 작업을 수행하면 양식이 제출 된 경우 양식에 제출 된 값이 '대체'됩니까? – Simo389

답변

0

느슨한 비교기 == 때문에 문제가 발생합니다.

$phone = null (값이 게시되지 않은 경우처럼) $phone == ''은 true로 평가됩니다. ''은 (는) null과 비슷합니다. 당신은 엄격한 비교 ===을 사용하지 않거나 empty()을 사용하는 것이 더 좋습니다. 입력 값을 살균을 포함하여 변수를 (초기화 할 때 응용 프로그램에 더 안전하지 않은 데이터를 전달하는 것은 의미가 없기 때문에 나는 개인적으로, 앞까지 이러한 모든 물건을 처리 여기에 내가 제안 할 수있는 것입니다 :. 또한

$phone = ''; 
if (!empty($_POST['phone'])) { 
    $phone = mysql_real_escape_string(stripslashes(trim($_POST['phone']))); 
} 

$phone = validPhone($phone); 
if ($phone === '') { 
    $mistakes[] = 'Your phone number must contain only NUMERIC characters.'; 
} 

function validPhone($phone) { 
    if ($phone === '') { 
     return 'not specified'; 
    } else if (!ctype_digit(str_replace(' ', '', $phone))) { 
     return ''; 
    } else { 
     return $phone; 
    } 
} 

당신이해야 코드에서 사용되지 않는 mysql_* 함수를 mysqli 또는 PDO 함수로 대체하는 방법을 찾으십시오. $phone에 '지정되지 않음'이라는 반환 값을 사용하면 해당 조건을 트리거하지 않으므로 $mistake을 채우려면 코드를 변경해야합니다.

+0

제안에 감사드립니다! @Mike Brant 내가 생각하는 유일한 문제는 전화 번호가 양식에서 선택 사항인데 반해 메소드에서 필요하거나 오류 메시지가 표시된다는 것입니다. – Simo389

+0

@ Simo389 오하이오. ''지정되지 않음 ''에 대한 사용법을 설명하는 선택 사항 인 경우. 나는 그 조건을 제거하기 위해 코드를 업데이트했다. –

+0

@ Simo389 저는 느슨한 비교를 사용하면 예상치 못한 결과가 발생할 수 있으므로 PHP에서 정확한 비교를 거의 항상 사용하는 것이 좋습니다. –

0

변경 if ($phone != '') {if (trim($phone) != '') {

+0

그냥 아직 행운을 추가했습니다. 나는 '$ phone = trim ($ phone);을 남겼다. 이것뿐 아니라 다음 줄에서도 제거해야합니까? – Simo389

+0

사실이 필요하지 않습니다. else { $ phone = 'not specified'; } – raidenace

+0

좋아, 내가 널 데려다 준다고 생각해. :-) – Simo389

관련 문제