السلام عليكم ،
حياكم الله جميعا ...
زي ماشفتوا في العنوان الموضوع خاص بالمواضيع اللي يتكرر السؤال عنها في كل مايخص الPHP
اتمنى نتعاون في كتابه حلولها
لان الاخوان ملوا من الاسئلة المكررة
مشاكل في استخدام اللغة
بسم الله نبدا بالسؤال الاكثر شعبية
س- سكربت كان يعمل معي في السيرفر المحلي ولما رفعته على موقعي لم يعمل بشكل جيد
س - قمت بنقل الموقع الى استضافة اخرى فتعطلت بعض السكربتات
ج - المشكلة هنا غالبا من وضعيه سيرفر الموقع على منع خاصية register_global والتي تعني
ان اي متغير قادم من الكوكيز او الPOST او GET يكتب على الشكل
بينما عند اغلاق الخاصية (وهذا المفترض في النسخ الحديثة)كود PHP:
$var
تكون المتغيرات
الحلول المقترحةكود PHP:
$_POST['var']
$_GET['var']
$_COOKIE['var']
1- كتابة البرنامج بشكل سليم وعدم الاعتماد على هذه الخاصية وذلك باستخدام كل متغير في مصفوفته الخاصة به الموضحه بالاعلى
2 - استخدام دالة extract
3 - استخدم امر php_flag في ملف htaccessكود PHP:
extract($_POST);
extract($_GET);
extract($_COOKIE);
===============================================كود:php_flag register_globals on
س – يظهر لي خطأ
ج – هذا مايحدث عند بدء الجلسة (Session) بعد ارسال شئ للمتصفح سواء اكواد html او نصوصكود:Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started
الحل اجعل الامر
في اول الكودكود PHP:
session_start();
او
ضع اول الصفحة
واخرهاكود PHP:
ob_start();
===============================================كود PHP:
ob_end_flush();
استخدامات الدوال الاساسية
س- اريد شرح لدوال النصوص او String functions
س - كيف تعمل strstr ?
........ ج- راجع موضوع الاخ صقر http://www.swalif.net/softs/swalif26/softs184357/
===============================================
أريد أن أعمل كذا
س- كيف استخدم IP الزائر
ج-
============================================كود PHP:
$ip = $_SERVER['REMOTE_ADDR'];
س- كيف اصنع صورة تأكيد خاصة بي ؟
ج - http://www.swalif.net/softs/showthread.php?t=171561
===============================================
س - اريد دالة تدمج النصوصو وتزيلا الفراغات الزائدة!!
ج - http://www.swalif.net/softs/swalif26/softs196807/
===============================================
ج – كيف أتحقق من وجود ملف معين ؟
ج - http://www.swalif.net/softs/swalif26/softs194215/
===============================================
س- اريد دالة تعرف هل النص مطابق لرابط الكتروني او مطابق لبريد
ج –
هناك دوال كثيرة
===============================================كود PHP:
function is_email($Addr)
{
$p = '/^[a-z0-9!#$%&*+-=?^_`{|}~]+(\.[a-z0-9!#$%&*+-=?^_`{|}~]+)*';
$p.= '@([-a-z0-9]+\.)+([a-z]{2,3}';
$p.= '|info|arpa|aero|coop|name|museum)$/ix';
return preg_match($p, $Addr);
}
function is_url($URL)
{
return preg_match('/^(http|https|ftp):\/\/((?:w+.?)+):?(d*)/', $URL);
}
مايتعلق بقواعد البيانات
س- كيف أعرف هل الاستعلام وجد نتيجة ام لا
س- لدي استعلام اود طباعه رسالة اذا لم يكن هناك نتيجه
ج - استخدم
============================================كود PHP:
$sql = mysql_query("Select somthing from mytable");
if(mysql_num_rows($sql) == 0 )
echo 'لايوجد نتائج';
else
{
// اطبع النتايج ...
}
س- كيف احذف الحقول المكرره من قاعدة البيانات
ج – راجع الموضوع
http://www.swalif.net/softs/swalif45/softs196388/
===============================================
س - هل اجد برنامج لصنع قواعد MYSQL
ج – راجع http://www.swalif.net/softs/swalif26/softs197446/
===============================================
س- اريد استعلم عن بيانات لها اسبوع
ج-
اولا لازم يكون عندك حقل في الجدول يوضع فيه الtimestamp ويكون حقل من نوع INT وليكن اسمه postdate
وعند ادخال الtimestamp تستخدم الدالة :
لتخزينها في ذلك الحقلكود PHP:
time();
الان يمكننا الاستعلام باي طريقة
لوبغينا النتايج بالامسكود PHP:
$SQL = mysql_query("select * from mytable where
postdate >= UNIX_TIMESTAMP( Date_ADD( NOW() , INTERVAL -1 WEEK)) ");
يكون الSQL
لاحظ اهم شئ في الكود هوكود:select * from mytable where postdate >= UNIX_TIMESTAMP( Date_ADD( NOW() , INTERVAL -1 DAY))
هذا يقوم بجمع التاريخ الحالي + فترة زمنية قيمتها يوم واحد واشارتها سالبة اي قم بطرحها ثم يحولها الى timstamp لتتم المقارنهكود:Date_ADD( NOW() , INTERVAL -1 DAY)
لو بغينا سنه
لو بغينا تاريخ محدد .كود:Date_ADD( NOW() , INTERVAL -1 Year)
لانستخدم تاريخ اليوم و Date_ADD بل مباشرة يكون :
كود:postdate >= UNIX_TIMESTAMP( '1997-10-04 22:23:00' )
============================================
س- لدي اقسام كثيرة وكل قسم له اقسام فرعية كيف أكون منها قائمة ؟
قسم >> قسم
>> قسم ..
ج – هناك حلول كثيرة .. استخدم طريقة الاخ محمود http://www.swalif.net/softs/swalif45/softs196589/
============================================
الثغرات والحماية
س- كيف اتخلص من ثغرات XSS واحمي البيانات المدخلة ؟
ج – هناك دالة جميلة شهيره
كود PHP:
function RemoveXSS($val) {
// remove all non-printable characters. CR(0a) and LF(0b) and TAB(9) are allowed
// this prevents some character re-spacing such as <java\0script>
// note that you have to handle splits with \n, \r, and \t later since they *are* allowed in some inputs
$val = preg_replace('/([\x00-\x08][\x0b-\x0c][\x0e-\x20])/', '', $val);
// straight replacements, the user should never need these since they're normal characters
// this prevents like <IMG SRC=@avascript:alert('XSS')>
$search = 'abcdefghijklmnopqrstuvwxyz';
$search .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
$search .= '1234567890!@#$%^&*()';
$search .= '~`";:?+/={}[]-_|\'\\';
for ($i = 0; $i < strlen($search); $i++) {
// ;? matches the ;, which is optional
// 0{0,7} matches any padded zeros, which are optional and go up to 8 chars
// @ @ search for the hex values
$val = preg_replace('/(&#[x|X]0{0,8}'.dechex(ord($search[$i])).';?)/i', $search[$i], $val); // with a ;
// @ @ 0{0,7} matches '0' zero to seven times
$val = preg_replace('/(�{0,8}'.ord($search[$i]).';?)/', $search[$i], $val); // with a ;
}
// now the only remaining whitespace attacks are \t, \n, and \r
$ra1 = Array('javascript', 'vbscript', 'expression', 'applet', 'meta', 'xml', 'blink', 'link', 'style', 'script', 'embed', 'object', 'iframe', 'frame', 'frameset', 'ilayer', 'layer', 'bgsound', 'title', 'base');
$ra2 = Array('onabort', 'onactivate', 'onafterprint', 'onafterupdate', 'onbeforeactivate', 'onbeforecopy', 'onbeforecut', 'onbeforedeactivate', 'onbeforeeditfocus', 'onbeforepaste', 'onbeforeprint', 'onbeforeunload', 'onbeforeupdate', 'onblur', 'onbounce', 'oncellchange', 'onchange', 'onclick', 'oncontextmenu', 'oncontrolselect', 'oncopy', 'oncut', 'ondataavailable', 'ondatasetchanged', 'ondatasetcomplete', 'ondblclick', 'ondeactivate', 'ondrag', 'ondragend', 'ondragenter', 'ondragleave', 'ondragover', 'ondragstart', 'ondrop', 'onerror', 'onerrorupdate', 'onfilterchange', 'onfinish', 'onfocus', 'onfocusin', 'onfocusout', 'onhelp', 'onkeydown', 'onkeypress', 'onkeyup', 'onlayoutcomplete', 'onload', 'onlosecapture', 'onmousedown', 'onmouseenter', 'onmouseleave', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'onmousewheel', 'onmove', 'onmoveend', 'onmovestart', 'onpaste', 'onpropertychange', 'onreadystatechange', 'onreset', 'onresize', 'onresizeend', 'onresizestart', 'onrowenter', 'onrowexit', 'onrowsdelete', 'onrowsinserted', 'onscroll', 'onselect', 'onselectionchange', 'onselectstart', 'onstart', 'onstop', 'onsubmit', 'onunload');
$ra = array_merge($ra1, $ra2);
$found = true; // keep replacing as long as the previous round replaced something
while ($found == true) {
$val_before = $val;
for ($i = 0; $i < sizeof($ra); $i++) {
$pattern = '/';
for ($j = 0; $j < strlen($ra[$i]); $j++) {
if ($j > 0) {
$pattern .= '(';
$pattern .= '(&#[x|X]0{0,8}([9][a][b]);?)?';
$pattern .= '|(�{0,8}([9][10][13]);?)?';
$pattern .= ')?';
}
$pattern .= $ra[$i][$j];
}
$pattern .= '/i';
$replacement = substr($ra[$i], 0, 2).'<x>'.substr($ra[$i], 2); // add in <> to nerf the tag
$val = preg_replace($pattern, $replacement, $val); // filter out the hex tags
if ($val_before == $val) {
// no replacements were made, so exit the loop
$found = false;
}
}
}
return $val;
}
اخر تحديث 12 Jun 2007
واعذرونا على القصور
سيتم ان شاء الله التحديث الدوري
ايضا اتمنى اي احد واجه مشكلة وانحلت هنا .. يضع السؤال والحل
تحياتي