مشکل با تابع strpos()

shz_furion

کاربر عضو
سلام به همه.امروز داشتم یه برنامه نسبتا طولانی رو می نوشتم که الان که شبه دیدم یه نمونه خیلی شبیهش رو تو سایت اسکریپتش رو قرار دادن

دیر فهمیدم ولی اسکریپتم کامل شده تا حد 90%

اسکریپتی که نوشتم کامله کامله فقط یک جا گیر کردم با تابع strpos. الان ip های ارسال کننده دکمه لایک اینطورین روی localhost.چرا khosh amadid برگردونده نمیشه؟؟؟؟؟؟؟ولی اگه به جای msg یه رشته مثل Hello world ::1 بزارم کار میکنه؟؟؟؟


کد:
$msg = '::1,::1,::1,::1';
if(strpos($msg,'::1')==true){echo 'khosh amadid';}
راستی قالب جدید سایت هم خوبه.ولی قبلی خیلی جذاب تر بود.به هر حال مدیران اگه قالب قبلی رو به صورت اسکریپت برای بقیه بزارن،استقبال میشه.

 

shz_furion

کاربر عضو
بچه ها کسی نمیدونه چرا کار نمیکنه؟؟لطفا یکی جواب بده خیلی زیاد حیاتی هست.

 

HamedR

کاربر عضو
لوکال هاست ip ـش 127.0.0.1 هست.

بهتر اینجور چیزا رو که به ip مربوط میشه روی هاست امتحان کنی ؛ نه روی لوکال هاست.

الان از تابع strpos() برای تطبیق ip استفاده کردی ؟!!!! :39:

 
آخرین ویرایش توسط مدیر:

william

کاربر عضو
سلام.

همونطور که اطلاع دارید تابع strpos قادر به بازگرداندن دو نوع داده Boolean و integer هست. در صورتی که پارامتر دوم در پارامتر اول موجود باشه، موقعیت اون رو، به مقدار عددی و در صورتی که موجود نباشه، مقدار بولین false برگشت داده میشه. و دوباره همونطور که باز هم اطلاع دارید از اونجایی که در برنامه نویسی عدد پایه 0 هست، در صورتی که مقدار پیدا شده اولین کاراکتر باشه، موقعیت کاراکتر اول (یعنی 0) برگردانده میشه. و مطمئنا همه اطلاع دارند که 0 برابر مقدار بولین false در نظر گرفته میشه.

در قطعه کد شما چون مقدار یافت شده، اولین کاراکتر در رشته msg هست، در نتیجه مقدار 0 با true برابر نیست؛ پس وارد بلاک if نخواهد شد.

برای رفع مشکل هنگام استفاده از تابع strpos و برای چک کردن مقدار بازگشتی این تابع از === به جای == استفاده کنید تا جنس هم مورد بررسی قرار بگیره. یا اینکه (کد اصلاح شده شما):


کد:
$msg = "::1,::1,::1,::1";
if( strpos($msg, "::1") > -1 ){
    echo 'khosh amadid';
}
 
بالا