PDA

View Full Version : سوال: یه اررو تو دستورات mysql



behzadamin12
دوشنبه 20 بهمن 1393, 10:12 صبح
سلام دوستان
تازه کار php هستم
یه اررو دارم
یعنی یه تابع برای جلوگیری از هک با دستورات sql injection و ... نوشتم
این تابع منه


function Check_Post($value){
$Return1 = mysql_real_escape_string($value);
$Return2 = htmlspecialchars($Return1);
return $Return2;
}

ولی یه همچین ارروری رو میده


128297
اشکال چیه؟
چه جوری میتونم حلش کنم؟
به جای این دستور چه جایگزینی وجود داره؟
لطف میکنید جواب میدید

mahmod2000
دوشنبه 20 بهمن 1393, 10:31 صبح
کد main.php هم قرار بدید

hamedarian2009
دوشنبه 20 بهمن 1393, 10:33 صبح
سلام این دستور mysql_real_escape_string رو استفاده می کنید باید قبلش یک اتصال به mysql هم باز کنید ولی دیگه از توابع mysql_ استفاده نکنید این روشی که استفاده کردید علاوه بر اینکه امکان خطا و تغییر رفتار کوئری رو داره و خطرناکه در نسخه های آینده php به طور کامل حذف خواهد شد در نسخه های فعلی هم Deprecated شده است

از PDO یا mysqli استفاده کنید و مخصوصا prepared statements دیگه مشکل sql injection هم نداره
ازینجا میتونی یادبگیری : http://www.w3schools.com/php/php_mysql_connect.asp
اینم فارسیش: http://beyamooz.com/php/97-database/118-%D8%A7%D8%B1%D8%AA%D8%A8%D8%A7%D8%B7-%D8%A8%D9%87-%D9%BE%D8%A7%DB%8C%DA%AF%D8%A7%D9%87-%D8%AF%D8%A7%D8%AF%D9%87-mysql-%D8%AF%D8%B1-php

behzadamin12
دوشنبه 20 بهمن 1393, 10:34 صبح
این همون کد main.phpهستش
که خط 18 مربوط به همون دستور
mysql_real_escape_string
هستش
چرا به این کد اررور میده؟
جایگزینش چی بزارم؟

behzadamin12
دوشنبه 20 بهمن 1393, 11:06 صبح
مرسی بچه ها خودم پیداش کردم
دستورشو میزارم
تازه کارها هم یاد بگیرند


function Check_Post($value){
$link = mysqli_connect("server","user","pass","db") or die("Error " . mysqli_error($link));
$Return1 = mysqli_real_escape_string($link,$value);
$Return2 = htmlspecialchars($Return1);
return $Return2;
}

hamedarian2009
دوشنبه 20 بهمن 1393, 11:09 صبح
این همون کد main.phpهستش
که خط 18 مربوط به همون دستور
mysql_real_escape_string
هستش
چرا به این کد اررور میده؟
جایگزینش چی بزارم؟

اصلا پست منو خوندین چی گفتم؟ این دستور تو نسخه های جدید منسوخ شده میتونید از mysqli_real_escape_string() (http://php.net/manual/en/mysqli.real-escape-string.php) استفاده کنید ولی بهتر همون روشهایی که در بالا گفتم هست

behzadamin12
دوشنبه 20 بهمن 1393, 20:03 عصر
مرسی حامد جان
منم تو کد بالا که نوشتم
از دستور $Return1 = mysqli_real_escape_string($link,$value); استفاده کردم
مرسی و ممنون