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

مشكلة في إرسال قيمة ملف إلى صفحة php باستخدام javascript و AJAX

بدأه Mouhamed Saleem Zayat في 26 نوفمبر 2010 · 3 رد · 979 مشاهدة · في قسم البرمجة بــ Javascript
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

أعضاء الفريق العربي للبرمجة,,,

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

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

1- عنصر من نوع ملف يتم إنشائه داخل ملف محرر النصوص في js.

2- عندما يقوم المستخدم باختيار الصورة المناسبة فإن هذا العنصر يقوم بالتعامل مع الحدث onChange ويوجه مسار البرنامج للتابع uploadImage الذي يأخذ قيمة متغيرين الأول هو عنصر الملف والثاني فهو محرر النصوص (من أجل تحديد أي محرر نصوص في الصفحة التي تحتوي هذا المحرر سوف تظهر فيه الصورة التي قام المستخدم بتحميلها).

function uploadImage(filelement,rte){
var source = filelement.value;
if(uploadImagePath == null || uploadImagePath == ""){
  alert("PLZ Inialize Upload Path.");
  return "";
}
if(source != null && source != ""){
  var fileTypes=["bmp","gif","png","jpg","jpeg"];
  var ext=source.substring(source.lastIndexOf(".")+1,source.length).toLowerCase();

  for (var i=0; i<fileTypes.length; i++) if (fileTypes==ext) break; 
  if (i < fileTypes.length) {
   if (window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safari
	xmlhttp=new XMLHttpRequest();
   }
   else{// code for IE6, IE5
	xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
   }

   xmlhttp.onreadystatechange=function(){
    if (xmlhttp.readyState==4 && xmlhttp.status==200){
	var value = xmlhttp.responseText;
	if(value != "Can't upload image" && value != "There is no image"  && value != "Path is empty" && value != null && value  != ""){
      rteCommand(rte, 'InsertImage', value);
	}else {
      if(value == null || value  == ""){
   	alert("No value returned.");
      }else {alert(value);}
	} 
    }
   }

   xmlhttp.open("POST","../tools/ret/uploadimg.php",true);
   xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
   xmlhttp.setRequestHeader('Content-Type','multipart/form-data'); 
   if(document.getElementById("file") != null){
    xmlhttp.send("fn="+filelement+"&p="+uploadImagePath);
   }else {
    alert("File element img is NULL.");
   }


  }
  else {
   alert("لن تستطيع تحميل هذا الملف\n:رجاء قم بتحميل الصور ذات الإمتدادات التالية\n\n"+fileTypes.join(", "));
  } 

}
}

أما بخصوص البرنامج المكتوب بلغة php فهو كالتالي:

<?php
$message = "";
if(!isset($_REQUEST['p'])){
  $message = "Path is NULL";
}else {
  $path = $_REQUEST['p'];
  if(isset($_REQUEST['fn'])){
   $img_r = $_REQUEST['fn'];
   if($img_r['file']['name'] != null && $img_r['fiel']['name'] != ""){
    $rand = rand(000,999).$img_r['fiel']['name'];
    $docName = $rand;
    $docName = str_replace("%", "", $docName);
    $docName = str_replace("~", "", $docName);
    $target = $path.$docName; 
    if(!move_uploaded_file($img_r['file']['tmp_name'], $target)) { 
	$message = "Can't upload image".$target;
    }else {$message = $target;}
   }else {
    $message =  "There is no image";
   }  
  }else{
   $message ="Image array is null";
  }

} 

 echo $message;
?>

أرجو مساعدتي لمعرفة كيف أقوم بإرسال بيانات عنصر الملف حتي يستطيع برنامج php استقبالها كمصفوفة من نوع $_FILES.

ولكم جزيل الشكر

#3

:blush: جزاك الله خيراً سوف أباشر العمل بهذا الموضوع, كنت قد قرأت عن إمكانية إرسال الملفات بالطريقة التي أخبرتني عنها ولكني لم أعرف أنه لا يمكنني استخدام XMLHttpRequest للقيام برفع الملفات.

#4

ممكن تجرب ال swfupload: http://swfupload.org/

و اظن انه امكانياته احسن و استخدامه افضل

و ان احتجت اي مساعدة هابقى اظبطلك الكود

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