【问题标题】:Form validates before submit提交前的表单验证
【发布时间】:2025-11-27 00:40:01
【问题描述】:

只是一个快速的,我似乎无法发现并希望其他人能发现我的错误,我有一些用 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>

【问题讨论】:

  • 学正则表达式,你不会后悔的。
  • 试过了,没有问题...我注意到没有发送 $_POST['submit'] ,所以甚至没有输入验证码。
  • 你没有提交按钮?
  • 你应该把你的 isset($_POST['submit']) 下的所有东西从第 5 行移到第 8 行
  • 您缺少一个带有“提交”名称的提交按钮

标签: php forms validation


【解决方案1】:
<?php
$flag = false;
$badchar = "";
$strmsg = "";
if(isset($_POST['customerfname']))
{
$string = $_POST["customerfname"];
$string = trim($string);
$length = strlen($string);
}
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;}
    var_dump($valid);
}

?>

<form method="POST" action="" 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>

【讨论】:

  • 那我该怎么写呢?
  • 如果 $_POST 满足您的要求,我转储了 $valid
  • 如果没有显示你的评论,你应该这样写:
  • 复制整个代码并在输入之后添加它 我确定它有效
  • 复制了确切的代码并添加了代码以显示我的评论,但仍然是同样的问题,不过感谢您的提示。
【解决方案2】:

您应该添加一个以“提交”为名称的提交按钮,并将有关 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>

【讨论】:

  • 我确实有一个名为“submit”的提交按钮,并且目前在 (isset($_POST["submit"])) 下有整个 PHP 代码部分,但我还是尝试了你的方法没有运气。
  • 尝试“if (empty($string))”而不是“if ($length == 0)”。顺便说一句,您的 PHP 版本是多少?