使用 ajax、jquery 和 PHP 从数据库更新图像不起作用

Posted

技术标签:

【中文标题】使用 ajax、jquery 和 PHP 从数据库更新图像不起作用【英文标题】:Update Image from database using ajax, jquery,and PHP not working 【发布时间】:2016-08-31 20:09:21 【问题描述】:

我想更新已登录我网站的用户的个人资料图片。 我使用 ajax、jquery、php 来更新数据,以便在不刷新页面的情况下更新数据。 此代码仅用于将图像上传到文件夹,但是当我使用此代码从数据库更新图像时,它仅将 null 发送到数据库。

jquery 和 ajax 脚本

$("#form-ava").on('submit',(function(e) 
    e.preventDefault();
    $.ajax(
        url: "../config.inc/upload.php",
        type: "POST",
        data:  new FormData(this),
        contentType: false,
        cache: false,
        processData:false,
        beforeSend : function()
        
            //$("#preview").fadeOut();
            $("#err").fadeOut();
        ,
        success: function(data)
        
            if(data=='invalid')
            
                // invalid file format.
                $("#err").html("Invalid File !").fadeIn();
            
            else
            
                // view uploaded file.
                $("#preview-ava").html(data).fadeIn();
                $("#form-ava")[0].reset();
      $("#hidden-list").hide();
            
        ,
        error: function(e)
        
            $("#err").html(e).fadeIn();
        
   );
));

这是 php 语法 上传.php

<?php
require_once 'koneksi.php';
 if($_POST)

  $id_user= $_POST['id_user'];
  $img = $_FILES['image']['name'];
  $tmp = $_FILES['image']['tmp_name'];

$valid_extensions = array('jpeg', 'jpg', 'png', 'gif', 'bmp'); // valid extensions
$path = '../images/ava/'; // upload directory
  try 

// get uploaded file's extension
$ext = strtolower(pathinfo($img, PATHINFO_EXTENSION));

// can upload same image using rand function
$final_image = rand(1000,1000000).$img;

// check's valid format
if(in_array($ext, $valid_extensions))

    $path = $path.strtolower($final_image);

    if(move_uploaded_file($tmp,$path))
    
        echo "<img src='$path' />";


else

    echo 'invalid';

$update = $db_con->prepare("UPDATE tb_users SET image=:img WHERE id_user=:id_user");
$update->bindparam(":id_user", $id_user);
$update->bindparam(":img", $image);
$update->execute();
$count = $update->rowCount();
if($count>0) 
echo "success";
else 
echo "can't update!";


catch(PDOException $e) 
echo $e->getMessage();


?>

HTML 语法

<form id="form-ava" action="../config.inc/upload.php" method="post" enctype="multipart/form-data">
         <input type="hidden" id="id_user" name="id_user" value="<?php echo $row->id_user;?>">
                <input id="ava-img" type="file" name="image" value="<?php echo $row->image;?>"/>
                    <input id="button" type="submit" value="Simpan" name="update"></br>
         <a href="#" class="btn btn-large btn-success" id="cancel-act"></i> &nbsp; Batal</a>
     </form>
       <div id="err"></div>

【问题讨论】:

我们不会为您编写代码...请尝试一下,然后我们可以帮助调试; ) @Webomatik 抱歉,我没有要求你编写代码。我只是请人告诉我为什么它不起作用... @Ayuktia 阅读表格:***.com/a/4526286/4266042, ***.com/q/23980733/4266042 @GrzegorzGajda 谢谢你,我会试试的.. 告诉我们当你运行你的代码时会发生什么,你得到了什么错误,什么行为是错误的,等等。 【参考方案1】:
<form id="form-ava" action="../config.inc/upload.php" method="post" enctype="multipart/form-data">
     <input type="hidden" id="id_user" name="id_user" value="<?php echo $row->id_user;?>">
            <input id="ava-img" type="file" name="image" value="<?php echo $row->image;?>"/>
                <input id="button" type="submit" value="Simpan" name="update"></br>
     <a href="#" class="btn btn-large btn-success" id="cancel-act"></i> &nbsp; Batal</a>
 </form>
   <div id="err"></div>


<script type="text/javascript">
$("#form-ava").on('submit',(function(e) 
e.preventDefault();
$.ajax(
    url: "../config.inc/upload.php",
    type: "POST",
    data:  new FormData(this),
    contentType: false,
    cache: false,
    processData:false,
    beforeSend : function()
    
        //$("#preview").fadeOut();
        $("#err").fadeOut();
    ,
    success: function(data)
    
        if(data=='invalid')
        
            // invalid file format.
            $("#err").html("Invalid File !").fadeIn();
        
        else
        
            // view uploaded file.
            $("#preview-ava").html(data).fadeIn();
            $("#form-ava")[0].reset();
  $("#hidden-list").hide();
        
    ,
    error: function(e)
    
        $("#err").html(e).fadeIn();
    
);
));
</script>

【讨论】:

【参考方案2】:

我在您的 proses.php 代码中发现了两个错误

<?php include 'koneksi.php'; 
$foto = @$_POST['foto'];
$id = @$_POST['id'];
$update = $db->prepare("UPDATE tb_users SET foto=:foto WHERE id=:id");
$update>bindParam(":id", $id);
$update->bindParam(":foto", $foto);
$update->execute();
if($update->rowCount() > 0) 
  echo "success";

?>

【讨论】:

【参考方案3】:

错误消息会很有帮助,但至少你在$update&gt;bindParam(":id", $id); 中缺少-,所以它应该是$update-&gt;bindParam(":id", $id);

你又做了同样的事情,$update&gt;rowCount() 应该是$update-&gt;rowCount()

更新:我看到你edited你的问题来解决这些问题,但仍然没有发布你收到的错误。那些 tpyos 在您的问题中,还是您正在逐步修复您的代码?

不过,您似乎在此语句中缺少一个右大括号

if($update>rowCount() > 0) 
  echo "success";
 ?>

另外,你为什么用@$_POST 来屏蔽通知?如果这些值为空,那么您真的要更新表吗?

【讨论】:

那么你需要搜索你的错误日志。

以上是关于使用 ajax、jquery 和 PHP 从数据库更新图像不起作用的主要内容,如果未能解决你的问题,请参考以下文章

使用 Ajax 和 JQuery 从 PHP 文件中获取数据

使用 php 和 jquery ajax 从 mysql 数据库中获取数据

如何使用 Ajax 和 Jquery 从 PHP 数据库中提取信息,并使用该信息填充元素?

jquery - 如何使用通过 AJAX 从 MySQL 和 PHP 检索的数据将图像添加到 Select2 下拉列表?

codeigniter php 和 jquery - 如何从多个表中获取数据并通过 ajax 返回

使用 jQuery 的 $.ajax( ) 函数从 php 文件中获取 JSON 数据不起作用