0

簡単に言えば、私は見つけられないようで、他の誰かが私の間違いを見つけてくれることを望んでいました.PHPで書かれたいくつかの文字列検証コードがあり、私が抱えている問題は、フォームが「customerfname」を検証しているように見えることです.送信ボタンが押されたときではなく、フォームが開かれるとすぐに、フィールドが開かれるとすぐに、送信ボタンが押される前でも「名前を入力してください」というエラーが表示されます。誰かが私の間違いを見つけることができますか?

<?php

$flag = false;
$badchar = "";
$string = $_POST["customerfname"];
$string = trim($string);
$length = strlen($string);
$strmsg = "";

if (isset($_POST["submit"])) {
    if ($length == 0) {
        $strmsg = '<span class="error"> Please enter your first name</span>';
        $flag = true;
        $valid = false;}
    else if ($length > 30) {
        $strmsg = '<span class="error"> Can not enter more than 30 characters</span>';
        $flag = true;
        $valid = false;
        }
else{
    for ($i=0; $i<$length;$i++){
        $c = strtolower(substr($string, $i, 1));
        if (strpos("abcdefghijklmnopqrstuvwxyz-", $c) === false){
             $badchar .=$c;
             $flag = true;
             $valid = false;
        }
    }
    if ($flag) {
        $strmsg = '<span class="error"> The field contained the following invalid characters: '.$badchar.'</span>';}
    }
    if (!$flag) {
        $valid = true;
    }
}

?>

<form method="POST" action="<?php echo $_SERVER["PHP_SELF"];?>" id="custinfo">

<td><label for="customerfname">Customer First Name: </label></td>
<td><input type="text" id="customerfname" name="customerfname" size=50/><?php echo $strmsg; ?></td>

<p><input type="submit" name="submit" value="Save Data"/>&nbsp;<input type="reset" value="Clear Form" />

</form>
4

2 に答える 2

0

「submit」という名前の送信ボタンを追加し、POST リクエストに関するすべての行を下に移動する必要があります。if (isset($_POST["submit"]))

以下は、実際に動作する (改善すべき点はまだたくさんありますが、それは最初の段階です) コードのバージョンです。

<?php

$flag = false;
$badchar = "";
$strmsg = "";

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

    $string = (isset($_POST["customerfname"])) ? $_POST["customerfname"] : ''; // if customerfname wasn't sent, $string will be empty
    $string = trim($string);
    $length = strlen($string);

    if ($length == 0) {
        $strmsg = '<span class="error"> Please enter your first name</span>';
        $flag = true;
        $valid = false;
    }
    else if ($length > 30) {
        $strmsg = '<span class="error"> Can not enter more than 30 characters</span>';
        $flag = true;
        $valid = false;
    }
    else {
        for ($i=0; $i<$length;$i++) {
                $c = strtolower(substr($string, $i, 1));
                if (strpos("abcdefghijklmnopqrstuvwxyz-", $c) === false) {
                    $badchar .=$c;
                    $flag = true;
                    $valid = false;
                }
        }
        if ($flag) {
            $strmsg = '<span class="error"> The field contained the following invalid characters: '.$badchar.'</span>';
        }
    }
    if (!$flag) {
        $valid = true;
    }
}

?>

<form method="POST" action="<?php echo $_SERVER["PHP_SELF"];?>" id="custinfo">

<td><label for="customerfname">Customer First Name: </label></td>
<td><input type="text" id="customerfname" name="customerfname" size=50/><?php echo $strmsg; ?></td>
<td><input type="submit" name="submit"></td>

</form>
于 2013-05-17T08:15:07.793 に答える