استفسار عن كيفية حفظ وتعديل الملفات في php 

aml • منذ 6 سنوات
 
 
السلام عليكم ورحمة الله وبركاته 
الله يعطيكم العافية استخدام php ابغى ان نوع من user لنفرض انه ال student يسوي upload لل file مثلا word بعدين الاستاذ يقدر  يحمله ويسوي له تعديل ويرجع يحمله  منشان ال student يطلع عليه ويقدر يحمله ليشوف التعديلات ب اختصار مثلا  مستخدم student1 حمل file1 
مستخدم  teacher1 يقدر يحمل file1 ويسوي تعديل عليه ويرجع يحمله ويقدر student1 يطلع عليه 
قبل سالت هينا منشان اعرض file للمستخدمين وقال لي افضل شي لي upload ان يكون فيه folder داخل المشروع واخزن فيه والحمد لله ضبطت معي 
لكن الان احتاج ان احمل وشخص ثاني يقدر يعدل عليه ويحدف اللي قبل من folder او اي طريقه ترونها صحيحة؟!!
اي استفسار انا بالخدمة شاكره لكم  
والله يجزاكم خير ويوفقكم لما فيه خير وصلاح 
كلمات دليلية:

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

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

الإجابات (4)

Ali Majrashi • منذ 6 سنوات
18 ساعات مضت, aml said:
لسلام عليكم ورحمة الله وبركاته 
الله يعطيكم العافية استخدام php ابغى ان نوع من user لنفرض انه ال student يسوي upload لل file مثلا word بعدين الاستاذ يقدر  يحمله ويسوي له تعديل ويرجع يحمله  منشان ال student يطلع عليه ويقدر يحمله ليشوف التعديلات ب اختصار مثلا  مستخدم student1 حمل file1 
مستخدم  teacher1 يقدر يحمل file1 ويسوي تعديل عليه ويرجع يحمله ويقدر student1 يطلع عليه 
قبل سالت هينا منشان اعرض file للمستخدمين وقال لي افضل شي لي upload ان يكون فيه folder داخل المشروع واخزن فيه والحمد لله ضبطت معي 
لكن الان احتاج ان احمل وشخص ثاني يقدر يعدل عليه ويحدف اللي قبل من folder او اي طريقه ترونها صحيحة؟!!
اي استفسار انا بالخدمة شاكره لكم  
والله يجزاكم خير ويوفقكم لما فيه خير وصلاح 

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

لعملية حذف ملف من داخل مجلد upload نستطيع باستخدام الدالة unlink 


<?php

unlink('test.html');

اهم شي نمرر لها مسار الملف واسم الملف بالكامل ويوجد طريقة للتحقق من اذا كان الملف موجود داخل المجلد باستخدام الدالة realpath نسطيع استخدامها داخل if للتحقق من القيمة المرجعة اذا true نقوم بحذف الملف واذا false نكتب رسالة خطأ بسيطة للمستخدم

بعدها عملية رفع ملف جديد وتحديثه بقاعدة البيانات تكون نفس الكود السابق الاختلاف يكون ب sql نستخدم update ونحدد record المراد تحديثه بقاعدة البيانات 

اذا كان عندي وقت الليله بحاول اعدل الاكواد واكتبهم هنا باذن الله

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

نستكمل الاجابة على هذا السؤال وهو امتداد لسؤال آخر 

https://3alam.pro/forums/topic/19-%D8%A7%D8%B3%D8%AA%D9%81%D8%B3%D8%A7%D8%B1-%D9%84%D8%AD%D9%81%D8%B8-%D9%85%D9%84%D9%81%D8%A7%D8%AA-pdf-%D8%B9%D9%86-%D8%B7%D8%B1%D9%8A%D9%82-%D8%A7%D9%84%D9%8A%D9%88%D8%B2%D8%B1-%D8%B9%D9%86-%D8%B7%D8%B1%D9%8A%D9%82-php-%D9%88%D8%B9%D8%B1%D8%B6%D9%87%D8%A7-%D9%84%D9%84%D9%85%D8%B3%D8%AA%D8%AE%D8%AF%D9%85%D9%8A%D9%86-%D9%84%D8%AA%D8%AD%D9%85%D9%84%D9%8A%D9%87%D8%A7/

قمت بعمل مثال سريع لك لطريقة تحديث ملف بقاعدة البيانات بملف جديد وحذف القديم

قمت بالتعديل على ملف 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"] . " <a href='update.php?file_id={$row["id"]}'>update</a>" . '<br>';
    }
} else {
    echo "0 results";
}
$conn->close();

بعدها قمت بإنشاء ملف جديد باسم update.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);
}

if(isset($_GET['file_id']))
{
	echo '
		<form action = "update.php" method = "POST" enctype = "multipart/form-data">
	         <input type = "file" name = "userFile" />
	         <input type = "hidden" name = "file_id" value = "'. $_GET['file_id'] .'" /> 
 	         <input type = "submit"/>
      	</form>
	';
}

if(isset($_FILES['userFile']) and !empty($_FILES['userFile']['name']) and isset($_POST['file_id']))
{
	$file_id = $_POST['file_id'];
	$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;

	$sql = "SELECT * FROM upload WHERE id = {$file_id}";
	$result = $conn->query($sql);
	$row = mysqli_fetch_assoc($result);

	if(file_exists($row['path']))
	{
		unlink($row['path']);
	}else
	{
		die('no file was found');
	}

	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.");
	}

	$sql = "UPDATE upload SET name = '$file_name', type = 'file_type', size = '$file_size', path = '$path' WHERE id=$file_id";

	if ($conn->query($sql) === TRUE) {
	    echo "File updated successfully";
	} else {
	    echo "Error updating file: " . $conn->error;
	}

}

$conn->close();

وظيفة الملف عرض نموذج رفع ملف جديد وبداخله input مخفي يحمل id الملف القديم ثم يقوم بارسال النموذج لنفس الملف لعملية الرفع والحذف والتحديث 

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

aml • منذ 6 سنوات

 تمام ضبط .. شششكرا شكرا  الله يجزاك خير ويسخر لك عباده الصالحين ويسهل امورك مثل ماساعدتن

اكرر شكري لك وعذرا بالتاخير بالرد كان لدي ظروف 

بالتوفيق 

Ali Majrashi • منذ 6 سنوات
2 ساعات مضت, aml said:

 تمام ضبط .. شششكرا شكرا  الله يجزاك خير ويسخر لك عباده الصالحين ويسهل امورك مثل ماساعدتن

اكرر شكري لك وعذرا بالتاخير بالرد كان لدي ظروف 

بالتوفيق 

آمين وياك يارب 

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

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