exchanging

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

شروع موضوع توسط pooyesh1 ‏20 آگوست 2007 در انجمن PHP

  1. pooyesh1

    pooyesh1 کاربر تازه وارد

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

    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."' ")
     
  3. pooyesh1

    pooyesh1 کاربر تازه وارد

    تاریخ عضویت:
    ‏8 ژانویه 2006
    نوشته ها:
    75
    تشکر شده:
    0
    بله عین عبارت در دیتابیس هست
    و من می خواهم اونو خارج کرده و قبل از echo متغیر رو جایگزین کنم ولی تشخیص نمی ده و عین عبارت داخل دیتابیس رو می باره
     
  4. pooyesh1

    pooyesh1 کاربر تازه وارد

    تاریخ عضویت:
    ‏8 ژانویه 2006
    نوشته ها:
    75
    تشکر شده:
    0
    بله عین عبارت در دیتابیس هست
    و من می خواهم اونو خارج کرده و قبل از echo متغیر رو جایگزین کنم ولی تشخیص نمی ده و عین عبارت داخل دیتابیس رو نمایش می ده
     
  5. alik

    alik کاربر قدیمی پرشین تولز

    تاریخ عضویت:
    ‏23 سپتامبر 2005
    نوشته ها:
    2,148
    تشکر شده:
    1,226
  6. jhoseinii

    jhoseinii Registered User

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

    pooyesh1 کاربر تازه وارد

    تاریخ عضویت:
    ‏8 ژانویه 2006
    نوشته ها:
    75
    تشکر شده:
    0
    ممنون alik جون
    با تابع eval() درست شد
     
  8. firebird

    firebird Registered User

    تاریخ عضویت:
    ‏2 جولای 2005
    نوشته ها:
    1,424
    تشکر شده:
    9
    به نظر من از نظر امنیتی eval یک رشته از دیتابیس خیلی چیز جالبی به نظر نمیرسه. شما از str_replace استفاده کن.
     
  9. Mehdi

    Mehdi مدیر بازنشسته

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

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

    alik کاربر قدیمی پرشین تولز

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

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

    "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 را استفاده کن.
     
  11. jhoseinii

    jhoseinii Registered User

    تاریخ عضویت:
    ‏20 فوریه 2006
    نوشته ها:
    154
    تشکر شده:
    1
    محل سکونت:
    تهران
    درسته
    برای حالاتی که خروجی نهایی یه الگوی ثابت داره این روش کفایت میکنه
    اما برای مواقعی که محتویات داخل دیتابیس الگوی مشخصی نداره با رعایت قوانین راهنمایی و رانندگی استفاده از eval راه گشاست[​IMG]