الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

الملفات المرفقة

مغلق
بدأه المنهل في 21 أبريل 2005 · 14 رد · 1,030 مشاهدة · في منتدى تطوير المواقع بـ PHP
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

اعزائي لدي سؤالين وحل احدهما يكفي ولا مانع من الاثنين B)

1- هل يمكن تخزين ملف (ملف مرفق Attachment) في قاعدة بيانات (مش ايميل لاني مش مستعمل الدالة mail)بحيث يكون الملف ملازما لسجل معين :

اذا كان ممكن

أ- ما هو نوع الحقل

ب- هل اقوم بالاضافة عن طريق insert عادية انا في الملف الاول html . قمت بعمل فورم type=file لعملية browse وفالملف الثاني php . عملت insert بس ما نفذ معاي مع العلم انه في PHPMYADMIN استطيع تحميل الملف بس مش عملية لانه اريد واجه حقتي

ج- كيف اقوم باستعراض الملف بعد تخزينه في الحقل .(اريد زي لما تلقى ملف doc. او pdf. في شكل ارتباط تشعبي وعند النقر يعطي خيار الحفظ او الاستعراض (انااريد الاستعراض بس بنفس الطريقة )) او بما ترونه او يراه php مناسبا .

2- في ناتج الاستعلام لدي حقل عملته ارتباط تشعبي

<td><a href = http://.....................php>$row[name]</a></td>

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

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

وللتبسيط في قائمة المنتدى نجد عدة مقالات عندما نقوم بالنقر على عنوان الموضوع يفتح الموضوع المعني فقط

* ملاحظة انني وجدت في الوصلة showtopic=48827 انه قام بعمل الاتي

<a href=http://..................php?t=$row[topic_id]>

اذا كان هذا هو الحل فكيف اعوض topic_id هل اضع اسم الحقل

ولكم جزيل الشكر بس ياريت مستعجل :(

اخوكم التيجاني

تم تعديل هذه المشاركة بواسطة المنهل في 21 أبريل 2005 في 21:17

#2

السلام عليكم

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

الملاحظة الثانية نعم كلامك صحيح تضع اسم الحقل ، مثلا لو كان عندك حقل ID تكتب

thread=$row[id]

ثم في ملف المعالجة تجعل البرنامج يبحث عما يطابق هذا الحقل

$ser=mysql_query("select * from Table1 where id='$thread'");

460.gif

#3

تسلم يالمتميز ووصلت لنفس الحل بعد ما طرحت السؤال بس الساعة 3 صباحا

والف شكر

ولكن للزيادة اريد قراءة اسم الملف عن طريق

<imput type=file>

بدلا من ان اقوم بكتابة اسم الملف ( للعلم يجب كتابة امتداد الملف بس انا قمت بحصر الملفات بنوع واحد مثلا msword عن طريق doc. داخل البرنامج للتسهيل على مدخل البيانات )

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

وتسلم

تم تعديل هذه المشاركة بواسطة المنهل في 26 أبريل 2005 في 10:37

#4

السلام عليكم

للحصول على اسم الملف استخدم userfile_name طبعا username هو الاسم الذي سميته للملف المرفق <input type=file> داخل النموذج Form

وبالنسبة لنوع الحقل varchar

اذا استخدمت Browser تحصل على اسم الملف .

وفي ملف المعالجة تقوم بادخال بياناتك ، وتضع حقل لاسم الملف المرفق ويكون بياناته كما وضحنا هو المتغير $userfile_name

ومن ثم تقوم برفع الملف المرفق عن طريق دالة copy لنسخ الملف من جهازك إلى الموقع

وطريقة عملها كالتالي

اولا تحدد مسار رفع الملفات

$upfile="Folder/".$userfile_name;

ومن ثم تستخدم الدالة copy

if(!copy($userfile, $upfile)){
    echo "<center>فشل في تحميل الملف";
    exit;
}
echo "تم تحميل الملف بنجاح";

ولكي تضع وصلة لتحميل الملف ( مثلا لو كان طريقة العرض عن طريق البحث ) :

$ser=mysql_query("select * from Table1");
$result=mysql_num_rows($ser);
for($i=0;$i<$result;$i++){
$row=mysql_fetch_array($ser);

echo "<a href=file.php?action=attach&id=$row[id]>$row[userfile]</a>";

الان لما تضغط على الوصلة ينتقل للبحث عن المرفق الذي يحمل رقم الـid الموجود بالوصلة

ثم تكتب

if ($action=="attach" && $id){
echo "<center><b>سيتم تحميل الملف انتظر قليلا ..";
$ser=mysql_query("select * from Table where id='$id'");
$result=mysql_num_rows($ser);
for($i=0;$i<$result;$i++){
    $row=mysql_fetch_array($ser);
}
 $site="http://www.yoursite.com/folder/".$row[userfile];

      echo "<META HTTP-EQUIV=\"refresh\" CONTENT=\"1; URL=$site\">\n";

}

تم تعديل هذه المشاركة بواسطة المتميز في 26 أبريل 2005 في 22:32

460.gif

#5

تسلم يالمتميز وراح اجرب

بس اللي فهمته هو copy للملف وهو شيء جميل

ولكن على النظام القديم وهو تخزين اسم الملف فقط ومن ثم فتحه في صفحة معالجة عن طريق الاسم المخزن واجهتني مشكلة وهي ان المسار الذي يعطيني اياه uploade عن طريق browse لاتستطيع php قرائته

d:\folder\folder\filename.doc

وكما قلت لك اضررت الى تخزين مسار محدد لمجلد والمتغير كان عبارة عن اسم الملف فقط حتى ان الكود تضمن امتداد الملف (المشكلة في ذلك تضييق مجال استخدام ملفات متنوعة بسبب تحديد الامتداد مثلاdoc. - وايضا يجب ان تكون الملفات المرفقة موجودة في مجلد واحد فقط وهو المحدد بالمسار )

وانا اريدالحرية للمستخدم في مكان تخزين الملف او لقراءة من اي مكان (مجلد)

ياريت تسعفني بالحل

وايضا راح اجرب الكود الجديد شكله رائع واكثر فعالية

تم تعديل هذه المشاركة بواسطة المنهل في 30 أبريل 2005 في 14:18

#6

وانا اريدالحرية للمستخدم في مكان تخزين الملف او لقراءة من اي مكان (مجلد)

------------------------

هل المستخدم لديه الصلاحية لوضع الملف في اي مكان ؟؟

لابد ان يكون تصريح المجلد 777

اخي العزيز يا ليت تضع فكرة برنامجك كاملة حتى نستطيع مساعدتك

وشكرا

460.gif

#7

السلام عليكم

معليش تعبتك معاي بس ياريت التوضيح في النقط التالية

1- هل هذه المتغيرات تشير الى نفس المتغير ام هناك اختلاف:

userfile_name  و $userfile_name و $userfile و $row[userfile]

2- بالنسبة للملفات

الاول html. واللي فيه كود browser

الثاني php. واللي فيه كود insert into table +

$upfile="Folder/".$userfile_name;

+

if(!copy($userfile, $upfile)){
   echo "<center>فشل في تحميل الملف";
   exit;
}
echo "تم تحميل الملف بنجاح";

وهناك ملف اخر php. اللي فيه الوصله link

والاخير يقوم باظهار النتيجة

صح :unsure:

بس ما اعطاني نتيجة ومافي ادخال لقاعدة البيانات صراحة محتاج معاي شوية تعب

والملاحظة انه مافي URL لاني شغال database على localhost

ومش عارف شوا سوي

ولو قلنا نسهل الموضوع شوية باستخدام الطريقة الاولى وهي تخزين اسم الملف فقط في قاعدة البيانات

المشكلة هي تحديد مسار المجلد الذي به الملفات داخل الكود وهي عملية غير مرنة للمستخدم يحيث انه ماعنه حرية اختيار اي ملف بس اللي موجودات في المجلد المذكور والحل هو تخزين اسم الملف بس عن طريقbrowse والمشكلة انه عن طريق browse المسار بيكون d:\folder\filename

والphp ما تقراه لازم يكون d:/folder/filename كيف احلها

معليش كترت عليك بس استحملني

#8

عليكم السلام

userfile_name  و $userfile_name و $userfile و $row[userfile

userfile_name هذا يعني اسم الملف الذي تم استعراضه مثل page.php

اما userfile هذا متغير اخر استخدمته من اجل اعرف انه يرمز للملف المستعرض

اما $row[userfile] فهذا حقل قاعدة بيانات

اما بالنسبة لترك الحرية للمستخدم باختيار المجلد الذي سيضع داخله الملف فلا أعرف هل بالامكان عمل ذلك ام لا ! ( لذلك باعتقادي انه يجب تحديد مسار المجلد قبل بدء التحميل ) .

ايضا لا تنسى انك لا تستطيع تشغيل ملفات البي تش بي مالم تكن موجودة في مجلد htdocs داخل السيرفر ، فكيف تريد المستخدم ان يضع ملفاته في أي مكان يريد ؟

اتمنى لك التوفيق

تم تعديل هذه المشاركة بواسطة المتميز في 1 مايو 2005 في 18:31

460.gif

#9

تسلم يالمتميز ويكفي دعاك لي بالتوفيق

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

طيب شو الحل انه php تقرا مسار \...\ (اللي تجيبه browse) مع العلم انها تقرا من اي مجلد بس يكون المسار /..../

وتسلم

#10

السلام عليكم

اخي العزيز browser وضعت لتحديد الملف الذي تريد نسخه وليس المكان الذي تريد اللصق فيه .

لانها لا تكتفي بمسار المجلد فقط وإنما اسم الملف كاملا

460.gif

#11

السلام عليكم

اذن سوء توصيل المعلومة مني هو سبب طول الموضوع

طيب الفكرة هي انه عندي قاعدة بيانات لفهرسة اسماء وعناوين ملفات (docاو pdf) تفتح عن طريق رابط من قاعدة البيانات

وسبب استخدام browser هو لنسخ اسم الملف ومن ثم تخزينه في قاعدة البيانات وليس للصق

والمشكلة هي انه browser تنسخ المسار \.....\ والphp تقرا /......../ فقط

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

ياريت تكون وصلت المعلومة

وتسلم

#12

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

ولا تنس ايضا بطء الفهم عندي

اخي العزيز بما انك قلت انك تستخدم البروسر لحفظ اسم الملف فقط

عملت صفحة فيها نموذج ادخال يحتوي على مربع نص لادخال اسم ( أو عنوان عام للملف ) ، وأيضا أداة ايداع النص userfile تجدها مرفقة في الملف upload.htm

وهذا كود ادخالها لقاعدة البيانات

$conn=mysql_pconnect("localhost","root","");
$db=mysql_select_db("files");
$insert=mysql_query("insert into files (title,dir) values ('$title','$userfile_name')");

وتجد ايضا ملف استعراض البيانات ( المرفق المرفق upload.php )

upload.htm

460.gif

#13

تنبيه / ملف upload.htm الذي في الملف السابق هو لادخال البيانات

والملف المرفق هنا لاستعراض البيانات

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

CREATE TABLE files (
   id int(11) NOT NULL auto_increment,
   title varchar(255) NOT NULL,
   dir varchar(255) NOT NULL,
   PRIMARY KEY (id)
);

INSERT INTO files VALUES ( '1', 'البي اتش بي لغة جميلة', '12.doc');

تم تعديل هذه المشاركة بواسطة المتميز في 5 مايو 2005 في 16:05

460.gif

#14

هنا الملف مضغوط

upload.zip

460.gif

#15

تسلم يالمتميز واعتقد انه المطلوب وراح اجرب

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…