0

さて、私は職場のバックオフィスで働いています。これは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";
}
?>

そして、これが私の変更スクリプトです(基本的に同じですが、SQLのUPDATEを使用しています):

<?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";
}

 ?>

助けてくれてありがとう!

4

3 に答える 3

2

近くでタイプミスが発生したようですunlink('../images/$id');。つまり、PHPは一重引用符で囲まれた$idをコンパイルしません。

unlink("../images/$id");またはやってみてくださいunlink('../images/'.$id);

それでも機能しない場合は、正しい問題が発生している可能性があります。falseが返された場合は、デバッグにvar_dump(unlink("../images/$id"))失敗しました。これは、削除が失敗したことを意味します。

その場合は、たとえば、sha1ハッシュを使用して新しいファイルを作成してみてください。

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

これにより、アップロードされたファイルごとに新しい一意の名前が作成されます。古い画像が保存されますが、名前は異なります。それらをデータベースに別の方法で呼び出すだけです

于 2012-08-20T09:31:46.497 に答える
1

変数へのunlink('../images/$id'); 割り当てを変更してから使用します: それはあなたにとって良いでしょう。'../images/$id'unlink($variable_name);

于 2012-08-20T12:09:06.700 に答える
0
SELECT `AUTO_INCREMENT`
FROM  INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'DatabaseName'
AND   TABLE_NAME   = 'TableName';
于 2018-04-02T17:39:04.223 に答える