2017-05-14 6 views
0

나는이 간단한 로그인 폼을 테스트 중입니다. Chrome에서 PHP, XAMPP 테스트를하고 있습니다.PHP - CSS - 간단한 폼 유효성 검사 - 빈 결과에 대한 테두리 색 변경

<form action="login.php" method="POST"> 

    <label>User: </label> 
    <input type="text" name="user" <?php if($errors){echo 'style="border:1px solid red;"';}?>> 
    <?php echo '<script>console.log("Value for $errors: '.$errors.'")</script>';?> 

    <label>Password: </label> 
    <input type="password" name="password" <?php if($errors){echo "style='border:1px solid red;'";}?>> 

    <div class="text-center"> 
     <button type="submit" name="submit">Sign in</button> 
    </div> 
</form> 

이 코드는 login.php의 일부이며, 처음에, 나는 PHP 라인은 다음과 같습니다 :

<?php 

session_start(); 

$user = ""; 
$password = ""; 
$errors = 0; 

if(isset($_POST['submit'])){ 

    if(isset($_POST['user'])){ 
     if(!empty($_POST['user'])){ 
     $user = $_POST['user']; 
     } 
    }else{ 
     $errors = 1; 
    } 

    if(!empty(isset($_POST['password']))){ 
     $password = $_POST['password']; 

    }else{ 
     $errors = 1; 
    } 

    $_SESSION['user'] = $user; 
    $_SESSION['password'] = $password; 

} 

?> 

동작을

는 폼의 코드 속성 자체를 호출합니다 (동일한 파일을 호출 -> login.php) PHP 스크립트에서 양식을 제출하는 경우 그것을 달성하기 위해 노력한 다음 모든 유효성 검사 등을 수행합니다. 수신 된 POST 값을 변수에 할당하십시오. 존재하지 않으며 비긴하지 않습니다. 비어 있거나 존재하지 않는 경우 -> $ errors = 1;

두 가지 입력에 오류가있는 경우 테두리 색을 빨간색으로 변경해야합니다. 그래서 내가 한 :

<label>User: </label> 
<input type="text" name="user" <?php if($errors == 1){echo 'style="border:1px solid red;"';}?>> 
<?php echo '<script>console.log("Value for $errors: '.$errors.'")</script>';?> 

나는 비어를 사용하여 약간의 리디렉션을 시도했습니다 콘솔에서 항상 0

을 보여주는 $ 오류의 값을 인쇄하려고에 추가 한 마지막 라인 ($ 사용자), 그리고 입력을 건드리지 않고 양식을 제출할 때 실제로 값이 비어 있음을 보여줍니다. 여전히 비어있는 이유를 완전히 알 수는 없지만 $ 오류는 항상 값 0입니다.

미리 감사드립니다. :)

+0

호기심에서 ^^ 말할 트림을 검사하고 사용자로부터 들어오는 모든 데이터를 살균 할 필요가 1' 대신'TRUE '의 및'false'? 어쨌든 –

+0

게시 됨 주로 학습 중이므로 주로 콘솔로 인쇄 할 때 true/false를 시도했지만 아무 것도 반환하지 않은 경우 숫자를 유지했습니다 – xragdollqueen

+0

왜 당신이 노력하는지 잘 모르겠습니다. 이것들을 JS 콘솔에 기록하십시오. 그냥 대신 var_dump()를 사용하십시오 .' var_dump ($ errors);' –

답변

1

@ Nathan-Dawson 메모/값으로 값을 확인하는 방법에 대한 답을 다시 볼 필요는 없습니다. 다소 다른 접근 방식이 있습니다. 사용자의 경험을 향상시킬 수 있도록 경고 메시지를 전후에 추가 했으므로 값을 확인할 수있는 방법을 보여줍니다.

PHP 측

<?php 

error_reporting(E_ALL); ini_set('display_errors', 1); 

$errors = 0; // so you don't get 'red' applied without submitting the form 

if(isset($_POST['submit'])) { 

if(isset($_POST['user'])){ // check for POST'd value 
    if(!empty($_POST['user'])){ 
    $user = $_POST['user']; 
    // $errors = 0; <- $errors would remain '0' but not needed, just for the logic 
    } else { 
    $errors = 1; // form is processed but $user is POST'd empty 
    } 
} else { 
    $errors = $errors; // needed if one field is set but not the other one 
    // so we don't set $errors back to '0' 
} 

// same logic applies to 'password' -> no need to comment it out again :) 

if(isset($_POST['password'])){ 
    if(!empty($_POST['password'])){ 
    $password = $_POST['password']; 
    } else { 
    $errors = 1; 
    } 
} else { 
    $errors = $errors; 
} 

// added this to show users if they forgot something or not 
if($errors == 0) { 
$warning_mess = "Form fields have been filled, thx !"; 
} else { 
$warning_mess = "Please fill all fields before submitting."; 
} 

// before submitting, give users a warning about fields 
} else { $warning_mess = "Form fields need to be filled"; } 

?> 

난 그냥 확실히 우리가 가진 있도록 ==와 '$ 오류'의 값에 점검을 추가

<input type="text" name="user" 
<?php if($errors == "1"){ echo 'style="border:1px solid red;"'; } ?> /> 

형태 측 0/1 -> 나중에 차이를 만들고 사용자 정의 된 것을 설정하려면 유용 할 수 있습니다. 각 필드에 대한 처리 메시지.

물론, 당신은 필요가, 당신은 왜``사용 0`되고

+0

안녕하세요 @ OldPadawan! 좋았어, 고마워! 나는 지금 오류를 볼 수있다! 그러나이 줄 -> $ errors = 0; // 그러면 양식을 제출하지 않고 '빨간색'을 적용하지 않으면 모든 반대가됩니다./테두리는 제출하지 않고 빨간색으로 나타납니다. 나는 var_dump ($ errors)를 시도했다. 그 라인 바로 다음에 int (0)을 출력하지만, 마지막에 변수를 다시 출력하고 이미 1 (제출하지 않음) 인 – xragdollqueen

+0

테스트하지 않았을 때 ... ** 설정되지 않았습니다 ** 첫 번째 페이지에 도달했을 때 (또는 필드가 좋으면) 제출하지 않고 빨간색 테두리가있는 입력을가집니다. 이 코드에 다른 내용이 있습니까? – OldPadawan

+0

감사합니다! 이제 제대로 작동합니다! : D 방금 창을 열고 닫았습니다. 설명과 설명에 감사드립니다! : D – xragdollqueen

0

값을 확인하는 방법에 결함이 있습니다.

if (isset($_POST['user'])) { 
    if (! empty($_POST['user'])) { 
     $user = $_POST['user']; 
    } 
} else { 
    $errors = 1; 
} 

양식 그러므로 $_POST['user']이 설정됩니다 제출되고있는 user라는 필드가 있습니다. 설정된 경우 비어 있는지 여부는 중요하지 않으며 코드는 $error을 1로 변경하지 않습니다.이 값을 고려하지 않는 중첩 루프가 있습니다.

empty()도 설정했는지 확인하므로 isset()이 필요하지 않습니다.

if (! empty($_POST['user'])) { 
    $user = $_POST['user']; 
} else { 
    $errors = 1; 
} 

암호와 동일한 내용이 적용됩니다. empty()isset()을 합치는 것은 의미가 없습니다. 사용자로부터 접근 방식을 복사하십시오.

+0

안녕하세요! 네, 잠깐 전에 저는 isset()으로 empty()를 쓰는 다른 방법을 시도해 보았지만 잘 동작하고 있습니다. ($ error는 값을 바꾸지 만 border color는 변경하지 않았습니다.) 그러나 여러분이 의미하는 것을 보았습니다. 당신이 게시 한 것에 대한 코드, 대단히 감사합니다 :) 아직 작동하지 않습니다 inouts의 테두리 색상은 제출 후 변경되지 않습니다 :/ – xragdollqueen