2014-02-08 2 views
0

기본 콘텐트 관리 시스템을 만들고 있는데 양식에 입력되는 데이터의 유효성 확인에 박차를 가하고 있습니다.PHP 양식 데이터 유효성 확인 문제

예를 들어 하나의 양식은 탐색 메뉴에있는 제목의 이름을 편집하는 것입니다. 양식에는 몇 가지 데이터 조각이 있지만 주요 초점은 "menu_name"필드 (제목 이름)입니다.

"menu_name"의 양식 제출 데이터가 비어 있지 않은지 확인하고 오류가있는 경우 데이터를 제출해야합니다. 무슨 일이 일어나고있는 건 스크립트가 제목 이름을 계속 편집하는 것처럼 입력하지 않으면 양식 유효성 검사가 작동하지 않는 것 같습니다.이 경우 공백으로 만듭니다.

데이터는 당신이 볼 수있는 두 개의 사용자 정의 유효성 검사 기능으로 선택되어
if (isset($_POST['submit'])) 
{ 
    // Process the form 

    // Validations 
    $required_fields = array("menu_name", "position", "visible"); 
    validate_presences($required_fields); 

    $fields_with_max_lengths = array("menu_name" => 30); 
    validate_max_lengths($fields_with_max_lengths); 

    // If errors occured, redirect 
    if(empty($errors)) 
    { 
     // Perform update 

     // Assign POST data to variables 
     $id = $current_subject["id"]; 
     $menu_name = mysql_prep($_POST["menu_name"]); 
     $position = (int) $_POST["position"]; 
     $visible = (int) $_POST["visible"]; 

     // 2. Perform database query 
     $query = "UPDATE subjects SET "; 
     $query .= "menu_name = '{$menu_name}', "; 
     $query .= "position = '{$position}', "; 
     $query .= "visible = '{$visible}' "; 
     $query .= "WHERE id = {$id} "; 
     $query .= "LIMIT 1"; 
     $result = mysqli_query($connection, $query); 

     if ($result && mysqli_affected_rows($connection) >= 0) 
     { 
      // Success 
      $_SESSION["message"] = "Subject updated."; 
      redirect_to("manage_content.php"); 
     } 
      else 
     { 
      // Failure 
      $message = "Subject update failed."; 
     } 
    } 

} 

, 두 번째는 내 관심사하지만 첫 번째 기능 validate_presences (되지 않습니다 :

은 양식 제출에 실행되는 스크립트입니다), 여기에 기능입니다 :

function validate_presences($requried_fields) 
{ 
    GLOBAL $errors; 

    foreach($required_fields as $field) 
    { 
     $value = trim($_POST[$field]); 
     if (!has_presence($value)) 
     { 
      $errors[$field] = fieldname_as_text($field) . " can't be blank"; 
     } 
    } 
} 
당신은 그것을 인 has_presence() 함수를 참조하는이 볼 수

:

function has_presence($value) 
{ 
    return isset($value) && $value !== ""; 
} 

누군가가 무엇이 잘못 되었습니까에 대한 아이디어가 있으면 도움을 주시면 감사하겠습니다. 자세한 정보가 필요한지 물어보십시오. 미리 감사드립니다.

+0

유효성 검사 함수를 호출하기 전에'$ errors' 변수를 정의 했습니까? – Pierre

+0

$ errors = array(); 유효성 검증 기능 페이지의 시작 부분에 정의됩니다. – Rubixryan

+0

다음을 시도하십시오 return isset ($ value) &&! empty ($ value); has_presence 함수에서 – Pierre

답변

0

전역으로 설정하지 않고 오류 배열을 반환하는 이유는 무엇입니까? 문제가 즉시 해결 될 것이라고 생각합니다.)

function validate_presences($requried_fields) 
{ 
    $errors = array(); 

    foreach($required_fields as $field) 
    { 
     $value = trim($_POST[$field]); 
     if (!has_presence($value)) 
     { 
      $errors[$field] = fieldname_as_text($field) . " can't be blank"; 
     } 
    } 
    return $errors; 
} 

이제 $errors = validate_presences($required_fields);을 설정하고 준비하십시오.

+0

$ errors = array(); 유효성 검증 기능 페이지의 맨 위에 정의되어 있습니다. 또한 다른 페이지와 함수가 동일한 배열을 사용합니다. – Rubixryan

0

변수를 전역 적으로 사용하는 것은 좋지 않습니다. 오히려 유효성 확인 함수에 대한 참조로 errors 변수를 전달하십시오.

$errors = array(); 

function validate_presences($requried_fields, &$errors) 
{ 
    foreach($required_fields as $field) 
    { 
     $value = trim($_POST[$field]); 
     if (!has_presence($value)) 
     { 
      $errors[$field] = fieldname_as_text($field) . " can't be blank"; 
     } 
    } 
} 

$required_fields = array("menu_name", "position", "visible"); 
validate_presences($required_fields, $errors); 

$fields_with_max_lengths = array("menu_name" => 30); 
validate_max_lengths($fields_with_max_lengths, $errors); 

// If errors occured, redirect 
if(empty($errors)) 
{ 
+0

전달하는 것과 비교할 때 글로벌 방식으로 수행하면 어떤 영향을 미칠 수 있습니까? – Rubixryan

+0

이렇게하면 $ 오류에 대한 동일한 참조를 항상 사용할 수 있습니다. 많은 함수에서 전역 적으로 사용하는 경우, 한 함수는 변수의 값을 변경하지 않을 수 있습니다 (값을 지우는 EG) – Pierre

+0

의미가 있습니다. 변수를 전달할 때 $ errors 또는 $ errors 여야합니까? – Rubixryan