الحاسب الآلي · الصف الثاني الثانوي · الترم الأول
صفحة إدخال مصطلح Add_Term.php
صفحة إدخال مصطلح add_term.php: تصميم النموذج وخصائصه، والفرق بين POST وGET، وكود PHP المختصر لتضمين الرأس والاتصال وحفظ المصطلح، والكود الأكثر احترافية بالتحقق من الحقول ورفع الصورة بأمان، والتأكد من الإضافة.
آخر تحديث: · كيف نراجع المحتوى
مقدمة
- الشعبة: مشترك (كل المسارات)
- الوحدة: الوحدة الثالثة: إنشاء صفحات موقع “قاموس مصطلحات الكمبيوتر المصور”
- الموضوع: الثالث
هذه الصفحة تجمع كل ما تعلمته في الترم: تصميم HTML، وقاعدة البيانات، ولغة PHP، والشروط والتحقق. عند الانتهاء منها يصبح القاموس موقعًا ديناميكيًا حقيقيًا يستطيع المستخدم أن يضيف إليه مصطلحات جديدة.
أهداف التعلم
- أن تصمم واجهة صفحة إدخال مصطلح.
- أن تكتب كود PHP لتضمين صفحتي Header وConnection.
- أن تنشئ صفحة إدخال مصطلح تحفظ بياناته في جدول
terms. - أن تتحقق من إدخال جميع الحقول، وترفع صورة المصطلح بأمان.
- أن تتحقق من إضافة المصطلح إلى قاعدة البيانات.
شرح الدرس
أولًا: تصميم واجهة صفحة إدخال مصطلح
نصمم الصفحة في برنامج Expression Web (نمط التصميم Design) أو بكود HTML مباشرة، ونحفظها في مجلد الموقع باسم add_term.php:
- عنوان الشاشة «إدخال مصطلح» في مقطع مستقل
<div>. - نموذج (Form) من صندوق الأدوات (Toolbox)، يضم عناصر التحكم: مربع نص للمصطلح، ومربع نص للترجمة، ومربع نص متعدد الأسطر (TextArea) للتعريف العلمي، وعنصر لاختيار ملف الصورة، وزر «إضافة».
- النموذج (Form) يمرر بيانات عناصر التحكم من مستعرض الويب إلى الخادم.
<form method="post" action="add_term.php" enctype="multipart/form-data">
المصطلح: <input type="text" name="txt_term"><br>
الترجمة: <input type="text" name="trans"><br>
التعريف: <textarea name="TextArea1"></textarea><br>
الصورة: <input type="file" name="File1"><br>
<input type="submit" name="Submit1" value="إضافة">
</form>
| الخاصية | معناها |
|---|---|
method="post" | أسلوب نقل البيانات من النموذج إلى الخادم |
action="add_term.php" | اسم الصفحة المراد الانتقال إليها عند الضغط على الزر |
enctype="multipart/form-data" | تُستخدم عندما يرفع النموذج ملفات (صورًا) إلى الخادم؛ وبدونها لا تُرفع الصور |
الفرق بين POST وGET:
| POST | GET |
|---|---|
| لا تظهر البيانات المرسلة في عنوان الصفحة (URL) | تظهر البيانات المرسلة في عنوان الصفحة |
| تُستخدم لإرسال كلمات السر والبيانات المهمة | لا تُستخدم لكلمات السر أو البيانات المهمة |
| الحد الأقصى للبيانات كبير (نحو 8 MB افتراضيًا) | لها حد أقصى صغير لطول البيانات |
ثانيًا: كود PHP المختصر (كما في الكتاب)
<?php
include("header.php");
include("connection.php");
if (isset($_POST['Submit1'])) {
$term = $_POST['txt_term'];
$trans = $_POST['trans'];
$defe = $_POST['TextArea1'];
@$file = $_FILES['File1']['name'];
@$tmp = $_FILES['File1']['tmp_name'];
move_uploaded_file($tmp, "pic/" . $file);
$picture = "pic/" . $file;
$sql = mysqli_query($connect,
"INSERT INTO terms VALUES ('', '$term', '$trans', '$defe', '$picture')");
}
?>
| الجزء | وظيفته |
|---|---|
include("header.php") | إظهار صورة البانر وعناوين صفحات الموقع أعلى الصفحة |
include("connection.php") | تحقيق الاتصال بقاعدة البيانات |
isset($_POST['Submit1']) | التحقق من أن المستخدم ضغط على زر «إضافة» |
$_POST[...] | متغير يخزن قيم عناصر التحكم في النموذج عند الضغط على الزر؛ فنخصصها للمتغيرات $term و$trans و$defe |
$_FILES['File1']['name'] | اسم ملف الصورة الذي اختاره المستخدم |
العلامة @ | تمنع ظهور رسالة خطأ إذا كانت القيمة فارغة |
move_uploaded_file | ينقل ملف الصورة المرفوعة إلى المجلد pic على الخادم |
INSERT INTO terms | يضيف سجلًا جديدًا في جدول terms؛ والقيمة الأولى فارغة لأن id يزيد تلقائيًا |
(في الكتاب تُستخدم الدالة القديمة mysql_query، وقد حُذفت من PHP بدءًا من الإصدار 7، فنستخدم mysqli_query المكافئة.)
أوجه القصور في الكود المختصر:
- لا يتأكد من وجود المجلد
picقبل نقل الصورة إليه. - لا يتحقق من إدخال جميع الحقول قبل الحفظ.
- لا تظهر رسالة تفيد نجاح الإضافة أو فشلها.
- قد تظهر الحروف العربية في قاعدة البيانات في صورة علامات استفهام «؟؟؟».
ثالثًا: الكود الأكثر احترافية
<?php
include("header.php");
include("connection.php");
mysqli_set_charset($connect, "utf8"); // لإظهار الحروف العربية بشكل صحيح
if (isset($_POST['Submit1'])) {
if (!file_exists("pic")) { // إنشاء مجلد الصور إذا لم يكن موجودًا
mkdir("pic");
}
$term = trim($_POST['txt_term']);
$trans = trim($_POST['trans']);
$defe = trim($_POST['TextArea1']);
$picture = "";
if ($term != "" && $trans != "" && $defe != "") {
// ... رفع الصورة (انظر الفقرة التالية) ...
$stmt = mysqli_prepare($connect,
"INSERT INTO terms (term, trans, defe, picture) VALUES (?, ?, ?, ?)");
mysqli_stmt_bind_param($stmt, "ssss", $term, $trans, $defe, $picture);
if (mysqli_stmt_execute($stmt)) {
echo "تم إضافة البيانات بنجاح";
}
} else {
echo "البيانات التي تم إدخالها غير صحيحة يجب إدخال جميع الحقول";
}
}
?>
file_existsوmkdir: جملة شرطية تختبر وجود المجلدpicوتنشئه إذا لم يكن موجودًا.- الشرط
$term != "" && $trans != "" && $defe != ""يتأكد أن جميع المتغيرات ليست خالية؛ فإن تحقق تُحفظ البيانات، وإلا تظهر رسالة الخطأ. mysqli_set_charsetتساعد على ظهور البيانات العربية بشكل صحيح بدل علامات الاستفهام.- الاستعلام المُعد
prepareمعbind_paramيمرر القيم منفصلة عن أمر SQL، فيحمي من هجمات حقن SQL. والرمز"ssss"يعني أن القيم الأربع نصوص (string).
رفع الصورة بأمان (إثراء):
if (!empty($_FILES["File1"]["name"])) {
$allowed = ["image/png" => "png", "image/jpeg" => "jpg"];
$type = mime_content_type($_FILES["File1"]["tmp_name"]);
if (!isset($allowed[$type])) {
echo "نوع الصورة غير مسموح";
} elseif ($_FILES["File1"]["size"] > 500000) {
echo "حجم الصورة أكبر من 500 كيلوبايت";
} else {
$picture = "pic/" . uniqid("term_") . "." . $allowed[$type];
move_uploaded_file($_FILES["File1"]["tmp_name"], $picture);
}
}
- نتحقق من نوع الملف الفعلي بـ
mime_content_typeلا من امتداده فقط، لأن الامتداد يمكن تغييره بسهولة. - نحدد حجمًا أقصى للصورة (500 كيلوبايت هنا)، ونسمح بـ PNG وJPEG فقط.
- نولّد اسمًا جديدًا فريدًا بالدالة
uniqidبدل اسم المستخدم، لتجنب تكرار الأسماء والأسماء الضارة.
رابعًا: تنفيذ الصفحة والتأكد من الإضافة
- نستعرض الصفحة بكتابة
localhost/Dictionary/add_term.phpفي شريط العنوان. - إذا ضغطنا «إضافة» دون إدخال البيانات تظهر الرسالة: «البيانات التي تم إدخالها غير صحيحة يجب إدخال جميع الحقول».
- عند إدخال جميع البيانات والضغط على «إضافة» تظهر الرسالة: «تم إضافة البيانات بنجاح».
- للتأكد من الإضافة نفتح قاعدة البيانات في تبويب جديد بكتابة
localhost/phpmyadmin، ونفتح جدولtermsفي قاعدةdbdictionaryلنرى السجل الجديد.
أمثلة وتطبيقات
اختبار الصفحة:
| الاختبار | النتيجة المتوقعة |
|---|---|
| إدخال جميع الحقول بشكل صحيح | رسالة «تم إضافة البيانات بنجاح» وظهور السجل في جدول terms |
| ترك التعريف فارغًا | رسالة «… يجب إدخال جميع الحقول» |
| رفع ملف PDF بدل الصورة (في الكود الآمن) | رسالة «نوع الصورة غير مسموح» |
| رفع صورة حجمها 2 ميجابايت | رسالة الحجم |
ملاحظات مهمة
- الخاصية
requiredفي وسم الإدخال تحقق مبدئي في المتصفح، لكنها لا تغني عن التحقق في PHP؛ لأن المستخدم يستطيع تجاوزها. - الوسم
<label for="...">يربط النص بالحقل ويساعد ذوي الإعاقة البصرية (إثراء). - في المواقع المنشورة يجب أن تكون صفحة الإضافة متاحة للمستخدمين المصرح لهم فقط بتسجيل دخول.
- دمج ما يكتبه المستخدم مباشرة داخل أمر SQL (كما في الكود المختصر) يصلح للتدرب فقط؛ استخدم الاستعلام المُعد في أي موقع حقيقي.
المفاهيم الأساسية
- النموذج (Form): يمرر البيانات إلى الخادم، وخصائصه
methodوactionوenctype. - POST لا تُظهر البيانات في العنوان وتصلح للبيانات المهمة، وGET تُظهرها.
$_POSTيخزن قيم عناصر التحكم، و$_FILESيخزن بيانات الملف المرفوع.- الكود الاحترافي: إنشاء مجلد pic عند الحاجة، والتحقق من كل الحقول، ورسائل النجاح والخطأ، ودعم العربية.
- الأمان: استعلام مُعد، وفحص نوع الصورة وحجمها، واسم فريد لها.
ملخص الدرس
صفحة add_term.php تجمع مهارات المشروع: نصمم نموذجًا بحقول المصطلح والترجمة والتعريف والصورة وزر «إضافة»، بخصائص method="post" وaction وenctype="multipart/form-data". ويضمّن كود PHP صفحتي الرأس والاتصال، ويتحقق من الضغط على الزر، ويخصص قيم $_POST للمتغيرات، وينقل الصورة إلى المجلد pic، ثم يضيف سجلًا في جدول terms. والكود الأكثر احترافية ينشئ مجلد الصور عند الحاجة، ويتحقق من إدخال جميع الحقول، ويعرض رسالة نجاح أو خطأ، ويستخدم استعلامًا مُعدًا ورفعًا آمنًا للصور. ونتأكد من الإضافة بفتح الجدول في phpMyAdmin.
أسئلة للتدريب
- اذكر عناصر التحكم في نموذج صفحة إدخال مصطلح.
- ما وظيفة كل من الخصائص:
methodوactionوenctype؟ - قارن بين POST وGET.
- ما وظيفة
isset($_POST['Submit1'])؟ وما وظيفة العلامة@؟ - اذكر أوجه القصور في الكود المختصر، وكيف عالجها الكود الأكثر احترافية.
- ما الرسالة التي تظهر عند ترك أحد الحقول فارغًا؟
- كيف تتأكد من إضافة المصطلح إلى قاعدة البيانات؟
- اذكر ثلاثة إجراءات لرفع الصور بأمان.