bugfix> php > 投稿

フォームフィールドを検証しようとしています。

関数 validate_emp 入力フィールドが空かどうかを確認します。なぜ機能しないのか知りたい。

$first_name = $middle_name = $last_name = $gender = $email = "";
$first_nameErr = $middle_nameErr = $last_nameErr = $genderErr = $emailErr="";
function validate_emp($input_name, $error_mess, $field_name){
    if(empty($_POST[$field_name])){
        $error_mess = "This field is must not empty.";
    }else{
        $input_name = $_POST[$field_name];
    }
}
if(isset($_POST["btnregister"])){
    validate_emp($first_name, $first_nameErr, "first_name");
    validate_emp($middle_name, $middle_nameErr, "middle_name");
    validate_emp($last_name, $last_nameErr, "last_name");
    validate_emp($gender, $genderErr, "gender");
    validate_emp($email, $emailErr, "email");
}

これは私が作成したフォームです

<form method="POST">
    First Name: <input type="text" name="first_name" placeholder="First Name" value="<?php echo $first_name ?>"> <span class="error"> <?php echo $first_nameErr ?> </span><br>
    Middle Name: <input type="text" name="middle_name" placeholder="Middle Name" value="<?php echo $middle_name ?>"> <span class="error"> <?php echo $middle_nameErr ?> </span><br>
    Last Name: <input type="text" name="last_name" placeholder="Last Name" value="<?php echo $last_name ?>"> <span class="error"> <?php echo $last_nameErr ?> </span><br>
    <select name="gender">
        <option name="gender" value="">Gender</option>
        <option name="gender" <?php if($gender == "Male") { echo "Selected"; }?> value="Male">Male</option>
        <option name="gender" <?php if($gender == "Female") { echo "Selected"; }?> value="Female">Female</option>
    </select> <span class="error"> <?php if ($gender == "") {echo $genderErr;} ?> </span> <br>
    Email: <input type="text" name="email" value="<?php echo $email ?>"><span class="error"> <?php echo $emailErr ?> </span><br>
    <input type="submit" name="btnregister" value="Register">
</form>

回答 2 件
  • 関数から何も返されていません。何かを返してみてください。

    function validate_emp($input_name, $error_mess, $field_name){
            if(empty($_POST[$field_name])){
                $error_mess = "This field is must not empty.";
            }else{
                $input_name = $_POST[$field_name];
            }
           return // 
        }
    
    

  • 問題はあなたがそうするときだと思う:

       validate_emp($first_name, $first_nameErr, "first_name");
        validate_emp($middle_name, $middle_nameErr, "middle_name");
        validate_emp($last_name, $last_nameErr, "last_name");
        validate_emp($gender, $genderErr, "gender");
        validate_emp($email, $emailErr, "email");
    
    

    関数の最初と2番目のパラメーターは、定義されていない変数を使用しています。

    それらを参照として変数として使用していることがわかります。そうするためには、空または値を返し、それを評価する場合は、&の前に&を使用する必要があります:

          function validate_emp($field_name){
                if(empty($_POST[$field_name])){
                    $output = "";
                }else{
                    $output = $_POST[$field_name];
                }
                return $output;
            }
    
    

    次に、関数の外側:

    $first_name = validate_emp("first_name");
    if ($first_name == "") { echo "$first_name cannot be empty"; }
    
    

あなたの答え