PDA

View Full Version : سوال: مشکل با mysql_real_escape_string



farnaz.saeedi
دوشنبه 28 آذر 1390, 23:35 عصر
با سلام
من وقتی این تابع رو توی لوکال اسفاده میکنم بخوبی کار میکنه ولی وقتی روی هاست اجراش میکنم کار نمیکنه
مجبور میشم پاکش کنم.کسی میدونه مشکل کجاست؟تابع دیگه ای که کار همین تابع رو بکنه سراغ دارین؟
مثلا این کد:


$edit_name=mysql_real_escape_string(trim($_POST['edit_name']));

روی لوکال اجرا میشه اما رو هاست مقدار خالی برمی گردونه.مقدار این فیلد بصورت فارسی توسط کاربر وارد میشه
این تابع کاراکترهای فارسی رو حذف میکنه؟
اگه به جاش از این توابع استفاده کنم کافیه؟htmlspecialchars , str_replace

narsic
سه شنبه 29 آذر 1390, 00:10 صبح
دوست عزیز امیر حسین از اعضای همین تالار چند تابع خوب برای این کار معرفی کردن میتونید از اون ها استفاده کنید
این تابع برای امن کردن متن ارسالی به بانک است نه حذف کردن کاراکترهای فارسی
موفق باشید

farnaz.saeedi
سه شنبه 29 آذر 1390, 10:07 صبح
دوست عزیز امیر حسین از اعضای همین تالار چند تابع خوب برای این کار معرفی کردن میتونید از اون ها استفاده کنید
این تابع برای امن کردن متن ارسالی به بانک است نه حذف کردن کاراکترهای فارسی
موفق باشید
دوست عزیز به سوال دقت نکردی.مشکل من اینجاست که این تابع روی هاست اجرا نمیشه ولی روی لوکال کار میکنه

mtchabok
سه شنبه 29 آذر 1390, 11:17 صبح
سلام
پرامترهای این دستور رو باید کامل قرار بدید تا در هاست درست کار کنه .

mysql_real_escape_string($string,$linkConnection)

اینم منبعش : http://ir.php.net/manual/en/function.mysql-real-escape-string.php

farnaz.saeedi
سه شنبه 29 آذر 1390, 11:33 صبح
سلام
پرامترهای این دستور رو باید کامل قرار بدید تا در هاست درست کار کنه .

mysql_real_escape_string($string,$linkConnection)

اینم منبعش : http://ir.php.net/manual/en/function.mysql-real-escape-string.php
به جای $linkconnection چی باید بزارم؟این لینکم نگاه کردم چیزی نفهمیدم.چرا روی لوکال با یک پارامتر کار میکنه؟

mtchabok
سه شنبه 29 آذر 1390, 11:40 صبح
چونکه روی لوکال آخرین کانکش به دیتابیس رو خودش پیدا میکنه ولی ظاهرا روی هاستت نمی تونه .
linkConnection همون متغیری هست که مقدار mysql_connect() رو نگه میداره .
یعنی یه متغیری روی برای نگه داری از کانکشن تعریف کن :
$linkConnection = mysql_connect();

irGeek
سه شنبه 29 آذر 1390, 13:59 عصر
اگه در مرحله درج داده به پایگاه داده همیشه ازmysql_real_escape_string استفاده کنیم می تونیم مطمئن باشیم که SQL injection نخواهیم داشت؟

mtchabok
سه شنبه 29 آذر 1390, 14:26 عصر
اگه در مرحله درج داده به پایگاه داده همیشه ازmysql_real_escape_string استفاده کنیم می تونیم مطمئن باشیم که SQL injection نخواهیم داشت؟
بله مطمئن باشید فقط یه چیز میمونه و اونم اینکه سعی کنید ورودیهای از نوع عددی رو حتما در خود php چک کنید که واقعا عدد باشن و بعد بع تابع mysql_readl_escape_string بدید و در کوئری قرار بدین . این تنها نکته ای هس که باید رعایت بشه . ( این نکته به خاطر برخی مشکلات امنیتی بوده که نیازی به توضیح بیشتر نیس )

alireza.stack
سه شنبه 29 آذر 1390, 14:51 عصر
دلیل اینکه تابع با یک پارامتر روی لوکال کار می کند این است که :
یکی از وظایف تابع mysql_real_escape_string است که به دنبال کانکشن می گردد اگر پیدا نکند (مانند مثال شما در حالت لوکال) به دنبال ایجاد کانکشن بطور پیشفرض با مقادیر localhost و نام کاربری root می کند و رمز عبور را خالی می گذارد، اگر بتواند اتصالی برقرار کند به شما پیغامی نمی دهد (مانند لوکال شما)
اما در هاست بعد از مقدار دهی هاست به localhost و نام کاربری به root نمی تواند اتصالی برقرار کند چراکه هاست شما دارای رمز عبور می باشد و نام های کاربری متفاوتی وجود دارد.