我一直在尝试使用PHP来验证我的表单。表单要求用户输入详细信息,然后在验证表单后将其输入到数据库中的表中。我在表单中有一个名字字段,我试图验证它以确保它输入了一个值(必填字段),并且只应包含字母字符或连字符( - )字符。
这是我到目前为止所拥有的:
<?php
if (isset($_POST["submit"])) {
$flag = false;
$badchar = "";
$string = $_POST["fname"];
$string = trim($string);
$length = strlen($string);
$strmsg = "";
if ($length == 0) {
$strmsg = '<span class="error"> Please enter your first name</span>';
$flag = true;}
else {
for ($i=0; $i<$length;$i++){
$c = strtolower(substr($string, $i, 1));
if (strpos("abcdefghijklmnopqrstuvwxyz-", $c) == false){
$badchar .=$c;
$flag = true;
}
}
if ($flag) {
$strmsg = '<span class="error"> The field contained the following invalid characters: $badchar</span>';}
}
if (!$flag) {
$strmsg = '<span class="error"> Correct!</span>';}
}
?>
<h1>Customer Information Collection <br /></h1>
<form method="POST" action="<?php echo $_SERVER["PHP_SELF"];?>" id="custinfo" >
<table>
<tr>
<td><label for="custid">Customer ID (integer value): </label></td>
<td><input type="text" id="custid" name="custid" value="<?php echo $temp ?>" size=11 /><?php echo $msg; ?></td>
</tr>
<tr>
<td><label for="customerfname">Customer First Name: </label></td>
<td><input type="text" id="fname" name="fname" size=50/><?php echo $strmsg; ?></td>
</tr>
我遇到的问题是,当我输入正确的字符串(例如John)时,它仍然会给出错误“字段包含以下无效字符:$ badchar”,当输入的字符不正确时,我希望它在错误消息中显示$ badchar位置的错误字符,但它只是显示“该字段包含以下无效字符:$ badchar”。有没有办法做到这一点?
对这些问题的任何帮助都会非常感激。
答案 0 :(得分:1)
您的问题是您已完成== false
并且strpos
可以返回0(第一个字符的索引),其评估为false
。使用== false
交换=== false
,检查值是否为布尔值false,而不是值为false的值。请参阅http://php.net/manual/en/function.strpos.php
要打印$ badchar的值,请将行更改为
$strmsg = '<span class="error"> The field contained the following invalid characters: '.$badchar.'</span>';
这会将变量连接到字符串
答案 1 :(得分:0)
您的代码存在一些问题。
strpos()
返回文本中搜索字符串位置的从0开始的索引,或者返回false
。您需要使用===
运算符来检查结果;否则,0
结果将被解释为false。
在你的错误字符串中,你会看到:
该字段包含以下无效字符:$ badchar
在php中,变量仅在双引号字符串中解析。由于您使用单引号,它只会回显您输入的实际文本,而不是变量的内容。您可以在字符串中切换双引号和单引号来修复它。