PHP strpos не получает ожидаемых результатов

Используя strpos(), я не получаю желаемых результатов. Я подозреваю, что проблема в условных операторах. Если условие верно, то вроде все работает нормально. Но если оно ложно, код для условия true все равно выполняется. Вот код.

<?php
// require_once 'functions/functions.php';
?>

<?php

if (isset($_POST['submit'])) {
    $string = $_POST['sentence'];
    $findString = $_POST['findstring'];
    $strPosition = stripos($string, stringToFind($findString));

 //  if (($strPosition == true) || ($strPosition == 0)) {
if ($strPosition !== true) {  
    echo 'Found!', '<br><br>';
    echo 'In the string ', $string, '.', '<br>';
    echo 'And the word you want to find is ';
    $readStr = substr($string, $strPosition, strlen($findString));
    echo $readStr, '.', '<br>';

    if ($strPosition == 0) {
    echo 'It is at the beginning of the string.', '<br>';
}
else {
    echo 'It is in the ', $strPosition, ' ', 'position.', '<br>';
}
}
else {
    echo 'Not found. Try again.', '<br>';
}
}

function stringToFind($findString)
{
    return $findString = $findString;
}
?>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>String Position</title>
</head>
<body>

<h1>Finding a string and then read it</h1><br><br>

<form id="form1" class="form" action="<?php echo                         htmlspecialchars($_SERVER['PHP_SELF']); ?>" method="post">
<label for="sentence">Sentence here:
<textarea id="sentence" name="sentence" value="Put a sentence here."></textarea></label>
Enter a string: <input type="text" name="findstring">
<input type="submit" name="submit" value="Go">
</form><br><br>
</body>
</html>

person Joey    schedule 04.07.2014    source источник
comment
if ($strPosition !== false) должно быть условием.   -  person Ja͢ck    schedule 04.07.2014


Ответы (2)


Да, потому что ваше условие удовлетворяется, даже если оно возвращает false, поскольку вы сделали свободное сравнение с 0. Измените приведенное ниже условие.

if (($strPosition == true) || ($strPosition == 0)) {

с,

if ($strPosition !== false) {

Полезно: Чем отличаются операторы сравнения равенства (== двойное равенство) и идентичности (=== тройное равенство) в PHP?

person Rikesh    schedule 04.07.2014
comment
Честно говоря, я до сих пор не совсем понимаю, что такое !==, но я последовал вашему совету. К сожалению, проблема все еще существует. даже если ответ неверен, инструкция по отображению сообщения не найдена все еще не отображается. - person Joey; 04.07.2014
comment
var_dump($strPosition); и расскажите нам, что он показывает. - person Rikesh; 04.07.2014
comment
Репликация, var_dump() = логическое значение false. - person Joey; 04.07.2014
comment
И вы говорите, что это все еще происходит, если после изменения условия, которое я дал вам в ответ? - person Rikesh; 04.07.2014
comment
Проблема заключалась в том, что после перехода на !== я не изменил кодовый блок для истинного условия. Ваша ссылка полезна на деле. Теперь, когда я думаю, что изучил разницу между == и ===, мне просто нужно изменить несколько операторов в моем коде, и я верю, что в конечном итоге получу то, что хочу. - person Joey; 05.07.2014
comment
Здравствуйте быстрый вопрос. Вместо if ($position !== true) { можно просто поставить if (!$position) {? Когда я это сделал, это сработало, но меня беспокоит, будет ли он по-прежнему проверять тип данных. - person Joey; 07.07.2014

из руководства по php:

Возвращает положение иглы относительно начала строки haystack > (независимо от смещения). Также обратите внимание, что позиции строки начинаются с 0, а не с 1. Возвращает FALSE, если игла не найдена.

изменить это, если условие

if (($strPosition == true) || ($strPosition == 0)) {

to

if ($strPosition !== false) {
person BeBest    schedule 04.07.2014