استفسار لحفظ ملفات pdf عن طريق اليوزر عن طريق php وعرضها للمستخدمين لتحمليها

aml • منذ 8 سنوات
السلام عليكم ورحمة الله وبركاته 
فكرة كودي ان اخلي اليوزر يختار ملف pdf  ويحفظه في الداتا بيز ويمكنني عرض هذه ملفات ال pdf للمسنخدمين الاخرين ليتمكنوا من تحميله ك ملف pdf علما اني استخدم XAMAP واتعامل مع PhPMYadmin 
المشكله بكود هذا انه لايخزن الtype وsize ولا content ولقد قمت بتغيير على حجم تخرين upload file من الملفات المختصه بذلك في xamp
سوف اعرض لكم جميع اكوادي وال table والerror واتمنى منك مساعدتي واي استفسار انا بالخدمه..شاكره لكم  

table filed type.png

Upload.png

Uploads.png

showallpdf .png

donwload .png

error.png

table content after implent code.png

كلمات دليلية:

ساعد بالإجابة

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

الإجابات (6)

Ali Majrashi • منذ 8 سنوات

وعليكم السلام ورحمة الله وبركاته 

قمت بعمل كود مشابهة لعملك ويعمل معي بدون مشاكل في الرفع والتخزين بقاعدة البيانات 

قمت بعمل جدول بإسم upload داخل قاعدة البيانات وهذا كود الإنشاء


CREATE TABLE `upload` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(30) NOT NULL DEFAULT '',
  `type` varchar(30) NOT NULL DEFAULT '',
  `size` int(11) NOT NULL,
  `content` mediumblob NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

بعدها قمت بعمل ملف بإسم index.html لعمل نموذج رفع الملف محتواه جدا بسيط كالتالي


<html>
   <body>
      
      <form action = "upload.php" method = "POST" enctype = "multipart/form-data">
         <input type = "file" name = "userFile" />
         <input type = "submit"/>
      </form>
      
   </body>
</html>

ثم ملف upload.php لمعالجة البيانات المرسلة ثم تخزينها بقاعدة البيانات 


<?php

if(isset($_FILES['userFile']) and !empty($_FILES['userFile']['name']))
{
   $errors= array();
   $file_name = $_FILES['userFile']['name'];
   $file_size = $_FILES['userFile']['size'];
   $file_tmp = $_FILES['userFile']['tmp_name'];
   $file_type = $_FILES['userFile']['type'];
   
   $handle = fopen($file_tmp, "rb");
   $contents = fread($handle, filesize($file_tmp));
   $contents = addslashes($contents);
   fclose($handle);

   //database connection config
   $servername = "localhost";
   $username = "root";
   $password = "root";
   $dbname = "3alampro-help";

   // Create connection
   $conn = new mysqli($servername, $username, $password, $dbname);
   // Check connection
   if ($conn->connect_error) {
       die("Connection failed: " . $conn->connect_error);
   } 

   $sql = "INSERT INTO upload (name, type, size, content)
   VALUES ('$file_name', '$file_type', '$file_size', '$contents')";

   if ($conn->query($sql) === TRUE) {
       echo "{$file_name} was uploaded successfully";
   } else {
       echo "Error: " . $conn->error;
   }

   $conn->close();
}

الأكواد جدا بسيطة ولايوجد فيها اي تحقق أمني وغيره من تنقيح المدخلات يجب دائما أخذ الحيطة والحذر عند التعامل مع النماذج

وهنا صورة من قاعدة البيانات بعد رفع الملف بنجاح 

2.thumb.png.3c7afa667d5a1817b9df0cb18070

هذا بالنسبة لحل المشكلة واتمنى يكون مناسب لك  

بالنسبة لرفع الملفات نصيحة

عدم رفع الملفات وتخزينها بقاعدة البيانات مباشرة يفضل أن ترفع الملفات لمجلد داخل مجلدات المشروع ثم بعد ذلك حفظ معلومات الملف بقاعدة البيانات مثل اسم الملف ومسار الحفظ 

دائما التحقق من البيانات المرسلة عبر أي نموذج وتنقيحها قدر المستطاع

هنا درسين جميلة لعملية رفع الملفات بواسطة php 

 

بعد ان تتم عملية نقل الملف من الجهاز للمجلد المطلوب داخل المشروع كل ماعليك حفظ بياناته الجديدة داخل قاعدة البيانات وهي سهلة وبسيطة مجرد إسم الملف ومساره الجديد ليتم عرضه لاحقا بكل سهولة وبساطة

aml • منذ 8 سنوات
شكرك على اجابتك وتعاونك معي وارشادي للطريقة الصحيحه ..
ياليت اد مافيه كلافه عليك تعرض لي الطريقه اللي تقصد لان من من وقت ما اقترحت علي هالفكره وانا احاول فيها الى ذا الوقت  لكن ماتوصلت لحل ؟!! 
وجزاك الله خير وسهل لك دربك وبارك الله في وقتك 
Ali Majrashi • منذ 8 سنوات
في February 18, 2016 at 00:15, aml said:
شكرك على اجابتك وتعاونك معي وارشادي للطريقة الصحيحه ..
ياليت اد مافيه كلافه عليك تعرض لي الطريقه اللي تقصد لان من من وقت ما اقترحت علي هالفكره وانا احاول فيها الى ذا الوقت  لكن ماتوصلت لحل ؟!! 
وجزاك الله خير وسهل لك دربك وبارك الله في وقتك 

الفديو راح يفيدك كثير لان مشروح العملية بالتفصيل لكل خطوة

بالنسبة لرفع الملفات لداخل مجلد وحفظ بياناته داخل قاعدة البيانات هنا انا عدلت بشكل سريع على الاكواد الي فوق بردي السابق 

تعديل بسيط للجدول بقاعدة البيانات ليصبح كالتالي


CREATE TABLE `upload` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(30) NOT NULL DEFAULT '',
  `type` varchar(30) NOT NULL DEFAULT '',
  `size` int(11) NOT NULL,
  `path` varchar(250) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;

ثم عملت مجلد جديد باسم upload داخل مجلد المشروع 

بعدها عدلت على أكواد upload.php ليكون محتوى الكود كالتالي


<?php

if(isset($_FILES['userFile']) and !empty($_FILES['userFile']['name']))
{
   $file_name = $_FILES['userFile']['name'];
   $file_size = $_FILES['userFile']['size'];
   $file_tmp = $_FILES['userFile']['tmp_name'];
   $file_type = $_FILES['userFile']['type'];
   $path = 'upload/' . $file_name;
   
    if (move_uploaded_file($file_tmp, $path)) {
        echo "The file {$file_name} has been uploaded.";
    } else {
        die("Sorry, there was an error uploading your file.");
    }

   //database connection config
   $servername = "localhost";
   $username = "root";
   $password = "root";
   $dbname = "3alampro-help";

   // Create connection
   $conn = new mysqli($servername, $username, $password, $dbname);
   // Check connection
   if ($conn->connect_error) {
       die("Connection failed: " . $conn->connect_error);
   } 

   $sql = "INSERT INTO upload (name, type, size, path)
   VALUES ('$file_name', '$file_type', '$file_size', '$path')";

   if ($conn->query($sql) === TRUE) {
       echo "{$file_name} was uploaded successfully";
   } else {
       echo "Error: " . $conn->error;
   }

   $conn->close();
}

بعدها قمت بعمل ملف جديد بإسم view.php ومحتواه التالي


<?php

//database connection config
$servername = "localhost";
$username = "root";
$password = "root";
$dbname = "3alampro-help";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 

$sql = "SELECT * FROM upload";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
        echo "id: " . $row["id"] . " - Name: " . $row["name"] . " - Type: " . $row["type"] . " - Path: " . $row["path"] . "<br>";
    }
} else {
    echo "0 results";
}
$conn->close();

ممكن التعديل على الكود ليناسب إحتياجاتك 

هذا بشكل سريع لمساعدتك ولكن لابد من الإنتباه للنصائح السابقة من ناحية البيانات المدخلة والتحقق منها بالذات النماذج وبعد طرق تخزينها بقاعدة البيانات وجلبها للعرض لاسباب أمنية يجب الحذر دائما

aml • منذ 8 سنوات
جزاك الله خير كنت اطبق اللي بالمقطع ويطلع عندي اخطاء زي اللي قبل طبقتهم يوم عرضت علي فكرة احفظة بمجلد فقلت ممكن المشكله بالكود عاد حتى بكودك طبقته نفسه طلع لي هالخطا اذ تعرف كيفية حله اكون شاكره لك 
وجزاك الله الف خير على مساعدتك وبارك الله في وقتك ..اشكرك على ردك السريع واهتمامك 

errror.png

Ali Majrashi • منذ 8 سنوات
منذ ساعه, aml said:
جزاك الله خير كنت اطبق اللي بالمقطع ويطلع عندي اخطاء زي اللي قبل طبقتهم يوم عرضت علي فكرة احفظة بمجلد فقلت ممكن المشكله بالكود عاد حتى بكودك طبقته نفسه طلع لي هالخطا اذ تعرف كيفية حله اكون شاكره لك 
وجزاك الله الف خير على مساعدتك وبارك الله في وقتك ..اشكرك على ردك السريع واهتمامك 

errror.png

الخطأ الواضح permission denied هي مشكلة صلاحيات المجلدات مالها دخل بالأكواد ممكن حلها عن طريق Terminal بتغيير الصلاحيات مجلد upload الى 755 أو 777

نفذي الكود هذا عن طريق Terminal وجربي الاكواد مرة ثانية أهم شي قبل تنفيذ الأمر إستبدال project-folder باسم مجلد مشروعك 

chmod 777 -ٍR /Applications/XAMPP/xamppfiles/htdocs/project-folder/upload

 

aml • منذ 8 سنوات
1 ساعه مضت, aml said:
جزاك الله خير كنت اطبق اللي بالمقطع ويطلع عندي اخطاء زي اللي قبل طبقتهم يوم عرضت علي فكرة احفظة بمجلد فقلت ممكن المشكله بالكود عاد حتى بكودك طبقته نفسه طلع لي هالخطا اذ تعرف كيفية حله اكون شاكره لك 
وجزاك الله الف خير على مساعدتك وبارك الله في وقتك ..اشكرك على ردك السريع واهتمامك 
شكرا شكرا الله يجزاك خير ماقصرت 
الله يوفقك ويسهل امرك ويسخر لك عباده الصالحين،،اكرر شكرري لك وناسف على ازعاجكم 

لايوجد لديك حساب في عالم البرمجة؟

تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !