السلام عليكم ورحمة الله وبركاتة
يوجد مشكلة فى إرسال أى نص إلى MySQL يحتوى على " و ' و \ و NULL فيجب وضع \ قبل كل حرف منهم قبل إرسال النص إلى MySQL
فأنظر ماذا سيحدثة هذا المتغيير
$text = "Slashes 'Example";
لو أرسلناه إلى MySQL عند تكوين سطر SQL
mysql_query("insert into t1 (f1) values ('$text')");بالتأكيد سينتج هذا SQL
insert into t1 (f1) values ('Slashes 'Example')و هنا تكمن المشكلة فى وجود الرمز ' فى النصف و بسببة سوف لم يتم تنفيذ سطر SQL
و لحل هذة المشكلة يجب وضع \ قبل الرموز التى قمت بذكرها فى الأعلى بواسطة الدالة addslashes هكذا
mysql_query("insert into t1 (f1) values ('" . addslashes($text) . "')");و فى هذة الحالة يتنج هذا السطر
insert into t1 (f1) values ('Slashes \'Example')و بهذة الطريقة سيتم حل المشكلة بوضع \ قبل الرمز ' و لكن ماذا نفعل لو أننا نستخدم متغييرات كثيرة ناتجة من Form فبالتأكيد هذا سيعتبر متعب جداً فالحل هو كتابة حلقة تكرارية تقوم بوضع \ تلقائياً لكل المتغيرات للمصفوفة GET و POST و COOKIE هكذا
if( is_array($_GET) )
{
while( list($k, $v) = each($_GET) )
{
if( is_array($_GET[$k]) )
{
while( list($k2, $v2) = each($_GET[$k]) )
{
$_GET[$k][$k2] = addslashes($v2);
}
@reset($_GET[$k]);
}
else
{
$_GET[$k] = addslashes($v);
}
}
@reset($_GET);
}الكود يحتوى على حلقتان تكرارية فالحلقة الثانية يتم تنفيذها إذا كان المتغير يحتوى على مصفوفة.
و طبعاً تطبق هذة الحلقة مع POST و COOKIE و يتم و ضع هذة الحلقات فى بداية الصفحات بواسطة إدراجها فى ملف مستقل ثم إدراج الملف فى بداية كل الصفحات.
و يتم التعامل بهذة الطريقة إذا كانت PHP لم يتم إعدادها على أن تضيف \ من تلقاء نفسها و هذا غالباً ما يحدث و للتأكد من أن PHP ليست معده على ذلك نستخدم الدالة get_magic_quotes_gpc فإذا تم إرجاع الرقم صفر فيعنى أن PHP غير معد على إضافة \ من تلقاء نفسها و العكس صحيح لو تم إرجاع الرقم واحد.
و طبعاً ستحتوى كل المتغيرات على \ زائده فإذا كنت تريد طباعه ما بداخل المتغيير فقم بإستدعاء الدالة stripslashes لإزالة \ الزائدة هكذا
echo(stripslashes ($POST['name']));
بالتوفيق للجميع

