استفسار لحفظ ملفات pdf عن طريق اليوزر عن طريق php وعرضها للمستخدمين لتحمليها
ساعد بالإجابة
"إن في قضاء حوائج الناس لذة لا يَعرفها إلا من جربها، فافعل الخير مهما استصغرته فإنك لا تدري أي حسنة تدخلك الجنة."
الإجابات (6)
وعليكم السلام ورحمة الله وبركاته
قمت بعمل كود مشابهة لعملك ويعمل معي بدون مشاكل في الرفع والتخزين بقاعدة البيانات
قمت بعمل جدول بإسم 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();
}
الأكواد جدا بسيطة ولايوجد فيها اي تحقق أمني وغيره من تنقيح المدخلات يجب دائما أخذ الحيطة والحذر عند التعامل مع النماذج
وهنا صورة من قاعدة البيانات بعد رفع الملف بنجاح
هذا بالنسبة لحل المشكلة واتمنى يكون مناسب لك
بالنسبة لرفع الملفات نصيحة
عدم رفع الملفات وتخزينها بقاعدة البيانات مباشرة يفضل أن ترفع الملفات لمجلد داخل مجلدات المشروع ثم بعد ذلك حفظ معلومات الملف بقاعدة البيانات مثل اسم الملف ومسار الحفظ
دائما التحقق من البيانات المرسلة عبر أي نموذج وتنقيحها قدر المستطاع
هنا درسين جميلة لعملية رفع الملفات بواسطة php
بعد ان تتم عملية نقل الملف من الجهاز للمجلد المطلوب داخل المشروع كل ماعليك حفظ بياناته الجديدة داخل قاعدة البيانات وهي سهلة وبسيطة مجرد إسم الملف ومساره الجديد ليتم عرضه لاحقا بكل سهولة وبساطة
في 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 said:
الخطأ الواضح permission denied هي مشكلة صلاحيات المجلدات مالها دخل بالأكواد ممكن حلها عن طريق Terminal بتغيير الصلاحيات مجلد upload الى 755 أو 777
نفذي الكود هذا عن طريق Terminal وجربي الاكواد مرة ثانية أهم شي قبل تنفيذ الأمر إستبدال project-folder باسم مجلد مشروعك
chmod 777 -ٍR /Applications/XAMPP/xamppfiles/htdocs/project-folder/upload
1 ساعه مضت, aml said:جزاك الله خير كنت اطبق اللي بالمقطع ويطلع عندي اخطاء زي اللي قبل طبقتهم يوم عرضت علي فكرة احفظة بمجلد فقلت ممكن المشكله بالكود عاد حتى بكودك طبقته نفسه طلع لي هالخطا اذ تعرف كيفية حله اكون شاكره لكوجزاك الله الف خير على مساعدتك وبارك الله في وقتك ..اشكرك على ردك السريع واهتمامك
لايوجد لديك حساب في عالم البرمجة؟
تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !