PHP-Jquery图像上传不起作用


PHP-Jquery image upload not working

我正在尝试通过ajax发布表单数据

表单 1.php

我使用请求来获取所有 URL 参数数据

$_REQUEST["Ename"];
$_REQUEST["eImg"];

要上传图片,我使用此代码 http://www.9lessons.info/2011/08/ajax-image-upload-without-refreshing.html

在上面的链接中,你可以看到源代码,在$_FILES['photoimg']['name']的地方;,我用$_FILES['image']['name'];但它没有上传文件并给出成功消息。

include('db.php');
session_start();
$session_id='1'; // User session id
$path = "uploads/";

我删除了标有 ** 的脚本

$valid_formats = array("jpg", "png", "gif", "bmp","jpeg");
    **if(isset($_POST) and $_SERVER['REQUEST_METHOD'] == "POST")
    {**
$name = $_FILES['image']['name'];
$size = $_FILES['image']['size'];
if(strlen($name)) {
  list($txt, $ext) = explode(".", $name);
  if(in_array($ext,$valid_formats)) {
    if($size<(1024*1024)) { // Image size max 1 Mb
      $actual_image_name = time().$session_id.".".$ext;
      $tmp = $_FILES['image']['tmp_name'];
      if(move_uploaded_file($tmp, $path.$actual_image_name)) {
        mysql_query("UPDATE users SET profile_image='$actual_image_name' WHERE uid='$session_id'");
        echo "<img src='uploads/".$actual_image_name."' class='preview'>";
      } else {
        echo "failed";
      } 
    } else {
      echo "Image file size max 1 MB";
    }
  } else {
    echo "Invalid file format.."; 
  }
}  **else {
  echo "Please select image..!";
  exit();
}**

您根本无法通过$.ajax()上传文件。

你必须使用一些trycky iframe的东西或类似的东西来使这项工作。 幸运的是,jQuery有现成的插件可以为您处理此问题(例如$.ajaxForm()似乎是您正在阅读的教程中使用的插件)。

编辑:
该插件还允许添加表单本身不存在的额外数据。引用文档:

数据
包含应与表单一起提交的额外数据的对象。

data: { key1: 'value1', key2: 'value2' }

对于通过 ajax 上传图像,您应该使用 iframe 并将其 id 设置为形成目标。

请看一下http://www.coursesweb.net/ajax/upload-images

上传图像的代码非常简单

那行不通!图像的处理方式与 Ajax 中的文本数据不同,因此您必须做的不仅仅是使用 $.ajax({}) 方法发布它。

但是,您可以使用jquery.form.js插件它可以完美运行 http://jquery.malsup.com/form/#download 有一个关于如何使用它的教程这里

我自己用过的任何方式,所以让我为你详细说明。

JavaScript 代码在这里

$('.uploadForm').live('click', function(evt){   
     $('#feedback').html(' ');
     $('#feedback').html('<img src="images/loader_image.gif" alt="Uploading...."/>');
     $("#formID").ajaxForm({
           target: '#feedback'
           }).submit();
    evt.preventDefault();   
 });

如果你的PHP代码很好,这应该可以工作.....只需以正常方式发布其余表单字段这应该适合您。如果 PHP 代码没问题

例如,如果您在这样的表单中有其他表单字段,如名字和姓氏

<div class="form">
 <fieldset class="ui-corner-all">
   <h3 class="ui-widget-header ui-corner-top" align="center">Client information</h3>
     <form action="save_new_client.php" enctype="multipart/form-data" id="clientForm" method="POST">
     <label>First Name</label>
      <input name="firstname" type="text" id="firstname" class="required" minlength="3"/>
      <label>Lastname</label>
      <input name="date_added" type="text" id="date_added" class="dateEst" />
       <label>Image</label>
       <input name="photo" type="file" id="photo" />
      <input type="submit" name="button" id="button" value="Save" class="uploadForm"/>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
       <input type="reset" name="reset" id="button" value="Cancel" /></td>
   </form>
 </fieldset>
<div id="feedback"></div>
</div>

它下面,你只需要添加一个div或段落来保存你的反馈消息....那么其余的就好了(就像我说的,如果你的PHP代码没问题)我没有看过很多