2011-03-15 80 views
1

在下面的代碼片段中,我使用了strcasecmp()函數。該函數適用於名字匹配,但不適用于姓氏。strcasecmp()在我的php腳本中無法正常工作

例如,如果名稱文件中的名稱爲Joe Black,併爲名稱提交空白,則$ xxx和$ yyy的值分別爲-3和-6。如果提交名稱,我會得到$ xxx = 0和$ yyy = -1。

有人可以告訴我什麼我失蹤或做錯了嗎?

感謝

克里斯

<?php 
$fname = $_POST["fname"]; 
$lname = $_POST["lname"]; 

print "First Name: " .$fname; 
print "< br/>"; 
print "Last Name: " . $lname; 

$namesFile = "namesFile.txt"; 

$numLines = count(file($namesFile)); 
print "< br/>"; 
print "Lines: " . $numLines; 

$fh = fopen ($psswrdFile, "r"); 

for ($i=1; $i <= $numLines; $i++) 
{ 
$lineData = fgets($fh); 
print "< br/>"; 
print $lineData; 

list($firstName, $lastName) = explode(" ", $lineData); 

print "First Name: " .$firstName; 

print "Last Name: " . $lastName; 

$xxx = strcasecmp($fname,$firstName); 

print "name " . $xxx; 

$yyy = strcasecmp($lname, $lastName); 

print "password" . $yyy; 
} 

?> 
+0

做var_dump($ lname,$ lastName)併發布結果 –

回答

5

您的問題是fgets()包括結束行的字符在它讀取線。這意味着您的「Joe Black」的$linedata實際上是「Joe Black \ n」,即它包含換行符。因此,您的$ lastName最終爲「黑色\ n」而非「黑色」。

作爲一個快速修復,我會使用stream_get_line()而不是fgets,指定「\ n」作爲分隔符。這將非常類似於fgets(),除了它不會將分隔符讀入您返回的字符串中。

或保留與fgets()和剛剝離出換行的字符串它給你......至於@kavisiegel提到,trim()是這樣做的一個簡單的方法(雖然技術上我猜rtrim()會更快!)

+2

或者,您可以使用trim()來清除它。 –

+0

感謝您的解釋和建議....我用trim()和我已經有過的。 – ChrisJ