الحاجة أم الإختراع
درسنا اليوم درس ثقيل .. و يحتاج علبة مشروب غازي للتهضيم ..
و يأتي هذا الدرس بناء على طلب أحد الإخوة حيث أراد معرفة كيفية وضع كود تبليغ في السكربتات التي ينتجها ..
و هنا إن شاءالله سأشرح طريقتين بسيطتين لعمل ذلك ..
و لعل البعض قد ينزعج و يقول أني أساعد على عمل برامج ملغمة هههههههههه .. لكن أنا على قناعة أن كل مبرمج سكربت له الحرية في معرفة مستخدمي برنامجه و ليس هذا مجال للنقاش فهيا بنا إلى الشرح ..
غالباً يتم وضع كود التبليغ في ملف تركيب السكربت install.php مثلاً ..
و بالطبع بهذا الملف يتم زراعة قاعدة البيانات على الغالب و من ثم بعد تركيب القاعدة يتم عمل كود التبليغ ..
لذا فالسكربتات التي تحتاج لزراعة القاعدة يدوياً غالباً لا يكون فيها كود تبليغ ..
و التبليغ غالباً يكون عن رابط الموقع الذي قام بتركيب السكربت .. و يتم ذلك عن طريق الإستعلام بمتغيرات و غالباً تستخدم المتغيرات التالية :
- $HTTP_REFERER و هو يقوم بجلب الصفحة الأخيرة التي فتحت بالمتصفح قبل تنفيذ الكود ..
- $HTTP_HOST و هو يقوم بجلب رابط الموقع ..
- $PHP_SELF يقوم بجلب رابط الملف ..
كما أنه بعض المبرمجين يضع في ملف الكونفج متغير $SITEURL مثلاً لكي يتم وضع رابط الموقع من قبل المستخدم و من ثم عند التبليغ يتم إرسال ما كتبه المستخدم في هذا المتغير ..
و لعمل كود تبليغ في السكربت الخاص بك هناك طريقتين حسب علمي و قد تكون هناك طرق كثيرة أفضل أجهلها حالياً ..
# الطريقة الأولى /
التبليغ عن طريق البريد الإلكتروني و هي من أسهل الطرق و تعتمد على أمر إرسال بريد إلكتروني بلغة php و هي :
mail("email@domain.ltd","subject","message");
و طبعاً كما تلاحظون هناك خانة لكتابة البريد الإلكتروني الذي ترسل الرسالة له و كذلك موضوع الرسالة و محتوى الرسالة ..
طبعاً في هذه الطريقة يتم إستبدال البريد الإلكتروني السابق ببريد المبرمج و قد لا يهم كتابة موضوع للرسالة حتى لا يكون لافت للإنتباه .. يمكن وضع رمز - أو . ..
و طبعاً يتم وضع أحد المتغيرات المذكورة سابقاً بدلاً من message ..
مثال :
mail("reda1@flashmail.com","---","$HTTP_REFERER");
و طبعاً يوضع الأمر غالباً كما ذكرنا سابقاً في ملف التركيب بعد أمر زراعة قاعدة البيانات مثلاً ..
# الطريقة الثانية /
طريقة ربما فيها قليل من الصعوبة لكنها عملية و مفيدة ..
هي تعتمد على وضع كود بسيط في ملف تركيب السكربت يقوم بفتح سكربت في موقع المبرمج طبعاً مع إرسال المعلومات المطلوبة و يتم تخزين رابط الموقع مثلاً في قاعدة بيانات السكربت الموضوع في موقع المبرمج ..
و فكرتها كالتالي :
السكربت الذي يوضع في موقع المبرمج و ستحتاج لعمل قاعدة بيانات مثل هذه :
CREATE TABLE `code` (
`id` int(10) unsigned NOT NULL auto_increment,
`url` varchar(255) NOT NULL default '',
PRIMARY KEY (`id`),
KEY `id` (`id`)
) TYPE=MyISAM;
حسب السابق أسمينا الجدول code و هو يحتوي على حقل للرقم التسلسلي id و حقل لحفظ رابط المواقع التي قامت بتركيب السكربت و هو حقل url .. يمكن مستقبلاً و حسب إحتراف المبرمج إضافة حقول أخرى تاريخ التركيب مثلاً لن أتطرق لها بهذا الدرس لعدم أهميتها !! ..
طبعاً سنحتاج بعد هذا للسكربت الذي يقوم المبرمج بوضعه بموقعه و فيه يتم تخزين رابط موقع المستخدم بقاعدة البيانات و هو كالتالي و لنفترض أن إسمه site.php :
<?php
$dbserver="localhost";
$dbusername="";
$dbpassword="";
$dbname="code";
mysql_connect($dbserver,$dbusername,$dbpassword);
mysql_select_db($dbname);
if(isset($url)){
mysql_query("INSERT INTO code (url)VALUES('$url')");
}
?>
طبعاً كما هو ملاحظ قمنا بالسطور الأربعة الأولى بوضع كود التعرف على قاعدة بيانات ثم بالسطرين التي تلتها كود لعمل إتصال بقاعدة البيانات و في السطر السابع وضعنا شرط متعلق بأن لا تعمل الأوامر التي بداخله إلا إذا كان الرابط على الشكل site.php?url=http://www.domain.ltd مثلاً ..
و الأمر الذي بداخله هو أمر إدراج في قاعدة البيانات قيمة المتغير url و الذي سيكون رابط موقع المستخدم ..
بقي علينا كتابة الكود الذي نضعه في ملف التركيب install.php ..
@fopen("http://localhost/code/site.php?url=http://"."$HTTP_HOST"."$PHP_SELF","r");
طبعاً كما ذكرنا يوضع هذا الكود بعد أمر زراعة قاعدة البيانات في ملف التركيب و نلاحظ فيه أمر فتح رابط و هو رابط السكربت الذي قمنا بعمله قبل قليل و الذي نضعه بموقع المبرمج و نلاحظ أن المتغير url سيحمل فيه قيمة هي عبارة عن رابط الموقع + رابط الملف بعكس الطريقة السابقة وضعنا فيها الصفحة التي سبقت تنفيذ الكود .. و طبعاً عند فتح رابط صفحة بالشكل السابق سيكون تلقائياً رابط موقع المستخدم مسجلاً فيه و من ثم يتم تخزينه بقاعدة البيانات ..
# كيف سنعرف المواقع التي تم حفظ رابطها ؟!!
إما بفتح القاعدة و قراءة محتوياتها المخزنة أو عمل سكربت يستعرض الروابط المخزنة بالقاعدة و هو كالتالي :
<?php
$dbserver="localhost";
$dbusername="";
$dbpassword="";
$dbname="code";
mysql_connect($dbserver,$dbusername,$dbpassword);
mysql_select_db($dbname);
if(isset($url)){
mysql_query("INSERT INTO code (url)VALUES('$url')");
}
if(isset($site)){
$query=mysql_query("SELECT url FROM code ORDER BY id DESC");
while($result=mysql_fetch_array($query)){
echo "$result[url]"."<br>";
}
}
?>
طبعاً هذا السكربت نفسه نفس السابق site.php لكن أضفنا عليه شرط و هو site فإذا كتب في المتصفح تم عرض الروابط المخزنة بقاعدة البيانات ..
و يمكن عرضه عن طريق الرابط :
site.php?site=show مثلاً ..
درسنا اليوم درس ثقيل .. و يحتاج علبة مشروب غازي للتهضيم ..
و يأتي هذا الدرس بناء على طلب أحد الإخوة حيث أراد معرفة كيفية وضع كود تبليغ في السكربتات التي ينتجها ..
و هنا إن شاءالله سأشرح طريقتين بسيطتين لعمل ذلك ..
و لعل البعض قد ينزعج و يقول أني أساعد على عمل برامج ملغمة هههههههههه .. لكن أنا على قناعة أن كل مبرمج سكربت له الحرية في معرفة مستخدمي برنامجه و ليس هذا مجال للنقاش فهيا بنا إلى الشرح ..
غالباً يتم وضع كود التبليغ في ملف تركيب السكربت install.php مثلاً ..
و بالطبع بهذا الملف يتم زراعة قاعدة البيانات على الغالب و من ثم بعد تركيب القاعدة يتم عمل كود التبليغ ..
لذا فالسكربتات التي تحتاج لزراعة القاعدة يدوياً غالباً لا يكون فيها كود تبليغ ..
و التبليغ غالباً يكون عن رابط الموقع الذي قام بتركيب السكربت .. و يتم ذلك عن طريق الإستعلام بمتغيرات و غالباً تستخدم المتغيرات التالية :
- $HTTP_REFERER و هو يقوم بجلب الصفحة الأخيرة التي فتحت بالمتصفح قبل تنفيذ الكود ..
- $HTTP_HOST و هو يقوم بجلب رابط الموقع ..
- $PHP_SELF يقوم بجلب رابط الملف ..
كما أنه بعض المبرمجين يضع في ملف الكونفج متغير $SITEURL مثلاً لكي يتم وضع رابط الموقع من قبل المستخدم و من ثم عند التبليغ يتم إرسال ما كتبه المستخدم في هذا المتغير ..
و لعمل كود تبليغ في السكربت الخاص بك هناك طريقتين حسب علمي و قد تكون هناك طرق كثيرة أفضل أجهلها حالياً ..
# الطريقة الأولى /
التبليغ عن طريق البريد الإلكتروني و هي من أسهل الطرق و تعتمد على أمر إرسال بريد إلكتروني بلغة php و هي :
mail("email@domain.ltd","subject","message");
و طبعاً كما تلاحظون هناك خانة لكتابة البريد الإلكتروني الذي ترسل الرسالة له و كذلك موضوع الرسالة و محتوى الرسالة ..
طبعاً في هذه الطريقة يتم إستبدال البريد الإلكتروني السابق ببريد المبرمج و قد لا يهم كتابة موضوع للرسالة حتى لا يكون لافت للإنتباه .. يمكن وضع رمز - أو . ..
و طبعاً يتم وضع أحد المتغيرات المذكورة سابقاً بدلاً من message ..
مثال :
mail("reda1@flashmail.com","---","$HTTP_REFERER");
و طبعاً يوضع الأمر غالباً كما ذكرنا سابقاً في ملف التركيب بعد أمر زراعة قاعدة البيانات مثلاً ..
# الطريقة الثانية /
طريقة ربما فيها قليل من الصعوبة لكنها عملية و مفيدة ..
هي تعتمد على وضع كود بسيط في ملف تركيب السكربت يقوم بفتح سكربت في موقع المبرمج طبعاً مع إرسال المعلومات المطلوبة و يتم تخزين رابط الموقع مثلاً في قاعدة بيانات السكربت الموضوع في موقع المبرمج ..
و فكرتها كالتالي :
السكربت الذي يوضع في موقع المبرمج و ستحتاج لعمل قاعدة بيانات مثل هذه :
CREATE TABLE `code` (
`id` int(10) unsigned NOT NULL auto_increment,
`url` varchar(255) NOT NULL default '',
PRIMARY KEY (`id`),
KEY `id` (`id`)
) TYPE=MyISAM;
حسب السابق أسمينا الجدول code و هو يحتوي على حقل للرقم التسلسلي id و حقل لحفظ رابط المواقع التي قامت بتركيب السكربت و هو حقل url .. يمكن مستقبلاً و حسب إحتراف المبرمج إضافة حقول أخرى تاريخ التركيب مثلاً لن أتطرق لها بهذا الدرس لعدم أهميتها !! ..
طبعاً سنحتاج بعد هذا للسكربت الذي يقوم المبرمج بوضعه بموقعه و فيه يتم تخزين رابط موقع المستخدم بقاعدة البيانات و هو كالتالي و لنفترض أن إسمه site.php :
<?php
$dbserver="localhost";
$dbusername="";
$dbpassword="";
$dbname="code";
mysql_connect($dbserver,$dbusername,$dbpassword);
mysql_select_db($dbname);
if(isset($url)){
mysql_query("INSERT INTO code (url)VALUES('$url')");
}
?>
طبعاً كما هو ملاحظ قمنا بالسطور الأربعة الأولى بوضع كود التعرف على قاعدة بيانات ثم بالسطرين التي تلتها كود لعمل إتصال بقاعدة البيانات و في السطر السابع وضعنا شرط متعلق بأن لا تعمل الأوامر التي بداخله إلا إذا كان الرابط على الشكل site.php?url=http://www.domain.ltd مثلاً ..
و الأمر الذي بداخله هو أمر إدراج في قاعدة البيانات قيمة المتغير url و الذي سيكون رابط موقع المستخدم ..
بقي علينا كتابة الكود الذي نضعه في ملف التركيب install.php ..
@fopen("http://localhost/code/site.php?url=http://"."$HTTP_HOST"."$PHP_SELF","r");
طبعاً كما ذكرنا يوضع هذا الكود بعد أمر زراعة قاعدة البيانات في ملف التركيب و نلاحظ فيه أمر فتح رابط و هو رابط السكربت الذي قمنا بعمله قبل قليل و الذي نضعه بموقع المبرمج و نلاحظ أن المتغير url سيحمل فيه قيمة هي عبارة عن رابط الموقع + رابط الملف بعكس الطريقة السابقة وضعنا فيها الصفحة التي سبقت تنفيذ الكود .. و طبعاً عند فتح رابط صفحة بالشكل السابق سيكون تلقائياً رابط موقع المستخدم مسجلاً فيه و من ثم يتم تخزينه بقاعدة البيانات ..
# كيف سنعرف المواقع التي تم حفظ رابطها ؟!!
إما بفتح القاعدة و قراءة محتوياتها المخزنة أو عمل سكربت يستعرض الروابط المخزنة بالقاعدة و هو كالتالي :
<?php
$dbserver="localhost";
$dbusername="";
$dbpassword="";
$dbname="code";
mysql_connect($dbserver,$dbusername,$dbpassword);
mysql_select_db($dbname);
if(isset($url)){
mysql_query("INSERT INTO code (url)VALUES('$url')");
}
if(isset($site)){
$query=mysql_query("SELECT url FROM code ORDER BY id DESC");
while($result=mysql_fetch_array($query)){
echo "$result[url]"."<br>";
}
}
?>
طبعاً هذا السكربت نفسه نفس السابق site.php لكن أضفنا عليه شرط و هو site فإذا كتب في المتصفح تم عرض الروابط المخزنة بقاعدة البيانات ..
و يمكن عرضه عن طريق الرابط :
site.php?site=show مثلاً ..