Typy zmiennych PHP

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 “

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA
Change the CAPTCHA codeSpeak the CAPTCHA code
 

This site uses Akismet to reduce spam. Learn how your comment data is processed.