Поиск текстового файла для строки не работает PHP
Так что в моем php-коде я пытаюсь, чтобы этот код проверил мой текстовый файл, чтобы увидеть, что строка существует. Но каждый раз, когда я добавляю код, независимо от того, существует строка или нет, он повторяет код, если строка существует.
$addemail = $_POST["subemail"];
$searchfile = file_get_contents("emailist.txt");
if (!strpos($searchfile, "$addemail"))
{
echo "Your email is already in our database.";
}
else
{
code to be executed if string doesn't exist.
}
Спасибо заранее, это действительно поставило меня в тупик:\
5 ответов
Ваш текущий код говорит: "Ваша электронная почта уже есть в нашей базе данных". в случае, если электронное письмо отсутствует в базе данных, или если это первое электронное письмо (вы всегда должны использовать сравнение === или!== со strpos). Код должен быть:
$addemail = $_POST['subemail'];
$searchfile = file_get_contents('emailist.txt');
if (strpos($searchfile, $addemail) === false)
{
//code to be executed if string doesn't exist.
}
else
{
echo "Your email is already in our database.";
}
Вы должны использовать этот синтаксис:
$pos = strpos($searchfile, $addemail);
if ( $pos === false )
{
....
}
strpos()
может возвращать логическое значение FALSE, но также может возвращать не-логическое значение, которое оценивается как FALSE, если позиция была 0-м (первым) символом.
Посмотрите @ http://php.net/manual/en/function.strpos.php для получения дополнительной информации.
Допустим, электронная почта отсутствует в поисковом файле. T
курица твоя strpos
вернусь false
, Когда вы добавляете отрицание перед выражением, равным false, оно превращается в true.
Таким образом, ваш поиск адреса электронной почты в файле будет верным, если адрес электронной почты отсутствует в файле. Вам нужно убрать отрицание из условия.
Возможно ли, что значение $addemail
вы проверяете, находится ли он в самом начале вашего текстового файла?
strpos() возвращает смещение одной строки в другой. Если эта строка будет в начале другой, индекс, очевидно, будет 0
, strpos() возвращает false, если строка не может быть найдена. поскольку 0 == false
но 0 !== false
Вы можете изменить свое состояние на if (strpos($searchfile, $addemail) !== false)
,
При этом вы должны заметить, что strpos() чувствительна к регистру. Это означает me@EXAMPLE.org
не найден при поиске me@example.org
, Чтобы преодолеть это, вы можете использовать нечувствительный к регистру брат stripos ().
if (strpos($searchfile, "$addemail") === false) {
используйте условие как это...
см. это предупреждение...http://php.net/manual/en/function.strpos.php#refsect1-function.strpos-returnvalues