المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : [ درس ] نظام الرسائل الخاصه بشكل مبسط .


admin
08-20-2009, 06:47 PM
بسم الله الرحمن الرحيم .
بعد تحية الاسلام نقولها لكم أعزكم الله بالاسلام واعاد عليكم رمضان بالخير واليمن والبركات .

هيا بنا نبدا بشرح وتحليل الدرس
أولا إذا ارد احدا ان يبرمج مجله معها نظام رسائل خاص للاعضاء نوفر عليه العناء ونعطيه شرح مبسط لها
سنبدا بالجداول وسنبدا بجدول الرسائل المسمى بـــ pm

CREATE TABLE `pm` (
`id` int(10) unsigned NOT NULL auto_increment,
`title` varchar(255) NOT NULL,
`subject` varchar(255) NOT NULL,
`uid` varchar(255) NOT NULL,
`visit` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM;

id معروف ليحمل لكل رساله رقم .
title عنوان الرساله
subject موضوع الرساله
uid هذا سيحمل رقم العضو المرسل اليه الرساله .
visit هذا سيحمل قيمه اذا تمت قراه الرساله ام لا .

نيجى لجدول الاعضاء .

CREATE TABLE `user` (
`id` int(10) unsigned NOT NULL auto_increment,
`user` varchar(25) NOT NULL,
`pass` varchar(25) NOT NULL,
`mail` varchar(25) NOT NULL,
`pm` varchar(25) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM ;
id معروف ليحمل لكل عضو رقم .
user ليحمل اسم العضو .
pass ليحمل الباس
mail ليحمل البريد
pm ليحمل كم عدد الرسائل الغير مقروئه .
اولا هذا الجدول جدول عادى لكن هنا سنركز فقط على
حقل user وحقل pm المتصلان بالجدول الاخر
-------------------------------------------------------------------------/
نبدا بصفحات البرمجة .
أولا الاتصال بالقاعده عن طريسق ملف الكونفج .

<?php

$host="localhost";
$dbname="";
$dbuser="";
$dbpass="";

///////

mysql_connect($host,$dbuser,$dbpass) or die("فشل الإتصال بقاعدة البيانات");
mysql_select_db($dbname,$conn) or die("فشل الإتصال بقاعدة البيانات");


?>

ثانيا هنعمل ملف لاستخراج اسماء العضويات وهنحط جبيهم لينكين واحد يودى للصندوق الوارد والتانى لارسال رساله جديده للعضو المختص .
هنسميه Index.php

<?
include("config.php");
$sql = mysql_query("SELECT * FROM user ORDER BY id");
while($row = mysql_fetch_array($sql)){
echo "$row[user]&nbsp; <a href='user.php?id=$row[id]'>أرسل رساله خاصه</a>
&nbsp; &nbsp; <a href='inbox.php?id=$row[id]'>صندوق الوارد</a>
";
if($row[pm] > 0){
echo "لديك $row[pm] رساله جديده <br>";
}
}
?>

فى السطر الاول هنتصل بالقاعده عن طريق ادراج ملف الكونفج عن طريق انكلود
فى السطر الثانى عمليه للقاعده واستعلام واستخراج اسماء العضويات الموجوده والترييب عن طريق الاى دى .
فى السطر الثالث داله while التى تستخدم لتكرار الطبع فى حين وجود بيانات لم تستخرج بعد من الجدول
فى السطر الرابع امر طباعه لاسم العضويه وجمبيها لينك يودى لارسال رساله جديده لاسم العضو
بعديها برده امر طبع للينك يودى للصندوق الوارد الخاص بالعضو
حلقه if اللى بعدها دى نتاكد من حقل pm لو اكتر من 0 نطبعمتغير pm الذى يحمل عدد الرسائل الغير مقروئه فى رساله لديك -- رساله غير مقروئه .
المتغيرات تحمل الموجود اللى فى الحقول .
-----------------------------------------------------------------/
ثالثا ملفuser.php
هنقسم شرح الملف دا لانه تقريبا فيه دعك كتير
<?
include("config.php");
$id = intval($_GET['id']);
$sql = mysql_query("SELECT * FROM user WHERE id = '$id'");
while($rows= mysql_fetch_array($sql)){
echo "
<form method='post' action='user.php?act=sendpm'>
TO : <input type='text' name='to' value='$rows[user]'><br>
title: <input type='text' name='title'><br>
<textarea rows='15' name='msg' cols='58' dir='rtl'></textarea><br>
<input type='submit' value='send'>
";
}

فى السطر الاول عملنا ادراج ملف كونفج للاتصال بالقاعده .
فى السطر اتانى عملنا متغير يحمل داله intval لفلتره اللى جاى عن طريق المتصفح وعمله رقم بس .
المتغير sql يحمل امر استخراج من قاعده البيانات يستخرج من جدول الاعضاء لما يكون الاى دى لخاص بالعضو يساوى الرقم اللى جاى من المتصفح لاننا محتاجين اسم العضو اللى هنرسله الرساله .
داله while شرحناها فوق
هنا فى امر الطبع عملنا فورم ارسال يحمل 3 خانات
أول خانه فيها اسم العضو اللى استخرجناه من المتغير rows علشان كدا احنا عملنا فى الـ value
متغير يحمل قيمه الموجود فى الحقل .
الحقل التانى عنوان الرساله والثالث موضوع الرساله
واخر حاجه طبعا زر الارسال .

جزء الملف التانى هيبقى عباره عن داله سويتش

switch($_GET['act']){
case sendpm:
$to = $_POST['to'];
$sql2 = mysql_query("SELECT * FROM user where user='$to'");
$row = mysql_fetch_array($sql2);
$title = $_POST['title'];
$text = $_POST['msg'];
$query = mysql_query("INSERT INTO pm (uid,title,subject) values ('$row[id]', '$title','$text')");
$pm = $row['pm']+1;
$pmquery = mysql_query("UPDATE user set pm='$pm' where id='$row[id]'");
break;
}

داله سويتش هنا استخدمنااها علشان عملنا فى الفورم رابط ارساله هيبقى كدا
user.php?act=sendpm
المتغير to يحمل قيمه الخانه اللى فيها اسم العضو
بعدها عملنا متغير يعمل استخراج من جدول الاعضاء لما يكون اسم العضو يساوى المتغير to
المتغير row يعمل استخراج للعضو فقط مش كل الاعضاء لاننا مش محتاجينهم طبعا .
المتغير title يحمل القيمه المرسله لعنوان الرساله
المتغير subject يحمل القيمه المرسله لموضوع الرساله
المتغير query يحمل امر ادخال فى الجدول بالبيانات السابقه .
فى عمليه الادخال عندنا حقل اسمه uid دا دخلنا فيه قيمه المتغير اللى يحمل رقم الاى دى الخاص بالعضو اللى هنبعتله الرساله علشان نستخدمه فى استخراج الرسائل الخاصه بالعضو .
المتغير pm يحمل قيمه المتغير pm بالاضافه لواحد يعنى كل لما نعمل رساله نزود واحد على قيمه الحقل .
المتغير pmquery هو تعديل للحقل بتغييره الى قيمه المتغير pm فى حين الاى دى يخص العضو المرسل اليه .
Break لايقاف الحاله .

---------------------------------------------------------------------------/
رابعا ملف صندوق الوارد inbox.php

<?
include("config.php");
$id = intval($_GET['id']);
$sql= mysql_query("SELECT * FROM pm where uid='$id'");
while($row = mysql_fetch_array($sql)){
echo "<a href='pm.php?id=$row[id]'>$row[title]</a><br>";
}
?>

السطر الاول اتصال بالقعده
المتغير id سبق وشرحناه .
المتغير sql امر استخراج من الرسائل فى حين الحقل uid يساوى المتغير id
يعنى يعمل استخراج للرسائل فى صندوق الوارد الخاص بالعضو فقط .
while شرحناها
هنا طبعنا عنوان الرساله حامله لرابط يرسلنا الى قرائه الرساله .

---------------------------------------------------------------------------------------/

خامسا ملف قراءه الرسائل pm.php
على جزئين

<?
include("config.php");
$id = intval($_GET['id']);
$sql = mysql_query("SELECT * FROM pm WHERE id='$id'");
$row = mysql_fetch_array($sql);
echo "<font face='tahoma' size='2'>$row[title]</font><br>
<b><font face='arial' size='3'>$row[subject]</font><b>";
if($row){
$visit = mysql_query("UPDATE pm set visit='1' where id ='$id'");
}

اتصال وفلتره
المتغير sql يعمل على استخراج الرساله عندما يكون رقمها زى رقم الاللى جاى من المتصفح .
المتغير Row للاستخراج
طبعنا هنا العنوان وبعديه الموضوع
طبعا التنسيق هنا للتفريق علشان عملنا العنوان بفونت تاهوما والموضوع بفونت اريال
حلقه if للتاكد من عمل المتغير علشان لما يستخرج من القاعده
نعمل متغير visit لتغير الحقل visit الى رقم واحد
طب ليه علشان ناكد ان الرساله اتقرات .

الجزء التانى

if($row['visit'] == "1"){
die();
}else{
$sql2 = mysql_query("SELECT pm FROM user where id='$row[uid]'");
$rows = mysql_fetch_array($sql2);
$pm = $rows['pm']-1;
$sql = mysql_query("UPDATE user set pm='$pm' where id='$row[uid]'");
}
?>

فى الجزء دا بنتاكد من حلقه if يعنى لو الحقل visit يساوى واحد ميعملش اى كود من اللى تحتيه ليه بقى
علشان نفرض لو مفيش حقل visit من اساسه يبقى كل ما هندخل عليها هنقص من حقل pm اللى موجود فى حقل العضو على الفاضى .
هنا بقى لو المتغير ميساويش واحد هنعمل
متغير استخراج من حقل Pm لما يكون الاى دى يساوى الحقل uid اللى يساوى اى دى العضويه .
المتغير rows للاستخراج
متغير pm يحمل عمليه حسابيه بتنقيص واحد من قيمه المدخل .
هنا بقى واخر حاجه ام رتعديل لحقل pm ليكون قيمه المتغير pm السابق
------------------------------------------------------------------------------------------------------

طبعا ادخال العضويات يدوى وكل حاجه يدوى
كل اللى انا عملته انى اديتك الفكره وانت تتطور بقى
طبعا كل المدخلات مش محميه .

يعنى لو فيه خطأ فى الشرح او حاجه مش مفهومه قولى وانا هصلحها باذن الله
وما توفيقى الابالله .

حمل (http://www.traidnt.net/vb/attachment.php?attachmentid=402123&d=1250440184)
منقول

Bmx DZ
08-30-2009, 06:02 PM
مشكور اخي ياسر

admin
08-30-2009, 06:16 PM
العفو أخي وشكرا لي مرورك

farid.fr
09-20-2009, 01:49 AM
thank's for this lerneit's very good

أبوأريج
12-13-2009, 08:28 AM
يسلمو عالموضووووع

said
02-11-2010, 09:45 PM
يعطيك االف عاافيه