اذهب إلى المحتوى
  • 0

إستخدام البرمجة الكائنية في php لإضافة سجل جديد

Mahmoud Alrashidi

السؤال

لدي قاعدة بيانات و جدول للمقالات كل مقال له عنوان و مُحتوى و لدي هذه الصفحة تحتوي على نموذج لإضافة مقال:

 <!DOCTYPE html>
 <html dir="rtl" lang="ar">
 <head>
     <title>إضافة مقال</title>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/css/bootstrap.min.css">
    <link rel="preconnect" href="https://fonts.gstatic.com">
    <link href="https://fonts.googleapis.com/css2?family=Cairo:wght@600&display=swap" rel="stylesheet">
    <style>
        body {
            margin: 0;
            padding: 0;
            background-color: #f1f1f1;
            font-family: 'Cairo', sans-serif;
            text-align: right;
        }

        .box {
            width: 800px;
            border: 1px solid #ccc;
            background-color: #fff;
            border-radius: 5px;
            margin-top: 36px;
        }

    </style> 

</head>

 <body>
     <div class="container box p-3">
        <h3 class="text-center mt-3">إضافة مقال جديد</h3>
         <form method="post">
             <label>عنوان المقال</label>
             <input type="text" name="title" class="form-control" />
             <br />
             <label>محتوى المقال</label>
             <textarea name="body" class="form-control" rows="5"></textarea>
             <br />
             <input type="submit" name="submit" class="btn btn-info" value="أضف" />
             <span class="text-success">
                 <!-- عرض رسالة نجاح الحفظ -->
             </span>
         </form>
     </div>
 </body>

 </html>

أريد عند ملء الحقول و الضغط على زر الإضافة يتم إضافة المقال في جدول المقالات لكن أريد العملية أن تتم بإستخدام البرمجة الكائنية OOP، صنف به عملية الإتصال بقاعدة البيانات و تابع لإضافة سجل جديد.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

يُمكنك عمل ذلك بعدة طرق و هذه أحد الطرق البسيطة لعمل ذلك،

  • إنشاء صنف DB يحتوي على خاصية للإتصال بقاعدة البيانات
  • إنشاء تابع لهذا الصنف إسمه insert يأخذ مُعاملين إسم الجدول و بيانات المقال على شكل مصفوفة ترابطية نُهيء الإستعلام عن طريق مفاتيح المصفوفة و إسم الجدول 

نضع الصنف DB داخل ملف إسمه DB.php ثم نستخدم هذا الملف داخل الملف الذي ارسلته كما هو موضح أدناه:

الصنف DB:

<?php

class DB
{
  public $con; // خاصية للكائن لحفظ الإتصال
  public function __construct() // إنشاء الباني
  {
    /*
            حفظ الإتصال و تعيين الترميز
            يُمكنك هنا تعديل بيانات الإتصال لديك
        */
    $this->con = mysqli_connect("localhost", "root", "root", "test_db"); 
    mysqli_set_charset($this->con, 'utf8mb4');
    if (!$this->con) {
      echo 'Database Connection Error ' . mysqli_connect_error($this->con);
    }
  }

  /*
        دالة تأخذ إسم الجدول كمعامل أول و البيانات على شكل مصفوفة ترابطية
        حيث تكون المفاتيح هي أسماء حقول الجدول
        تقوم الدالة بإنشاء إستعلام التخزين و تنفيذه 
    */
  public function insert($table_name, $data)
  {
    /*
            if table_name = posts and data = ['title' => 'title 1', 'body' => 'post content'],
            then 
                fields = title,body 
                and values = title 1','post content
                and query = INSERT INTO posts (title,body) VALUES ('title 1','post content')

        */
    $fields = implode(",", array_keys($data));
    $values = implode("','", array_values($data));
    $query = "INSERT INTO $table_name ($fields) VALUES ('$values')";

    if (mysqli_query($this->con, $query)) {
      return true; // return true if data inserted
    } else {
      echo mysqli_error($this->con); // echo error
    }
  }
}

بعد ذلك نُعدل على الملف الذي أرسلته لإضافة عملية التخزين بالإعتماد على الصنف الذي أنشأناه:

<?php

include 'DB.php'; // إستدعاء الكلاس DB
$db = new DB; // إنشاء كائن من الكلاس
$success_message = ''; // تعريف متغير سيحمل رسالة تم الحفظ بنجاح
if (isset($_POST["submit"])) { // في حالة إرسال النموذج و الضغط على زر الإضافة
    /*
        الدالة mysqli_real_escape_string
        تُستخدم لعمل
        escape
        لبعض المحارف التي تُسبب أخطاء في الإستعلام إذا وُجدت
    */
    $data = array(
        'title'     =>  mysqli_real_escape_string($db->con, $_POST['title']),
        'body'      =>  mysqli_real_escape_string($db->con, $_POST['body'])
    );
    if ($db->insert('posts', $data)) { // في حالة نجاح التخزين
        $success_message = 'تم حفظ المقال بنجاح';
    }
}
?>
<!DOCTYPE html>
<html dir="rtl" lang="ar">

<head>
    <title>إضافة مقال</title>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/css/bootstrap.min.css">
    <link rel="preconnect" href="https://fonts.gstatic.com">
    <link href="https://fonts.googleapis.com/css2?family=Cairo:wght@600&display=swap" rel="stylesheet">
    <style>
        body {
            margin: 0;
            padding: 0;
            background-color: #f1f1f1;
            font-family: 'Cairo', sans-serif;
            text-align: right;
        }

        .box {
            width: 800px;
            border: 1px solid #ccc;
            background-color: #fff;
            border-radius: 5px;
            margin-top: 36px;
        }
    </style>

</head>

<body>
    <div class="container box p-3">
        <h3 class="text-center mt-3">إضافة مقال جديد</h3>
        <form method="post">
            <label>عنوان المقال</label>
            <input type="text" name="title" class="form-control" />
            <br />
            <label>محتوى المقال</label>
            <textarea name="body" class="form-control" rows="5"></textarea>
            <br />
            <input type="submit" name="submit" class="btn btn-info" value="أضف" />
            <!-- عرض رسالة النجاح إذا وُجدت -->
            <?php if (isset($success_message)) : ?>
                <span class="text-success">
                    <?= $success_message ?>
                </span>
            <?php endif; ?>
        </form>
    </div>
</body>

</html>

تتجلى فائدة البرمجة الكائنية في هذه الحالة أننا لن نقوم في كل مرة بإنشاء إستعلام جديد كلما تغير الجدول و البيانات التي نريد تخزينها و إنما بإستعمال التابع insert فإن العملية ستحدث تلقائياً و ستحدث في الخفاء حيث أن الكلاس DB اخفى عملية التخزين.

نقطة إضافية و هي أننا قلصنا مكان التعديل فعملية التخزين إذا ما حدثت مشكلة فيها سنقوم بالبحث عن المُشكلة في مكان واحد وهو التابع insert و حلها فيه.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...