عرض مشاركة واحدة
Moderator
تاريخ التسجيل: Feb 2007-
#1 (permalink)  
[FAQ] قبل أن تطرح موضوعا تفضل هنا


السلام عليكم ،
حياكم الله جميعا ...

زي ماشفتوا في العنوان الموضوع خاص بالمواضيع اللي يتكرر السؤال عنها في كل مايخص الPHP

اتمنى نتعاون في كتابه حلولها

لان الاخوان ملوا من الاسئلة المكررة

مشاكل في استخدام اللغة

بسم الله نبدا بالسؤال الاكثر شعبية

س- سكربت كان يعمل معي في السيرفر المحلي ولما رفعته على موقعي لم يعمل بشكل جيد
س - قمت بنقل الموقع الى استضافة اخرى فتعطلت بعض السكربتات
ج - المشكلة هنا غالبا من وضعيه سيرفر الموقع على منع خاصية register_global والتي تعني
ان اي متغير قادم من الكوكيز او الPOST او GET يكتب على الشكل
كود PHP:
$var 
بينما عند اغلاق الخاصية (وهذا المفترض في النسخ الحديثة)
تكون المتغيرات
كود PHP:
$_POST['var'
$_GET['var'
$_COOKIE['var'
الحلول المقترحة

1- كتابة البرنامج بشكل سليم وعدم الاعتماد على هذه الخاصية وذلك باستخدام كل متغير في مصفوفته الخاصة به الموضحه بالاعلى

2 - استخدام دالة extract
كود PHP:
extract($_POST);
extract($_GET);
extract($_COOKIE); 
3 - استخدم امر php_flag في ملف htaccess
كود:
php_flag register_globals on
===============================================

س – يظهر لي خطأ
كود:
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started
ج – هذا مايحدث عند بدء الجلسة (Session) بعد ارسال شئ للمتصفح سواء اكواد html او نصوص
الحل اجعل الامر
كود 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) == )
    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))
لاحظ اهم شئ في الكود هو
كود:
 Date_ADD( NOW() , INTERVAL -1  DAY)
هذا يقوم بجمع التاريخ الحالي + فترة زمنية قيمتها يوم واحد واشارتها سالبة اي قم بطرحها ثم يحولها الى timstamp لتتم المقارنه
لو بغينا سنه
كود:
 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=&#X40&#X61&#X76&#X61&#X73&#X63&#X72&#X69&#X70&#X74&#X3A&#X61&#X6C&#X65&#X72&#X74&#X28&#X27&#X58&#X53&#X53&#X27&#X29> 
           
$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 
        
              // &#x0040 @ search for the hex values 
              
$val preg_replace('/(&#[x|X]0{0,8}'.dechex(ord($search[$i])).';?)/i'$search[$i], $val); // with a ; 
              // &#00064 @ 0{0,7} matches '0' zero to seven times 
              
$val preg_replace('/(&#0{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{0,8}([9][10][13]);?)?'
                       
$pattern .= ')?'
                    } 
                    
$pattern .= $ra[$i][$j]; 
                 } 
                 
$pattern .= '/i'
                 
$replacement substr($ra[$i], 02).'<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

واعذرونا على القصور
سيتم ان شاء الله التحديث الدوري
ايضا اتمنى اي احد واجه مشكلة وانحلت هنا .. يضع السؤال والحل

تحياتي






__________________
موقعي الشخصي
www.Flasher.ws

جزيرة الفنون
www.Artsisland.net
Flasher غير متواجد حالياً   قديم 11-06-2007, 09:45 PM
رد مع اقتباس