Professional Documents
Culture Documents
تعلم برمجة جزء8
تعلم برمجة جزء8
ونقوم أيضًا بإنشاء ملف باسم database_close.phpونضع به كود إغلق التصال بقاعد ة
البيانات كالتالي :
<?php
;)mysqli_close($conn_link
>?
ملحظة :سنقوم بالعمل على ملفات الفصل السابع لعملية التسجيل وتسجيل
الدخول .
الن نريد تنفيذ عملية التسجل على قاعد ة البيانات سنقوم بتغير دالتي checkUserو signUp
فقط في ملف signup.phpوسنقوم بتضين ملف database_connect.phpفي بداية الملف
وملف database_close.phpفي نهايته
{ )(function checkUser
;global $conn_link
;return true
}
else
{
;return false
}
}
else
{
;return false
}
}
الدالة وااضحة واستخدمنا دالة mysqli_num_rowsلحساب عدد الحقول التي تم جلبها من
قاعد ة البيانات ونحن نعلم أن اسم المستخدم ل يتكرر أي أن عدد الحقول إما أن يكون 1أو 0
ومعنى إستعلم SQLهو إختيار جميع الجقول التي يكون فيها اسم المستخدم مساوي لقيمة
اسم المستخدم التي تم جلبها من النموذج .
ثانيًا :دالة : signUp
{ )(function signUp
;global $conn_link
{
return true;
}
else
{
return false;
}
}
قم بإاضافة العناصر إلى الجدولSQL ومعنى إستعلم-
global $conn_link;
if ($result = mysqli_query($conn_link,$query))
{
if(mysqli_num_rows($result) == '1')
{
return true;
}
else
{
return false;
}
153 الفصل العاشر :التعامل مع قواعد البيانات
}
else
{
;return false
}
}
ملحظة :قبل أي عملية على قواعد البيانات سواء جلب بيانات أو إرسال بيانا
يرجى تنفيذ المر التالي من خلل دالة mysqli_queryحتى يتم اضبط الترميز إلى
utf-8وتظهر اللغة العربية بشكل جيد ويتم تخزينها أيضًا بترميز . utf-8
المصفوفة : $_FILES
ُتـخـزن هـذه الــمـصفـوفة مـعـلومات عن المـلف أو المـلفات التي تم رفعـها الى الخادم .و بشكل عام
هذه المصـفوفـة ثـنـائيـة الـبـعـد )تـم الـتـطـرق الى الـمصـفوفـات متـعدد ة البعاد في الفصل الثالث
المصفوفات و الدوال( حـيـث ُيـعبـر الـبـعد الول عـن اسـم حـقـل الـملـف الـُمـحدد فـي حـقـل الـملـف
فـي نـمـوذج ) HTMLسـيـتـم اعـتـمـاد file1كـأسـم لـحقـل الـمـلف فـي المثـلة الـقادمة( .أما الُبعد
الثاني ,فيوفر معلومات عن اسم الملف أو حجمه أو نوعه أو رسالة الخطأ في حال وجودها ...
الشرح القيمة
155 الفصل الحادي عشر :رفع الملفات الى الخادم
كما هو وااضح من السم ُ ,تحدد هذه القيمة حجم الملف الذي ]' : $_FILES['file1']['size
تم رفـعـه مـقـدرا ً بالــبـايـت ,لـذا قـد تـحـتاج الى قسـمة هـذا
الرقم على 1024أو 1024^2للـحـصول علـى حـجـم الملف
مقدرا ً بالكيلوبايت أو الميغابايت على التوالي .
ل يـمـكن أبــداً اضـمـان سـيـر عـمـلـيـة رفـع مـلـف عـلـى الخادم ]'$_FILES['file1']['error
بشكل صـحيح ,وبـعـض الحيان تكون هنـالك مشـكلة فـي رفع
الملفات و من الُمـفـيـد مـعرفـتـهـا و تـبـلـيـغ الـمستخدم عن سبب
الخطأ ,حيث ُتــعــيــد الـقيـمـة رقـم رسـالة الـخـطـأ أو الـثـابـت
الـمـوافـق لـها .
كما تمت الشار ة اليه في الجدول السابق ,فإن القيمة ]' $_FILES['file1']['errorتُعيد ثابت أو
رقم يدل على الخطأ الذي حدث أثناء رفع الملف ,الجدول التالي يواضح أبزر هذه القيم :
يـتـم إعـاد ة هـذه الـقـيـمـة عـند رفـع جزء من الملف وعدم تكمن UPLOAD_ERR_PARTIAL , 3
من رفعه كامل ً كحدوث مشكلة في الشبكة ...
يتم إعاد ة هذه القيمة عندما يقوم الُمستخدم من ارسال UPLOAD_ERR_NO_FILE , 4
نموذج HTMLدون تحديد ملف لكي يتم رفعه.
وبالطبع يمكن التحقق من رسالة الخطأ أما باستخدام الرقام أو بمساواتهم بالثوابت السابقة ,
مثال يقوم بطباعة حالة رفع ملف :
<?php
)]'switch ($_FILES['file1']['error
{
case UPLOAD_ERR_OK:
;"echo "File uploaded succesfuly
;break
case UPLOAD_ERR_INI_SIZE:
;"echo "Uploaded File is too big
;break
case UPLOAD_ERR_PARTIAL :
;"echo "File is not completely uploaded
;break
case UPLOAD_ERR_NO_FILE :
;"echo "No File was Selected
;break
157 الفصل الحادي عشر :رفع الملفات الى الخادم
default:
;"echo "UnKnown Error
;break
}
>?
و يقوم متصفح الُمستخدم بارسال اسم الملف الصلي ونوعه في , HTTP headerوبالتالي فليس
من الُمفضل التحقق من نوع الملف عن طريق]' $_FILES['file1']['typeو عواضا ً عن ذلك نقوم
بإستخراج إمتداد الملف والتحقق منه .
;)is_uploaded_file($filename
نقل الملف :
نستخدم الدالة move_uploaded_fileلنقل ملف تم رفعه الى مجلد ُمعين تقبل هذه الدالة
وسيطين :الوسـيـط الول هـو اسـم الـمـلف الـمؤقت و الـثاني هو الـمسار الهـدف الذي سيتم نقل
الملف إليه .شكل الدالة العام :
;)move_uploaded_file($tmp_name, $distination
يمكن ان يكون قد خطر ببالك استخدام احدى الدالتين copyلنسخ الملفات أو renameلنقل
الملفات الـلتـان تـم شـرحـهـمـا فـي فـصـل التـعـامـل مـع الـمـلفات و الـمجـلـدات لنسخ أو نقل الملفات
التي يتم رفعها على الخادم ,يمكنك استخدامهم لكن لغة phpدوال أكثر أمانا ً ,مثال عن رفع
ملف :
><html
رفع الملفات الى الخادم: الفصل الحادي عشر 158
<head>
</head>
<body>
<form action="index3.php" method="post"
enctype="multipart/form-data">
<input type="file" name="file1">
<br>
<input type="submit">
</div>
</form>
</body>
</html>
عـلـى سبـيل الـمـثـال لـكـي يـتم نـقل المـلـفات الـمـرفوعةupload و يـتـوجـب وجـود مـجـلد باسـم
: file_upload.php عليه )ل تنسى تحديد الصلحيات المناسبة( كود صفحة
<?php
$explode = explode('.', $_FILES['file1']['name']);
$ext = $explode[count($explode) - 1];
if($ext != 'png')
{
echo "Only PNG images can be uploaded";
exit();
}
if(is_uploaded_file($_FILES['file1']['tmp_name']))
{
$result = move_uploaded_file($_FILES['file1']['tmp_name'],
'upload/'. basename($_FILES['file1']['name']));
echo $result === true ? 'File uploaded successfuly' : 'There
are some errors';
}
159 الفصل الحادي عشر :رفع الملفات الى الخادم
else
{
;'echo 'No File uploaded
}
>?
ُيفضل استخدام الدالة basenameعند الشار ة الى السم الصلي للملف .
<?php
;)print_r($_FILES
>?
تنسيق حقل رفع الملف :
اذا قمت َ سابقا ً بمحاولة تنسيق حقل لرفع ملف ,فمن المؤكد من أنك قد لحظت عدم توفر عدد
الفصل الحادي عشر :رفع الملفات الى الخادم 160
كبير مــن الخـيــارات .فـعـلى ســبـيل الـمـثـال ل يـُ مـكـنك تغيير كلمة .. browseو ل يــمـكنك تغيير
أبعاد الحقل ...الخ ,ولللتفاف على هذه الشكالية يمكن استخدام الطريقة التالية :
فـي الـ بداية نقوم بانشاء حقل نص و زر عادي و من ثم نقوم بجعل حقل رفع الملف فوقهم
)باستخدام خـاصـية z-indexفي (cssوجـعـل حـقـل الـمـلـف شـفـاف تـماما ً ونـقـوم بـتـنـسيق حقل
النص العادي و زر التصفح كما ُنريد ,في المثال التالي سنقوم بتغيير بسيط باستبدال كلمة
browseبالكلمة : AddFile
><html
><head
><style
*
{
;padding:0px
;margin :0px
}
#realupload
{
;position:absolute
;top : 0px
;left: 0px
;opacity:0
;-moz-opacity:0
;-webkit-opacity:0
;-o-opacity:0
;z-index: 2
}
></style
></head
><body