【问题标题】:PHP upload image replace oldPHP上传图片替换旧
【发布时间】:2012-08-15 15:07:09
【问题描述】:

好的,我正在工作的后台工作。 这是我对 PHP 的第一次体验,所以我的代码很可能不会那么好。

这是我的工作:

客户必须能够上传产品的图片+标题+描述,并且必须在主页上显示该产品。 之后他必须能够删除或修改该项目。

所以上传工作正常,我设法展示产品,删除它,修改它。

唯一的问题是:当我使用新图像进行修改时,它不会替换目录中的旧图像(图像采用 sql 输入的 id,例如 0.jpg -> 1.jpg -2.jpg等等)

所以我将在这里展示我的上传脚本并进行修改:

上传:

<?php
     include("config.php");

$dir = "../images/";
$dir = $dir . basename( $_FILES['image']['name']);
$title = $_POST['title'];
$description = $_POST['desc'];
$position = $_POST['position'];
$image = ($_FILES['image']['name']);
$uploadedfile = $_FILES['image']['tmp_name'];
$uploadedfiletype = $_FILES['image']['type']; 

if (!($uploadedfiletype =="image/pjpeg" OR $uploadedfiletype =="image/jpeg" OR $uploadedfiletype =="image/jpg")){
      echo "Image must be jpg file";
}else if (move_uploaded_file($_FILES['image']['tmp_name'], $dir)){
    $sql="INSERT INTO test (title, description, position) VALUES ('$title','$description','$position')";
    if (!mysql_query($sql,$con)){
         die('Error: ' . mysql_error());
  }
  $newname = "../images/" . mysql_insert_id() . ".jpg";
  rename ("../images/$image","$newname");    
  $orig_image = imagecreatefromjpeg("../image/$newname");
  $sm_image = imagecreatetruecolor(96,96);
  imagecopyresampled($sm_image,$orig_image,0,0,0,0,96,96,imagesx($orig_image),imagesy($orig_image));
  imagejpeg($sm_image, $newname, 100);
  echo 'Upload good <a href="connected.php">Retour</a>';
}else{
    echo "Problem";
}
?>

这是我的修改脚本(基本上是一样的,但使用 UPDATE for sql):

<?php

    include("config.php");

$dir = "../images/";
$dir = $dir . basename( $_FILES['image']['name']);
$title = $_POST['title'];
$description = $_POST['desc'];
$position = $_POST['position'];
    $id=$_POST['id'];
$image = ($_FILES['image']['name']);
$uploadedfile = $_FILES['image']['tmp_name'];
$uploadedfiletype = $_FILES['image']['type']; 

unlink('../images/$id');

if (!($uploadedfiletype =="image/pjpeg" OR $uploadedfiletype =="image/jpeg" OR $uploadedfiletype =="image/jpg")){
      echo "L'image doit être en .jpg ou .jpeg";
}else if (move_uploaded_file($_FILES['image']['tmp_name'], $dir)){ 
  $sql="UPDATE test SET title='$title', description='$description' WHERE id='$id'";
    if (!mysql_query($sql)){
         die('Error: ' . mysql_error());
  }
  $newname = "../images/" . mysql_insert_id() . ".jpg";
  rename ("../images/$image","$newname");    
  $orig_image = imagecreatefromjpeg("../image/$newname");
  $sm_image = imagecreatetruecolor(96,96);
  imagecopyresampled($sm_image,$orig_image,0,0,0,0,96,96,imagesx($orig_image),imagesy($orig_image));
  imagejpeg($sm_image, $newname, 100);
  echo 'Modif réussi <a href="connected.php">Retour</a>';
}else{
    echo "Un probleme est survenue";
}

 ?>

提前感谢您的帮助!

【问题讨论】:

    标签: php mysql image upload replace


    【解决方案1】:

    您似乎在unlink('../images/$id'); 附近遇到了拼写错误,我的意思是,PHP 不会在单引号内编译 $id。

    试试unlink("../images/$id");unlink('../images/'.$id);

    如果它仍然不起作用,您可能有一个正确的问题。尝试通过var_dump(unlink("../images/$id"))调试它,如果返回false,则表示删除失败。

    如果是这样,请尝试创建一个新文件,例如使用 sha1 哈希:

    $dir = "../images/".sha1(rand())."-".basename( $_FILES['image']['name']);

    这将为每个上传的文件创建一个新的唯一名称。它将存储旧图像,但名称不同。 只需将它们以不同的方式调用到您的数据库中

    【讨论】:

    • 感谢您对此进行调查。所以我尝试了你的取消链接,没有任何反应,我也使用了 var_dump,返回是:bool(false),他们有什么提示吗?我真的很想尝试解决这个问题,而不是创建一个新图像。再次感谢!
    • 您确定文件存在吗?试试var_dump(file_exists("../images/$id"));。如果仍然没有,请尝试使用 unlink(realpath("../images/$id")); 的完整路径
    • 仍然得到完全相同的东西。由于我怀疑我回显了 $id,它确实返回了 id(在本例中为 52),所以愚蠢的是我只是没有添加 .jpg,我使用了:unlink('../images/'.$id .'.jpg');它确实删除了文件,但不上传新文件
    • 尝试用$newname = "../images/" . $id . ".jpg";替换$newname = "../images/" . mysql_insert_id() . ".jpg";
    【解决方案2】:

    更改unlink('../images/$id');'../images/$id' 分配给一个变量,然后使用:unlink($variable_name); 这对你有好处。

    【讨论】:

      【解决方案3】:
      SELECT `AUTO_INCREMENT`
      FROM  INFORMATION_SCHEMA.TABLES
      WHERE TABLE_SCHEMA = 'DatabaseName'
      AND   TABLE_NAME   = 'TableName';
      

      【讨论】:

      • 请解释你的答案
      猜你喜欢
      • 1970-01-01
      • 2013-03-03
      • 2012-07-07
      • 1970-01-01
      • 1970-01-01
      • 2017-12-16
      • 2016-10-12
      • 2011-03-16
      • 2013-04-29
      相关资源
      最近更新 更多