Просто создайте простую систему входа в школьный клуб. И я пытаюсь отправить сообщение об ошибке, если имя, которое было введено, не соответствует строке в файле, содержащем имена учеников. Файл выглядит примерно так:PHP Поиск не соответствует строке в файле
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).
EDIT: Пробовал:
- с помощью "===" вместо "==" - тот же результат
- с помощью "strstr" вместо "StrPos" - тот же результат
- с использованием «$ _GET» вместо «$ _POST», а также функция urldecode() для переменной - первая дала «неопределенный индекс» и в сочетании с последней «strpos(): пустая игла».
Я использую Internet Explorer 11, кстати.
ЕСЛИ студент должен набрать полный текст, например «Student One 8M2», и это именно то, что вы тестируете тогда, почему нет просто проверить это значение в массиве? т.е.: if (! in_array ('Student One 8M2', $ students)) exit (""); – RamRaider
@RamRaider Это производит то же, что и я. Это связано с новыми символами в файле? – mikebah
Это может быть так. Возможно, попробуйте: $ students = file ('students.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES | FILE_TEXT); – RamRaider