2013-05-03 190 views
0

我一直在嘗試使用PHP來驗證我的表單。表單要求用戶輸入詳細信息,然後在表單驗證完成後輸入數據庫中的表格。我在表單中有一個名字字段,我試圖驗證它是否有輸入的值(必填字段),並且只應包含字母字符或連字符( - )字符。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> 

我遇到的問題是,當我輸入一個正確的字符串(如約翰),它仍然給我的錯誤「字段包含以下無效字符:$ badchar「,同樣,當輸入不正確的字符時,我想讓它在錯誤消息中的$ badchar位置顯示不正確的字符,但它只是顯示」該字段包含以下無效字符:$ badchar「。有沒有辦法做到這一點?

任何與這些問題的幫助將非常感激。

回答

1

你的問題是你已經完成== falsestrpos可以返回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>'; 

這將變量連接成您的字符串

+0

啊,工作完美,非常感謝! – user2273149 2013-05-03 16:36:10

0

你有幾個問題你碼。

strpos()返回文本中搜索字符串位置的從0開始的索引,或返回false。您需要使用===運算符來檢查結果;否則,0結果將被解釋爲false。

在你的錯誤字符串,你所看到的:
領域包含以下無效字符:$ badchar

在PHP中,變量在雙引號字符串只解析出。由於您使用的是單引號,它只會回顯您輸入的實際文本,而不是變量的內容。您可以切換字符串中的雙引號和單引號來修復它。