PDA

View Full Version : سوال: استفاده از متغیر ها در Url



erfansaberi
پنج شنبه 23 خرداد 1398, 12:32 عصر
سلام
من یک کوکی lang داخل برنامه تعریف کردم که زبان رو تعیین میکنه و متغیر translations رو عوض میکنه دو تا پوشه داخل برنامه هستن که یکی زبان فارسی و دیگری انگلیسیه میخوام به صورت زیر اسکریپت رو تغییر بدم جوری که اگر متغیر فارسی بود زبان فارسی و اگر متغیر انگلیسی بود زبان انگلیسی انتخاب بشه داخل اسکریپت به این صورته:

require_once(DIR . '/../translations/user_translations/trans-thanks.php');
میخوام اینطوری باشه(قسمت translations بر اساس متغیر تعریف شده تغییر کنه):
require_once(DIR . '/../$translations/user_translations/trans-thanks.php');

مثلا اگر انگلیسی بود بشه:

require_once(DIR . '/../english/user_translations/trans-thanks.php');


ولی وقتی به این حالت در میاد به جای جایگزین کردن متغیر translations ، کلمه $translations رو داخل url میذاره و پوشه $translations رو باز میکنه

کسی میدونه چطور این متغیر رو داخل url بذارم؟ اگر امکانش هست لطفا راهنمایی کنید ممنون از توجهتون

ali_sed
پنج شنبه 23 خرداد 1398, 13:22 عصر
سلام

یکی از دو روش زیر را امتحان کنید:

(به جایگزین شدن دابل کوتیشن بجای کوتیشن دقت کنید)



require_once(DIR . "/../$translations/user_translations/trans-thanks.php");
//یا این
require_once(DIR . '/../'.$translations.'/user_translations/trans-thanks.php');



به این نکته امنیتی توجه داشته باشید که تمامی متغییرهای دریافتی از سمت کاربر باید اعتبارسنجی شود علاوه بر این باید مقدار پیش فرض آن نیز مشخص شود مثلا اگر کوکی زبان خالی بود کدام زبان به عنوان پیش فرض در نظر گرفته شود. به عنوان مثال:


$translation = $_COOKIE['lang']=='english' ? 'english':'persian';

erfansaberi
جمعه 24 خرداد 1398, 00:42 صبح
سلام
خیلی متشکرم از راهنماییتون
راه پیشنهادیتون جواب داد


به نکته خوبی اشاره کردید،
به این کد توجه کنید

<?php
if (isset($_COOKIE["translations"])){
$translations = $_COOKIE['translations'];
} else {
$translations = "translations";
}
?>
منظورتون همینه دیگه؟

ali_sed
جمعه 24 خرداد 1398, 11:55 صبح
سلام
خیلی متشکرم از راهنماییتون
راه پیشنهادیتون جواب داد


به نکته خوبی اشاره کردید،
به این کد توجه کنید

<?php
if (isset($_COOKIE["translations"])){
$translations = $_COOKIE['translations'];
} else {
$translations = "translations";
}
?>
منظورتون همینه دیگه؟

خیر منظورم اینه نباید به داده‌های دریافتی از سمت کلاینت اعتماد کنید. مثلا کاربر بیاد دستی مقدار کوکی را تغییر بدهد و چیزی غیر از مقادیر مورد انتظار شما english یا persian درج کند. بنابراین شما باید مقدار کوکی را بررسی کنید که حتما یکی از این دو مقدار باشد.

چون دو تا بیشتر نیست همین یک خط کفایت می کند:

$translation = $_COOKIE['lang']=='english' ? 'english':'persian';

برای تعداد بیشتر میتوانید مقادیر مجاز را در یک آرایه بریزید و از دستور in_array استفاده کنید:


$langs = ['persian', 'english'];
$translation = in_array($_COOKIE['lang'], $langs) ? $_COOKIE['lang'] : 'english';//default value