php رفع الملفات

تخزين بيانات الملف في القاعدة

آخر تحيين: 06-06-2014

php MySql إنشاء فضاء للأعضاء حماية ثغرات رفع الملفات


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

<form action="uploader.php" method="post" enctype="multipart/form-data">
  <input type="hidden" name="MAX_FILE_SIZE" value="100000">   
  عنوان الصورة : <input type="text" name="alt"> <br>
  <input type="file" name="milaf">
  <input type="submit" value="إرسال">
</form>

ثم سنقوم بإنشاء جدول "images" في قاعدة البيانات ، سأضيف له ثلاثة حقول فقط من باب الإختصار و هي :

  • img_id : لتخزين مفاتيح الصور "العداد التلقائي التصاعدي"
  • img_name : حقل لتخزين الإسم الجديد للملف و امتداده
  • img_alt : عنوان الصورة

يمكنكم إنشاء جدولكم يدويا أو باستعمال شيفرة sql أسفله

CREATE TABLE IF NOT EXISTS `images` (
  `img_id` int(11) NOT NULL AUTO_INCREMENT,
  `img_name` varchar(200) NOT NULL,
  `img_alt` varchar(200) NOT NULL,
  PRIMARY KEY (`img_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

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

<?php 
include 'includes/db-connection.php'; // ربط الإتصال بقاعدة البيانات
$error = '';
$alt = isset($_POST['alt']) ? $_POST['alt']:'';
// معالجة الأخطاء
// ...

if ($error == '') 
{ 
    // تغيير إسم الملف
    $name = sha1(uniqid(rand(), true));
    $filename = $name.'.'.$file_extension;
    $destination = "uploads/" . $filename;
	// رفع الملف و تخزينه
    move_uploaded_file($_FILES["milaf"]["tmp_name"], $destination);
    
	// تخزين بيانات الملف في قاعدة البيانات
    $stmt= $db->prepare('INSERT INTO images ( img_name, img_alt) VALUES
                        (:nom, :alt)
                      ');
    $stmt->bindValue(':nom',$filename,PDO::PARAM_STR);
    $stmt->bindValue(':alt',$alt,PDO::PARAM_STR);
    $stmt->execute();

    $stmt->CloseCursor();
    echo "تم رفع الملف بنجاح :\n";

} else {
   echo '<h3> تم رفض رفع الملف للأسباب التالية : </h3>';
   if($error != '') echo $error;
}
?>

هذا كل ما في الأمر . يمكنكم إضافة الحقول التي تودونها . مثلا لتخزين حجم و أبعاد الملف . و إسم الشخص الذي قام برفع الملف و تاريخ رفعه ...إلخ
لا تنسوا معالجة "$_POST['alt']" كما ينبغي
عندما نريد عرض الصورة على المتصفح ، سنعتمد على الإسم المُخزّن في قاعدة البيانات ، مثال

<?php 
echo '<img src="uploads/'.htmlspecialchars($data['img_name']).'" alt="'.htmlspecialchars($data['img_alt']).'">';
?>