在下面的代码片段中,我正在使用strcasecmp()函数。该函数适用于名字匹配,但不适用于姓氏。
例如,如果我将名称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 :(得分:5)
您的问题是fgets()
在其读取的行中包含行尾字符。这意味着你的{Joe Black'$linedata
实际上是“Joe Black \ n”,即它包含换行符。因此,$ lastName最终为“Black \ n”而不是“Black”。
作为快速修复,我会使用stream_get_line()
而不是fgets,指定“\ n”作为分隔符。这与fgets()的工作方式非常相似,只是没有将分隔符读入你回来的字符串。
或者保留你的fgets(),然后从你给你的字符串中删除换行符......正如@kavisiegel所提到的,trim()
是一种简单的方法(虽然技术上我猜rtrim()
会更快!)