【发布时间】:2015-05-03 23:50:10
【问题描述】:
只需为学校俱乐部创建一个简单的登录系统。如果输入的名称与包含学生姓名的文件中的任何行都不匹配,我会尝试发送错误。文件看起来有点像这样:
Student One 8M2
Student Two 8M3
Student Three 8M2
下面的代码显示了提交搜索(或登录凭据)时触发的内容。将文件读入一个数组,然后将该数组中的每个值与搜索结果进行比较。
if (isset($_POST['search'])) {
$search = $_POST['search'];
$students = file("students.txt"); // read file into array
foreach ($students as $student) {
if (strpos($student, $search) == false) { // not found in student list
echo "<script type='text/javascript'>alert('You must enter your full name.');
window.open('signin.php', '_self');</script>";
return false;
}
}
}
}
不幸的是,这会导致用户无法提交任何内容而不会收到“您必须输入您的全名”。例如,像“Student One 8M2”和“fdskdsa”这样的条目。
但是,当 if 语句要求匹配 (!== false) 时,它会正确地向与文件中任何内容匹配的任何内容抛出 javascript 警报。
重申一下,我希望在用户写入的内容与文件 (students.txt) 中的任何行都不匹配时显示警报。
编辑:尝试过:
- 使用“===”而不是“==” - 结果相同
- 使用“strstr”而不是“strpos” - 结果相同
- 使用“$_GET”而不是“$_POST”以及变量上的 urldecode() 函数 - 前者给出“未定义索引”并与后者结合使用“strpos(): 空针”。
顺便说一下,我使用的是 Internet Explorer 11。
【问题讨论】:
-
如果学生必须输入全文,例如“Student One 8M2”,而这正是您要测试的内容,那么为什么不简单地在数组中测试该值呢?即: if( !in_array( 'Student One 8M2', $students ) ) exit("");
-
@RamRaider 这会产生与我尝试过的相同的东西。是否与文件中的换行符有关?
-
有可能。也许试试: $students = file('students.txt',FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES | FILE_TEXT);
-
@RamRaider 这行不通! :(
标签: javascript php file-handling strpos comparison-operators