تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[مقال] كيفية برمجة منتدى TextForum بدون قاعدة بيانات
#1
بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله و بركاته
[مشروع] فكرة ادارة بيانات في ملفات نصية

هذا المثال للتطبيقات المكتبية
وايضا تنفع مع الويب
من مهتم لعمل كم صفحة نقاش وتفاعل ويتم تخزين المشاركات في ملف نصي؟
ولحماية الملف النصي نستبدل اللاحقة بامتداد .config
ليقوم السيرفر بحماية الملف من القراءة من المتصفح.

HtmlAgilityPack
جربت الفكرة بسيرفر فيجوال استوديو وتم الامر بشكل ممتاز
من يهمه الامر يكتب رد
شكر الله لكم جميعا
#2







صفحة الماستر بيج 
العمل سيكون ببطء حسب المزاااج
Smile
التجربة ستكون محليا فقط وعند الانتهاء باذن الله تعالى اجربها على الاستضافة هنا
انتظرونا ببطء
#3
لاول مرة في حياتي ابرمج بالجافاسكريبت ووقعت بعقبات!!!
اذا كانت الصفحة تابعة للماستر بيج لايتم التعامل مع الجافاسكريبت نهائيا وكانها غير موجودة!!!

(04-11-21, 04:32 AM)سعود كتب :
لاول مرة في حياتي ابرمج بالجافاسكريبت ووقعت بعقبات!!!
اذا كانت الصفحة تابعة للماستر بيج لايتم التعامل مع الجافاسكريبت نهائيا وكانها غير موجودة!!!

الوضع بسيط كانت المشكلة هي عدم تفريقي بين الصفحة المربوطة وغير المربوطة وايضا مكان وضع السكريبت  حيث يجب وضعه في   ContentPlaceHolderID="head"
وايضا التعريفات يجب ان تكون هكذا
PHP كود :
var tuser document.getElementById("<%=Txtusername.ClientID%>"); 
والباقي عاادي.
#4

تم الانتهاء من صفحة الـdefault  و صفحة تسجيل الدخول بمميزات واشتراطات عدة وكذلك تسجيل عضوية ولا زال الوقت مبكر 
تحياتي للجميع.

جملة تسجيل عضوية جديدة

كود :
Dim n As String = "<user id=" & GetId() & " name=" & txtusername.Text & " pass=" & txtpassword.Text & " mail=" & txtemail.Text & " ip=" & myip() & " date='" & Now.ToString & "' act='false' blocked='false' cpuid='" & CpuId() & "' />"

هذا سطر اولي لاسناد القيم
فقط انتظروا هذا ليس كل شيء
HtmlAgilityPack
هذه الاداة هي اللتي تجعل  السطر فعال
........

التالي صفحة كود الاضافة بشكل كامل

PHP كود :
Public Class WebForm5
    Inherits System
.Web.UI.Page
    Dim doc 
As HtmlAgilityPack.HtmlDocument
    Dim fl 
As String Server.MapPath("~\pages\usersfile.config")

 
   Protected Function myip() As String
        Dim sIPAddress 
As Object
        sIPAddress 
Request.ServerVariables("HTTP_X_FORWARDED_FOR")
 
       If sIPAddress "" Then sIPAddress Request.ServerVariables("REMOTE_ADDR")
 
       Return sIPAddress
    End 
Function

 
   Protected Function Namefound(ByVal un As String) As Boolean
        If Not IsNothing
(doc.DocumentNode.SelectNodes("//user[@name='" un "']")) Then
            Return True
        Else
            Return False
        End 
If
 
   End Function
 
   Protected Function Mailfound(ByVal un As String) As Boolean
        If Not IsNothing
(doc.DocumentNode.SelectNodes("//user[@mail='" un "']")) Then
            Return True
        Else
            Return False
        End 
If
 
   End Function

 
   Protected Function Isok(ByVal un As StringByVal ps As String) As Boolean
        If Not IsNothing
(doc.DocumentNode.SelectNodes("//user[@name='" un "' and @pass='" ps "']")) Then
            Return True
        Else
            Return False
        End 
If
 
   End Function

 
   Protected Function GetId() As Integer
        If Not IsNothing
(doc.DocumentNode.SelectNodes("//user")) Then
            Dim ucount 
As Integer doc.DocumentNode.SelectNodes("//user").Count
            Dim icount 
As Integer
            icount 
doc.DocumentNode.SelectNodes("//user")(ucount 1).Attributes("id").Value
            Return icount 
1
        Else
            Return 1
        End 
If
 
   End Function


 
   Protected Sub Page_Load(ByVal sender As ObjectByVal e As System.EventArgsHandles Me.Load
        doc 
= New HtmlAgilityPack.HtmlDocument
        doc
.Load(fl)
 
   End Sub

    Protected Sub btnadd_Click
(sender As ObjectAs EventArgsHandles btnadd.Click
        If Namefound
(txtusername.TextThen
            lblmsg
.Text "الاسم محجوز"
 
           Exit Sub
        End 
If

 
       If Mailfound(txtemail.TextThen
            lblmsg
.Text "الايميل محجوز"
 
           Exit Sub
        End 
If

 
       Dim n As String "<user id=" GetId() & " name=" txtusername.Text " pass=" txtpassword.Text " mail=" txtemail.Text " ip=" myip() & " date='" Now.ToString "' act='false' blocked='false' cpuid='" CpuId() & "' />"
 
       Dim br As HtmlAgilityPack.HtmlNode HtmlAgilityPack.HtmlNode.CreateNode(vbCrLf)
 
       If GetId() = 0 Then
            doc
.DocumentNode.AppendChild(br)
 
       End If

 
       doc.DocumentNode.AppendChild(newChild:=HtmlAgilityPack.HtmlNode.CreateNode(n))
 
       doc.DocumentNode.AppendChild(br)
 
       doc.Save(fl)
 
       Response.Redirect("~\login.aspx")
 
   End Sub
End 
Class 
والتالي صفحة الدخول
PHP كود :
Public Class WebForm4
    Inherits System
.Web.UI.Page
    Dim doc 
As HtmlAgilityPack.HtmlDocument
    Dim fl 
As String Server.MapPath("~\pages\usersfile.config")
 
   Protected Function Isok(ByVal un As StringByVal ps As String) As Boolean
        If Not IsNothing
(doc.DocumentNode.SelectNodes("//user[@name='" un "' and @pass='" ps "']")) Then
            Return True
        Else
            Return False
        End 
If
 
   End Function
 
   Protected Function IsActive(ByVal un As String) As Boolean
        If Not IsNothing
(doc.DocumentNode.SelectNodes("//user[@name='" un "' and @act='true']")) Then
            Return True
        Else
            Return False
        End 
If
 
   End Function
 
   Protected Sub Page_Load(ByVal sender As ObjectByVal e As System.EventArgsHandles Me.Load
        If Not IsNothing
(Session("user")) Then
            Response
.Redirect("~\default.aspx")
 
       End If
 
       doc = New HtmlAgilityPack.HtmlDocument
        doc
.Load(fl)
 
   End Sub
    Protected Sub btnlogin_Click
(sender As ObjectAs EventArgsHandles Btnlogin.ClickBtnlogin.ClickBtnlogin.ClickBtnlogin.ClickBtnlogin.ClickBtnlogin.ClickBtnlogin.ClickBtnlogin.ClickBtnlogin.Click
        If Isok
(Txtusername.TextTxtpassword.TextThen
            Session
("user") = Txtusername.Text
            If IsActive
(Txtusername.Text) = False Then
                Lblmsg
.Text "لم يتم تنشيط حسابك ... يبدو انك لم تنقر رابط التنشيط المرسل الى بريدك"
 
           Else
                Response
.Redirect("~\default.aspx")
 
           End If
 
       Else
            Lblmsg
.ForeColor Drawing.Color.White
            Lblmsg
.Text "لم نعثر على بيانات مطابقة لما كتبت"
 
       End If
 
   End Sub
End 
Class 

دققوا كيف يتم ربط المنتدى بالقسم
forum qid=qesm id
وبنفس الطريقة المواضيع وردودها

صفحة الـ default.aspx الرئيسية تقوم بجلب الاقسام الرئيسية وكل قسم عبارة عن كونتول مخصص ايضا يحتضن الفروع من المنتديات
PHP كود :
Public Class WebForm1
    Inherits System
.Web.UI.Page
    Dim fl 
As String Server.MapPath("~\pages\aqsam.config")
 
   Dim doc As HtmlAgilityPack.HtmlDocument
    Protected Sub gd
()
 
       doc = New HtmlAgilityPack.HtmlDocument
        doc
.Load(fl)
 
       fq fl
        If Not IsNothing
(doc.DocumentNode.SelectNodes("//qesm")) Then
            Dim qcount 
As Integer doc.DocumentNode.SelectNodes("//qesm").Count
            For i 
As Integer 0 To qcount 1
                Dim q 
As qesm CType(LoadControl("~\pages\qesm.ascx"), qesm)
 
               q.qd.Text doc.DocumentNode.SelectNodes("//qesm")(i).Attributes("id").Value
                q
.hL.Text doc.DocumentNode.SelectNodes("//qesm")(i).Attributes("name").Value
                q
.Ldesc.Text doc.DocumentNode.SelectNodes("//qesm")(i).Attributes("qdesc").Value
                q
.hL.NavigateUrl "~\theqesm.aspx?qid=" q.qd.Text "&qname=" q.hL.Text "&qdesc=" q.Ldesc.Text
                aqsams
.Controls.Add(q)
 
           Next
        End 
If
 
   End Sub
    Protected Sub Page_Load
(ByVal sender As ObjectByVal e As System.EventArgsHandles Me.Load
        gd
()
 
   End Sub
End 
Class 
والتالي كود عنصر التحكم الخاص بالاقسام وكيف هو ايضا يحتضن المنتديات
PHP كود :
Public Class qesm
    Inherits System
.Web.UI.UserControl
    Dim doc 
As HtmlAgilityPack.HtmlDocument
    Protected Sub gd
()
 
       doc = New HtmlAgilityPack.HtmlDocument
        doc
.Load(fq)
 
       If Not IsNothing(doc.DocumentNode.SelectNodes("//forum")) Then
            Dim fcount 
As Integer doc.DocumentNode.SelectNodes("//forum[@qid='" Lid.Text "']").Count
            For i 
As Integer 0 To fcount 1
                Dim q 
As forum CType(LoadControl("~\pages\forum.ascx"), forum)
 
               q.hL.Text doc.DocumentNode.SelectNodes("//forum[@qid='" Lid.Text "']")(i).Attributes("name").Value
                q
.Ldesc.Text doc.DocumentNode.SelectNodes("//forum[@qid='" Lid.Text "']")(i).Attributes("fdesc").Value
                q
.ffd.Text doc.DocumentNode.SelectNodes("//forum[@qid='" Lid.Text "']")(i).Attributes("id").Value
                q
.hL.NavigateUrl "~\theforum.aspx?fid=" q.ffd.Text "&fname=" q.hL.Text "&fdesc=" q.Ldesc.Text
                pnlforums
.Controls.Add(q)
 
           Next
        End 
If
 
   End Sub
    Public Property hL 
As HyperLink
        Get
            Return hlt
        End Get
        Set
(ByVal hlt As HyperLink)
 
           hL hlt
        End Set
    End Property
    Public Property Ldesc 
As Label
        Get
            Return lbdesc
        End Get
        Set
(ByVal lbdesc As Label)
 
           Ldesc lbdesc
        End Set
    End Property
    Public Property qd 
As Label
        Get
            Return Lid
        End Get
        Set
(ByVal lid As Label)
 
           qd lid
        End Set
    End Property
    Protected Sub Page_Load
(sender As ObjectAs EventArgsHandles Me.Load
        gd
()
 
   End Sub
End 
Class 

التالي عنصر تحكم الـ forum لكنه غير كامل وانما فقط الان تعميم خصائص الادوات
PHP كود :
Public Class forum
    Inherits System
.Web.UI.UserControl
    Public Property hL 
As HyperLink
        Get
            Return hlt
        End Get
        Set
(ByVal hlt As HyperLink)
 
           hL hlt
        End Set
    End Property
    Public Property Ldesc 
As Label
        Get
            Return lbdesc
        End Get
        Set
(ByVal lbdesc As Label)
 
           Ldesc lbdesc
        End Set
    End Property
    Public Property Ld 
As Label
        Get
            Return lrdod
        End Get
        Set
(ByVal lrdod As Label)
 
           Ld lrdod
        End Set
    End Property
    Public Property ffd 
As Label
        Get
            Return fd
        End Get
        Set
(ByVal fd As Label)
 
           ffd fd
        End Set
    End Property
End 
Class 

ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ



في عنصر التحكم واجهت مشكلة عدم الامكانية للوصول الـ server.mapPath فلجات الى بعد الله الى تعريف متغير عمومي بموديول واسند له في صفحة عادية واستخدمها في هذا العنصر.

تصور لم استخدم اي قاعدة بيانات لا أكسس و لا sqlserver
!!!
تجاربي مع الفكرة في السيرفر المحلي Localhost والامور جيدة لكن يتبقى الاستضافة لها شؤون اخرى قد تمنع او تقيد الله اعلم لكن حتى يتبين كل شيء ساظل اجرب محليا ان شاء الله تعالى.
#5
السلام عليكم ورحمة الله وبركاته
اخي الغالي سعود .. لك كل الحب والاحترام
عندما لا ارى تجاربك البرمجية الجديدة في المنتدى ينسل الكسل والخمول الي وأحس انني محبط
ولكن مع كل مشاركة جديدة لك اجد شيئا اتابعه وبذلك تنشط همتي ويزداد حماسي ايضا
والامر نفسه مع باقي تجارب الاخوة الاعضاء والتي بمجموعها تدب الحركة والنشاط في منتدانا الجميل
دمت بخير ودامت همتك عالية بإذن الله
اعمل الخير واجرك لاتنتظره فالله خير من اليك يرده
البرمجة ليست مجرد كود بل هي منهج تفكير منطقي لحل المشكلات







تم الشكر بواسطة: asemshahen5 , سعود , مصمم هاوي , مصمم هاوي
#6
أخي سعود بارك الله فيك وأعانك ووفقك

موضوعك يشجع على التجربة فعلا وعلى تعلم اشياء جديدة

ملاحظة صغيرة جدا رأيت في الكود اللذي ذكرته في المشاركة & txtusername.Text & وهو من الممكن ان يستخدم للحقن داخل كود الصفحة اذا ادخل المستخدم مثلا نصا برمجيا في ال txtusername مثل ما يحدث في ال SQL Injection

لا اعلم على وجه التحديد ما هو الحل ولكني اعلم انه يجب تحصين وفلترة مدخلات المستخدم 


وبارك الله فيك حرصك على مشاركة هذا الجهد معنا
تم الشكر بواسطة: سعود , asemshahen5 , asemshahen5 , ابراهيم ايبو
#7
(05-11-21, 12:19 AM)ابراهيم ايبو كتب : السلام عليكم ورحمة الله وبركاته
اخي الغالي سعود .. لك كل الحب والاحترام
عندما لا ارى تجاربك البرمجية الجديدة في المنتدى ينسل الكسل والخمول الي وأحس انني محبط
ولكن مع كل مشاركة جديدة لك اجد شيئا اتابعه وبذلك تنشط همتي ويزداد حماسي ايضا
والامر نفسه مع باقي تجارب الاخوة الاعضاء والتي بمجموعها تدب الحركة والنشاط في منتدانا الجميل
دمت بخير ودامت همتك عالية بإذن الله
 الله يسعدك ويوفقك دنيا وآخرة اسعدني مرورك
(05-11-21, 01:46 AM)Anas Mahmoud كتب : أخي سعود بارك الله فيك وأعانك ووفقك

موضوعك يشجع على التجربة فعلا وعلى تعلم اشياء جديدة

ملاحظة صغيرة جدا رأيت في الكود اللذي ذكرته في المشاركة & txtusername.Text & وهو من الممكن ان يستخدم للحقن داخل كود الصفحة اذا ادخل المستخدم مثلا نصا برمجيا في ال txtusername مثل ما يحدث في ال SQL Injection

لا اعلم على وجه التحديد ما هو الحل ولكني اعلم انه يجب تحصين وفلترة مدخلات المستخدم 


وبارك الله فيك حرصك على مشاركة هذا الجهد معنا

بارك الله فيك اخانا الكريم.
بصراحة لم افطن لهذا.
لكن انا استخدم الملف HtmlAgilityPack هل يمكن ان يعطي نتائج خاطئة بناءا على  نص معين؟
سنجرب باذن الله ونشوف.
شكر الله لك زيارتك للموضوع واللذي اسعدني.
بارك الله فيكم جميعا.
#8
بصدد انهاء التحكم بالاقسام
#9
السلام عليكم ورحمة الله وبركاته
بارك الله بكم وبمشاركاتكم
من اجل حل مشكلة Sql Injection هناك طريقة استخدمها في حال لم استخدم الباراميترات وهي بسيطة جدا بان استبدل اي سنكل كوتيشن يمكن ان يدخله المستخدم بلاشيئ وبهذا يتعطل النص البرمجي الممكن ادخاله بغية الأذية
بهذا الشكل :
كود :
txtusername.Text.Replace("'", "")
هذا مع قواعد البيانات اما مع الملفات النصية فأعتقد بما ان المدخل من خلال التكست بوكس ستتعطل Injection بتعطيل السنكل كوتيشن
اعمل الخير واجرك لاتنتظره فالله خير من اليك يرده
البرمجة ليست مجرد كود بل هي منهج تفكير منطقي لحل المشكلات







تم الشكر بواسطة: سعود , asemshahen5
#10
السلام عليكم ، طيب
هذه المحاولة سوف تفيدك في تعلم التعامل مع الملفات النصية والمجلدات والمسارات للملفات ..
ولكن ربما هي في الواقع هروب من التعامل مع قواعد البيانات او على الاقل تأجيلها ... اقول ربما ، واما عن نفسي فقد تهربت فعلا من التعامل مع قواعد البيانات حين بدأت بالبي اج بي بحدود عام 2002 ، ولجأت وقتها الى استخدام الملفات النصية في انشاء وبرمجة أول مدونة لي بالبي اج بي ، وبعد ذلك ندمت لاني انما اخرت تعلم قواعد البيانات فسبقني الاخرون وتأخرت انا ...
تم الشكر بواسطة: ابراهيم ايبو , سعود , asemshahen5 , asemshahen5


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  كيفية عمل صفحة ويب وربطها بتقعدة بيانات علي جهاز makky 0 292 15-06-21, 02:19 AM
آخر رد: makky
Wink [سؤال] كيفية تحويل هذة الى ويب abdalamask 0 328 09-05-21, 02:01 AM
آخر رد: abdalamask
  كيف اضيف بيانات الى gridview بدون استخدام datasource ؟؟ nowiglah 1 1,558 06-12-20, 08:36 PM
آخر رد: Osama_NY
  كيفية عرض بيانات اعضاء هيئية تدريس مع الصورة cordava 0 679 19-09-20, 07:03 PM
آخر رد: cordava
  [سؤال] خطأ عند انشاء قاعدة بيانات من داخل فجول استوديو2013 alsihran 4 1,272 31-03-20, 01:47 AM
آخر رد: Amir_Alzubidy
  كيف اسوي فورم ادخال بيانات الحكيمي 0 1,404 13-03-17, 11:01 AM
آخر رد: الحكيمي
  [C#.NET] مشكلة في حفظ بيانات cascading dmw2200 0 1,291 14-11-16, 02:08 PM
آخر رد: dmw2200
  كيف يتم بحت من خلال taxtbox وتضهر بيانات في داتا قريد فيو habib 2 1,886 29-10-16, 05:20 PM
آخر رد: أبو عمر
  كيفية انشاء قائمة بالشكل الموضح abdelbasyer 1 1,333 27-10-16, 12:37 PM
آخر رد: myalsailamy
  ماهي قاعدة البيانات المخصصة لasp.net صبري زينوبي 2 1,500 20-10-16, 03:26 PM
آخر رد: صبري زينوبي

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم