برگزیده های پرشین تولز

تشخیص متغییر درون یک استرینگ فراخوانی شده از بانک

pooyesh1

کاربر تازه وارد
تاریخ عضویت
8 ژانویه 2006
نوشته‌ها
75
لایک‌ها
0
سلام به دوستان
من یک استرینگ در یک فیلد بانک اطلاعاتی ذخیره کردم مثل زیر:
salam bar $name
حلا وقتی می خواهم فراخونی کنم ابتدا متغییر $name رو مقدار دهی می کنم و بعد استرینگ رو از دیتا بیس فراخوانی می کنم و نشون می دم ولی متغییر رو تشخیص نمی ده
البته این یک مثال ساده بود
را حل این چیه که متغییر رو تشخیص بده و جایگزین کنه؟
 

jhoseinii

Registered User
تاریخ عضویت
20 فوریه 2006
نوشته‌ها
154
لایک‌ها
1
محل سکونت
تهران
منظورتون اینه که عبارت 'salam bar $name' بصورت مطلق تو دیتابیس هست؟ یا اینکه $name رو مقدار دهی کردید و عبارت مثلاً بصورت "salam bar Smith" توی دیتابیس ثبت شده؟
اگه حالت دوم :
و حالا میخاید بدونید که $name="Smith" و آیا عبارت "salam bar $name" در دیتابیس هست؟
اگه اینطوره:
ممکنه به جای " از ' استفاده کرده باشید، و 5 کارکتر $name از دیتابیس پرسیده شده باشه و ...

من پیشنهاد میکنم:
کد:
mysql_query(" select * from `table` where `field`='salam bar $name' ")
و یا مطمئنتر :
کد:
mysql_query(" select * from `table` where `field`='salam bar ".$name."' ")
 

pooyesh1

کاربر تازه وارد
تاریخ عضویت
8 ژانویه 2006
نوشته‌ها
75
لایک‌ها
0
منظورتون اینه که عبارت 'salam bar $name' بصورت مطلق تو دیتابیس هست؟

بله عین عبارت در دیتابیس هست
و من می خواهم اونو خارج کرده و قبل از echo متغیر رو جایگزین کنم ولی تشخیص نمی ده و عین عبارت داخل دیتابیس رو می باره
 

pooyesh1

کاربر تازه وارد
تاریخ عضویت
8 ژانویه 2006
نوشته‌ها
75
لایک‌ها
0
منظورتون اینه که عبارت 'salam bar $name' بصورت مطلق تو دیتابیس هست؟

بله عین عبارت در دیتابیس هست
و من می خواهم اونو خارج کرده و قبل از echo متغیر رو جایگزین کنم ولی تشخیص نمی ده و عین عبارت داخل دیتابیس رو نمایش می ده
 

jhoseinii

Registered User
تاریخ عضویت
20 فوریه 2006
نوشته‌ها
154
لایک‌ها
1
محل سکونت
تهران
شاید اگه عبارت رو stripslashes کنید، مشکل حل شه
چون اگه سرور نرمال باشه، قبل از ثبت $name اونو به \$name تبدیل میکنه
 

pooyesh1

کاربر تازه وارد
تاریخ عضویت
8 ژانویه 2006
نوشته‌ها
75
لایک‌ها
0
ممنون alik جون
با تابع eval() درست شد
 

firebird

Registered User
تاریخ عضویت
2 جولای 2005
نوشته‌ها
1,424
لایک‌ها
10
سن
46
به نظر من از نظر امنیتی eval یک رشته از دیتابیس خیلی چیز جالبی به نظر نمیرسه. شما از str_replace استفاده کن.
 

Mehdi

مدیر بازنشسته
تاریخ عضویت
1 آگوست 2004
نوشته‌ها
5,602
لایک‌ها
49
محل سکونت
Anywhere
اصلا کلا روش شما اشتباه هست , چکاریه اینطوری متغییر رو عوض کنی؟؟؟:blink:

مثلا فقط اسم رو ذخیره کن , بعد اسم رو از دیتابیس بیرون بکش و چاپ کن .
;echo "salam bar ".$name
دقیقا بگو چی میخوای , روش خیلی راحت تری هست براش .
 

alik

کاربر قدیمی پرشین تولز
تاریخ عضویت
23 سپتامبر 2005
نوشته‌ها
2,146
لایک‌ها
1,232
برای اون کاری که میخوای بکنی بنظر من بهترین روش این هست:
فرض کن یک رشته داخل دیتابیس داری و میخوای یک جای اسم و یک جاش فرض ایمیل جایگزین بشه :

با روش خودت فرض کن اینجوری نوشتی:

"salam esme shoma $name ast va email shoma $email ast , khosh amadid be site"

این رشته را به این صورت ذخیره کن:

"salam esme shoma %s ast va email shoma %s ast , khosh amadid be site"

و بعد به راحتی از تابع printf استفاده کن برای چاپش به این صورت:

PHP:
 printf("salam esme shoma %s ast va email shoma %s ast , khosh amadid be site",$name,$email);

توضیح کوتاهش این هست که به ترتیب هرجا %s گذاشتی متغییرهایی که با ویرگول جداگانه نوشتی جایگزین میشه برای متغییر های عددی می توانی از %d استفاده کنی و اعشاری از %f

اگر فرضا نمی خوای این رشته را چاپ کنی و میخوای این رشته را داخل یک متغییر دیگه بریزی یا جور دیگری استفاده کنید تابع sprintf را استفاده کن.
 

jhoseinii

Registered User
تاریخ عضویت
20 فوریه 2006
نوشته‌ها
154
لایک‌ها
1
محل سکونت
تهران
درسته
برای حالاتی که خروجی نهایی یه الگوی ثابت داره این روش کفایت میکنه
اما برای مواقعی که محتویات داخل دیتابیس الگوی مشخصی نداره با رعایت قوانین راهنمایی و رانندگی استفاده از eval راه گشاست
47b20s0.gif
 
بالا