Dzisiaj zmarnowałem prawie godzinę, aby zrozumieć swój błąd programistyczny. Zajęło mi to tyle czasu, bo po prostu nie spodziewałem się takiego obrotu sprawy. Ok, mea culpa 🙂
Otóż okazało się, że w poniższej pętli:
for($i=”0″; $i<=20; $i++)
cyfra zero MUSI być wzięta w cudzysłowia. Musiało to być zrobione, chociaż w wielu innych miejscach mojej strony wcale to nie jest potrzebne.
Ukłoniły się tu typy zmiennych. Otóż pewna inna zmienna, nazwijmy ją $filter, w systemie może przyjmować wartości literowe lub liczbowe. Nasza zmienna $i jest do niej porównywana. Wszystko było ok gdy zmienna $filter przyjmowała wartości liczbowe. Problem pojawiał się w momencie, gdy trzeba ją było porównać do wartości literowej (brzmi głupio, bo wartości literowych nie porównuje się do cyfrowych). Wiadomo było, że porównanie wartości literowej i cyfrowej da brak równości. Jednakże, jak podejrzewam, z przyczyn niezgodności zmiennych skrypt nie chciał działać.
Fragment realnego kodu który nie działał bez znaków cudzysłowu prezentuję poniżej:
<select name=”voc_pass_limit_filter”>
<option value=”%%””;
if ($_REQUEST[‘voc_pass_limit_filter’]==””){$_REQUEST[‘voc_pass_limit_filter’]=”%%”;}
if ($_REQUEST[‘voc_pass_limit_filter’]==”%%”)
{echo ” selected”;}
echo “>all
for($i=”0″; $i<=20; $i++)
{
echo ”
<option value=”” . $i . “””;
if($_REQUEST[‘voc_pass_limit_filter’]==$i)
{
echo ” selected”;
}
echo “>” . $i . “</option>”;
}
echo “