2013-05-17 154 views
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> 
+0

学习正则表达式,你不会后悔的。 – elclanrs

+0

尝试过,没有问题...我注意到没有发送$ _POST ['submit'],但是甚至没有输入验证码。 –

+3

你没有提交按钮? – Kuzgun

回答

0
<?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> 
+0

那我该怎么写呢? – AJJ

+0

如果$ _POST满足您的要求 – user2117650

+0

,并且在您不应该写这样的内容时显示您的评论,则我vardumped $有效: <?php if(isset($ strmsg)){echo $ strmsg; }?> – user2117650

0

您应该添加一个提交按钮与“提交”作为名称,并将所有关于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> 
+0

我确实有一个名为“submit”的提交按钮,目前PHP代码的整个部分在(isset($ _ POST [“submit”]))中,但是我仍然尝试了你的方法,但仍然没有运气。 – AJJ

+0

尝试“if(empty($ string))”而不是“if($ length == 0)”。顺便说一句你的PHP版本是什么? – evuez

相关问题