Wątek przeniesiony 2014-03-10 13:16 z PHP przez ŁF.

Błędnie działająca funkcja strpos()

0

Witam! Błąd dotyczy tego, że podczas wyszukiwania podciągu w ciągu nie uwzględnia mi pierwszej litery, np. szukamy w słowie 'Audi' podciągu 'Au' zwraca false, a nie true, lecz gdy wpisze 'udi', 'di', 'u' etc. to wszystko działa poprawnie.

Poniżej zamieszczam kod - z góry informuję, że nie piszę praktycznie w tym języku. Jestem przekonany, że mozna to napisać w 10000 razy lepszy sposób i być może niektóre z funkcji mogą być przestarzałe. :)

        <?
        if (mysql_num_rows($wynik) > 0) {
            /* jeżeli wynik jest pozytywny, to wyświetlamy dane */
            echo "<table cellpadding=\"2\" border=1>
                    <tr>
                    <td> Nazwa Produktu </td>
                    <td> Ilosc w sklepie </td>
                    <td> Cena </td>
                    <td> Zakupy </td>
                    </tr>";

            while ($r = mysql_fetch_assoc($wynik)) {
                if (($kategoria == $r['kategoria']) && isSet($r['nazwa'])) {
                    echo "<tr>";
                    echo "<td>" . $r['nazwa'] . "</td>";
                    echo "<td><center>" . $r['ilosc'] . "</center></td>";
                    echo "<td>" . $r['cena'] . " PLN</td>";
                    echo "<td> <input  type='submit' value='Kup' /></td>";
                    echo "</tr>";
                } elseif (strpos($r['nazwa'], $produkt) && ($kategoria == $r['kategoria'])) {
                    echo "<tr>";
                    echo "<td>" . $r['nazwa'] . "</td>";
                    echo "<td><center>" . $r['ilosc'] . "</center></td>";
                    echo "<td>" . $r['cena'] . " PLN</td>";
                    echo "<td> <input  type='submit' value='Kup' /></td>";
                    echo "</tr>";
                } elseif (strpos($r['nazwa'], $produkt)) {
                    echo "<tr>";
                    echo "<td>" . $r['nazwa'] . "</td>";
                    echo "<td><center>" . $r['ilosc'] . "</center></td>";
                    echo "<td>" . $r['cena'] . " PLN</td>";
                    echo "<td> <input  type='submit' value='Kup' /></td>";
                    echo "</tr>";
                }


                //elseif ((strstr($r['nazwa'], $produkt) && ($kategoria == ""))) {
//                    echo "<tr>";
//                    echo "<td>" . $r['nazwa'] . "</td>";
//                    echo "<td><center>" . $r['ilosc'] . "</center></td>";
//                    echo "<td>" . $r['cena'] . " PLN</td>";
//                    echo "</tr>";
//                }
            }
            echo "</table>";
        }
        ?>

Z góry dziękuję za okazaną pomoc! :)

3

Zwraca Ci dobrze. Zwraca 0, które php wspaniałomyślnie zmienia na false. W warunku umieść strpos($r['nazwa'], $produkt) !== false i tyle.

PS:
W dokumentacji jest na czerwonym tle umieszczone:

This function may return Boolean FALSE, but may also return a non-Boolean value which evaluates to FALSE. Please read the section on Booleans for more information. Use the === operator for testing the return value of this function.

Czyli informacja o tym co napisałem. Polecam zaglądać zwłaszcza gdy coś nie działa jak byś się tego spodziewał.

0

Albo opakuj sobie stringa w klasę.

http://wklej.to/tGuVI

1 użytkowników online, w tym zalogowanych: 0, gości: 1