PHP

الجزء السابع – التعامل مع قواعد البيانات (MySQL) في PHP – سلسلة FSWD – PHP

في PHP، يمكننا الاتصال بقواعد البيانات واستخدامها من خلال MySQL باستخدام طريقتين رئيسيتين:

  1. mysqli (MySQL Improved)

  2. PDO (PHP Data Objects)

سنشرح أولاً كيفية الاتصال بقاعدة البيانات باستخدام mysqli ثم نغطي كيفية إجراء الاستعلامات الأساسية مثل SELECT, INSERT, UPDATE, DELETE، وأخيرًا كيفية حماية البيانات من SQL Injection باستخدام Prepared Statements.


أولاً: الاتصال بـ MySQL باستخدام mysqli

الاتصال بـ MySQL باستخدام mysqli يتم من خلال دالة mysqli_connect() التي تستقبل معطيات مثل: اسم الخادم (hostname)، اسم المستخدم (username)، كلمة المرور (password)، و اسم قاعدة البيانات (database).

مثال على الاتصال بـ MySQL باستخدام mysqli

<?php
// معلومات الاتصال
$servername = "localhost"; // الخادم المحلي
$username = "root";        // اسم المستخدم
$password = "";            // كلمة المرور (إذا كانت فارغة في localhost)
$dbname = "my_database";   // اسم قاعدة البيانات

// إنشاء الاتصال
$conn = mysqli_connect($servername, $username, $password, $dbname);

// التحقق من الاتصال
if (!$conn) {
    die("الاتصال فشل: " . mysqli_connect_error());
}
echo "تم الاتصال بنجاح!";
?>

ثانيًا: إجراء استعلامات SQL

1. استعلام SELECT:

استعلام SELECT يُستخدم لاسترجاع البيانات من قاعدة البيانات.

مثال

<?php
// استعلام SELECT لاسترجاع بيانات من جدول "users"
$sql = "SELECT id, name, email FROM users";
$result = mysqli_query($conn, $sql);

// التحقق من وجود بيانات
if (mysqli_num_rows($result) > 0) {
    // طباعة البيانات
    while($row = mysqli_fetch_assoc($result)) {
        echo "ID: " . $row["id"]. " - الاسم: " . $row["name"]. " - البريد الإلكتروني: " . $row["email"] . "<br>";
    }
} else {
    echo "لا توجد نتائج";
}
?>
2. استعلام INSERT:

استعلام INSERT يُستخدم لإضافة بيانات جديدة إلى قاعدة البيانات.

مثال

<?php
// استعلام INSERT لإضافة بيانات إلى جدول "users"
$sql = "INSERT INTO users (name, email) VALUES ('Ahmed', 'ahmed@example.com')";

// تنفيذ الاستعلام
if (mysqli_query($conn, $sql)) {
    echo "تم إضافة السجل بنجاح";
} else {
    echo "خطأ في إضافة السجل: " . mysqli_error($conn);
}
?>
3. استعلام UPDATE:

استعلام UPDATE يُستخدم لتحديث البيانات في قاعدة البيانات.

مثال

<?php
// استعلام UPDATE لتحديث بيانات في جدول "users"
$sql = "UPDATE users SET name='Ali' WHERE id=1";

// تنفيذ الاستعلام
if (mysqli_query($conn, $sql)) {
    echo "تم تحديث السجل بنجاح";
} else {
    echo "خطأ في تحديث السجل: " . mysqli_error($conn);
}
?>
4. استعلام DELETE:

استعلام DELETE يُستخدم لحذف البيانات من قاعدة البيانات.

مثال

<?php
// استعلام DELETE لحذف بيانات من جدول "users"
$sql = "DELETE FROM users WHERE id=1";

// تنفيذ الاستعلام
if (mysqli_query($conn, $sql)) {
    echo "تم حذف السجل بنجاح";
} else {
    echo "خطأ في حذف السجل: " . mysqli_error($conn);
}
?>

ثالثًا: حماية البيانات من SQL Injection باستخدام Prepared Statements

SQL Injection هو نوع من الهجمات التي قد تُستخدم لتنفيذ استعلامات SQL خبيثة عن طريق إدخال قيم غير موثوقة في استعلامات SQL. Prepared Statements هي طريقة آمنة للتعامل مع البيانات المدخلة من المستخدمين، حيث تقوم بفصل البيانات عن الاستعلام.

استخدام Prepared Statements مع mysqli:

مثال على كيفية استخدام Prepared Statements لتجنب SQL Injection

<?php
// معلومات الاتصال
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "my_database";

// إنشاء الاتصال
$conn = mysqli_connect($servername, $username, $password, $dbname);

// التحقق من الاتصال
if (!$conn) {
    die("الاتصال فشل: " . mysqli_connect_error());
}

// استخدام Prepared Statements لإدخال بيانات بشكل آمن
$stmt = $conn->prepare("INSERT INTO users (name, email) VALUES (?, ?)");
$stmt->bind_param("ss", $name, $email);  // "ss" تعني أن المتغيرات هما نص (string)

// تعيين القيم
$name = "Sami";
$email = "sami@example.com";

// تنفيذ الاستعلام
$stmt->execute();

echo "تم إضافة السجل بنجاح";

// إغلاق الاستعلام والاتصال
$stmt->close();
$conn->close();
?>

شرح الكود:

  1. $conn->prepare(): يقوم بإعداد الاستعلام مع وجود أماكن فارغة ? للبيانات المدخلة.

  2. $stmt->bind_param("ss", $name, $email): تربط القيم التي سيتم تمريرها إلى الاستعلام. "ss" تعني أن القيم هي نصوص (strings).

  3. $stmt->execute(): يقوم بتشغيل الاستعلام.

ملاحظة: Prepared Statements في mysqli تحمي من SQL Injection لأنها تفصل بين استعلام SQL والقيم المدخلة.


رابعًا: إنهاء الاتصال

بعد إتمام عملية الاستعلامات، من المهم إغلاق الاتصال بقاعدة البيانات.

<?php
// إغلاق الاتصال
mysqli_close($conn);
?>

ملخص:

  • قمنا أولاً بشرح كيفية الاتصال بقاعدة البيانات باستخدام mysqli.

  • قدمنا أمثلة على كيفية إجراء استعلامات SELECT, INSERT, UPDATE, و DELETE.

  • ثم تعلمنا كيفية استخدام Prepared Statements لحماية البيانات من SQL Injection.

كود كامل متكامل

<?php
// معلومات الاتصال
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "my_database";

// إنشاء الاتصال
$conn = mysqli_connect($servername, $username, $password, $dbname);

// التحقق من الاتصال
if (!$conn) {
    die("الاتصال فشل: " . mysqli_connect_error());
}

// مثال على SELECT
$sql = "SELECT id, name, email FROM users";
$result = mysqli_query($conn, $sql);

if (mysqli_num_rows($result) > 0) {
    while($row = mysqli_fetch_assoc($result)) {
        echo "ID: " . $row["id"]. " - الاسم: " . $row["name"]. " - البريد الإلكتروني: " . $row["email"] . "<br>";
    }
} else {
    echo "لا توجد نتائج";
}

// مثال على INSERT باستخدام Prepared Statement
$stmt = $conn->prepare("INSERT INTO users (name, email) VALUES (?, ?)");
$stmt->bind_param("ss", $name, $email);

$name = "Sami";
$email = "sami@example.com";
$stmt->execute();
echo "تم إضافة السجل بنجاح";

// مثال على UPDATE
$sql_update = "UPDATE users SET name='Ali' WHERE id=1";
if (mysqli_query($conn, $sql_update)) {
    echo "تم تحديث السجل بنجاح";
} else {
    echo "خطأ في تحديث السجل: " . mysqli_error($conn);
}

// مثال على DELETE
$sql_delete = "DELETE FROM users WHERE id=1";
if (mysqli_query($conn, $sql_delete)) {
    echo "تم حذف السجل بنجاح";
} else {
    echo "خطأ في حذف السجل: " . mysqli_error($conn);
}

// إغلاق الاتصال
$stmt->close();
mysqli_close($conn);
?>

هل لديك أي أسئلة أخرى أو تحتاج إلى شرح أي جزء آخر؟

8. الجلسات (Sessions) وملفات الكوكيز (Cookies) في PHP

تُعتبر الجلسات (Sessions) و ملفات الكوكيز (Cookies) من الأدوات الأساسية في PHP لحفظ البيانات بين زيارات متعددة لمستخدمي الموقع. دعنا نناقش الفرق بينهما وكيفية استخدامها

أولاً: الجلسات (Sessions)

الجلسات تُستخدم لتخزين البيانات بين صفحات مختلفة أثناء زيارة المستخدم للموقع. يتيح لك هذا حفظ معلومات مثل بيانات تسجيل الدخول، سلة التسوق، أو أي بيانات تحتاج إلى الاحتفاظ بها عبر زيارات متعددة للموقع.

تتم إدارة الجلسات بواسطة PHP باستخدام معرف الجلسة (Session ID)، وهو معرف فريد يُرسل مع كل طلب من المتصفح.

كيفية استخدام الجلسات في PHP:
  1. بدء الجلسة:

لتتمكن من استخدام الجلسات، يجب عليك أولاً بدء الجلسة باستخدام دالة session_start() في بداية الكود، قبل أي إخراج (HTML أو echo).

  1. تخزين البيانات في الجلسة:

بعد بدء الجلسة، يمكنك تخزين البيانات داخل مصفوفة $_SESSION. هذه المصفوفة تُخزن البيانات بين الزيارات.

  1. استرجاع البيانات من الجلسة:

يمكنك الوصول إلى البيانات المخزنة في الجلسة في أي وقت باستخدام $_SESSION.

  1. إنهاء الجلسة:

يمكنك إنهاء الجلسة باستخدام دالة session_destroy().

مثال على الجلسات

<?php
// بدء الجلسة
session_start();

// تخزين البيانات في الجلسة
$_SESSION['username'] = "Ahmed";
$_SESSION['email'] = "ahmed@example.com";

// عرض البيانات المخزنة في الجلسة
echo "اسم المستخدم: " . $_SESSION['username'] . "<br>";
echo "البريد الإلكتروني: " . $_SESSION['email'] . "<br>";

// إنهاء الجلسة
// session_destroy();  // هذه الدالة تُنهي الجلسة ولا يمكن الوصول إلى البيانات بعد استخدامها
?>

شرح الكود:

  • استخدمنا session_start() لبدء الجلسة.

  • ثم قمنا بتخزين بيانات username و email في $_SESSION.

  • قمنا بعرض البيانات المخزنة في الجلسة.

  • دالة session_destroy() تُنهي الجلسة، ولا يمكن الوصول إلى البيانات بعدها.

مثال آخر: تحقق من الجلسة
<?php
session_start();

// التحقق مما إذا كانت الجلسة تحتوي على بيانات معينة
if (isset($_SESSION['username'])) {
    echo "مرحبًا، " . $_SESSION['username'] . "!";
} else {
    echo "لم تقم بتسجيل الدخول بعد.";
}
?>

شرح:

  • إذا كانت الجلسة تحتوي على بيانات مثل username، سيتم عرض “مرحبًا” مع اسم المستخدم.

  • إذا لم تكن الجلسة تحتوي على هذه البيانات، سيتم إخبار المستخدم أنه لم يسجل الدخول

    ثانيًا: الكوكيز (Cookies)

    الكوكيز (Cookies) هي ملفات نصية صغيرة تُخزن في متصفح المستخدم. تُستخدم لتخزين المعلومات لفترات زمنية معينة (بناءً على تاريخ انتهاء صلاحية الكوكي) مثل تفضيلات المستخدم أو بيانات الجلسة.

    يتم إرسال الكوكيز مع كل طلب من المتصفح إلى الخادم، ويمكنك الوصول إليها باستخدام $_COOKIE في PHP.

    كيفية استخدام الكوكيز في PHP:
    1. إنشاء الكوكيز:

    لتخزين الكوكيز، تستخدم دالة setcookie().

    1. قراءة الكوكيز:

    لقراءة الكوكيز، تستخدم مصفوفة $_COOKIE.

    1. حذف الكوكيز:

    لحذف الكوكيز، يتم تعيين تاريخ انتهاء صلاحية الكوكي إلى وقت ماضي.

    مثال على الكوكيز

<?php
// إنشاء كوكيز
setcookie("user", "Ahmed", time() + 3600, "/");  // الكوكيز ستظل صالحة لمدة ساعة (3600 ثانية)

// التحقق من وجود الكوكيز
if (isset($_COOKIE['user'])) {
    echo "مرحبًا " . $_COOKIE['user'] . "!";
} else {
    echo "لم يتم تعيين الكوكيز بعد.";
}
?>

شرح الكود:

  • دالة setcookie("user", "Ahmed", time() + 3600, "/") تقوم بإنشاء كوكيز باسم user مع القيمة Ahmed، والوقت المحدد للكوكي هو ساعة (3600 ثانية).

  • نستخدم $_COOKIE['user'] لقراءة الكوكيز.

  • إذا كانت الكوكيز موجودة، سيتم عرض اسم المستخدم، وإذا لم تكن موجودة، سيتم إخبار المستخدم بذلك.

حذف الكوكيز:

لحذف الكوكيز، يجب تعيين تاريخ انتهاء صلاحية الكوكيز إلى وقت ماضي

<?php
// حذف الكوكيز
setcookie("user", "", time() - 3600, "/");  // تعيين الكوكيز لتاريخ ماضي
echo "تم حذف الكوكيز بنجاح.";
?>

شرح:

  • قمنا بتعيين الكوكيز مع قيمة فارغة وتاريخ انتهاء صلاحية ماضي لحذفها.

الفرق بين الجلسات والكوكيز

الميزة الجلسات (Sessions) الكوكيز (Cookies)
مكان التخزين تُخزن في الخادم (Server). تُخزن في متصفح المستخدم.
المدة تستمر طوال فترة الجلسة (حتى إغلاق المتصفح). يمكن تحديد مدة معينة (مثلاً ساعة، يوم).
الأمان أكثر أمانًا، حيث لا يمكن للمستخدم تعديلها. أقل أمانًا، حيث يمكن للمستخدم تعديل الكوكيز.
الاستخدام تُستخدم للبيانات التي تحتاج إلى الحفاظ عليها عبر صفحات متعددة في الجلسة. تُستخدم لتخزين البيانات طويلة المدى مثل تفضيلات المستخدم أو تسجيل الدخول.

ملخص:

  • الجلسات (Sessions) تُستخدم لحفظ البيانات عبر صفحات متعددة في نفس الزيارة. تكون أكثر أمانًا لأنها تُخزن في الخادم.

  • الكوكيز (Cookies) تُخزن في متصفح المستخدم ويمكن تحديد مدة صلاحيتها. تُستخدم لتخزين بيانات مثل تفضيلات المستخدم أو معلومات الجلسة التي تحتاج إلى أن تبقى لفترة أطول.

كود كامل متكامل (Sessions + Cookies)

<?php
// بدء الجلسة
session_start();

// إنشاء كوكيز لتخزين اسم المستخدم
setcookie("username", "Ahmed", time() + 3600, "/");  // الكوكيز ستظل صالحة لمدة ساعة

// تخزين البيانات في الجلسة
$_SESSION['user_email'] = "ahmed@example.com";

// التحقق من الكوكيز
if (isset($_COOKIE['username'])) {
    echo "مرحبًا " . $_COOKIE['username'] . " من الكوكيز!<br>";
}

// التحقق من الجلسة
if (isset($_SESSION['user_email'])) {
    echo "البريد الإلكتروني المسجل في الجلسة: " . $_SESSION['user_email'] . "<br>";
}

// حذف الكوكيز
setcookie("username", "", time() - 3600, "/");

// إنهاء الجلسة
session_destroy();
?>

 

فرص الربح من الإنترنت

💰 هل تبحث عن طريقة سهلة للربح من الإنترنت؟

ابدأ الآن واكسب أموالًا حقيقية من خلال خطوات بسيطة! 🌟

اضغط وابدأ الربح

📱 اربح من هاتفك فقط!

كل ما تحتاجه هو اتصال بالإنترنت وبعض الوقت ⏳

ابدأ الربح الآن

🚀 اربح المال وأنت في بيتك

الفرصة أمامك الآن وبخطوات سهلة ومضمونة!

من هنا تبدأ رحلتك

🔥 لا تحتاج إلى خبرة أو رأس مال!

اربح الآن من الإنترنت بأبسط الطرق

اضغط هنا للربح

💸 دخل إضافي بدون تعب؟

🤩 هذه فرصتك لتبدأ في الربح من الإنترنت!

سارع الآن

مقالات ذات صلة

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

زر الذهاب إلى الأعلى