1

私は現在、ユーザーが自分のサイトの画像を置き換えることができる「プロジェクトの編集」スクリプトに取り組んでいます。この部分はうまく機能します。

ただし、新しい画像をアップロードできるようにするオプションも必要です。これらは既存の画像を置き換えるものではありません。したがって、要約すると、ユーザーはフォームを使用して既存の画像を置き換え、新しい画像をアップロードできます。

質問:一部の画像は 新しいものであり、置き換えられたものではないことをPHPに伝えるにはどうすればよいですか?新しい画像に対してINSERTINTOクエリを実行できるように、これを行う必要があります。

以下にコードの一部を添付しました。

既存のファイルの置換を処理するPHP:

    // get original name for ProjectImage update
    $query3 = "SELECT * FROM ProjectImage as pi WHERE pid = '$id' ORDER BY pi.id";
    $result3 = mysql_query ($query3); // Run the Query
    $row3 = mysql_fetch_array($result3);
    $originalname = $row3[1];

    $number_of_file_fields = 0;
    $number_of_uploaded_files = 0;
    $number_of_moved_files = 0;
    $uploaded_files = array();
    $upload_directory = dirname(__file__) . '/uploaded/'; //set upload directory

    for ($i = 0; $i < count($_FILES['images']['name']); $i++) {
        $number_of_file_fields++;
        if ($_FILES['images']['name'][$i] != '') { //check if file field empty or not
            $number_of_uploaded_files++;
            $uploaded_files[] = $_FILES['images']['name'][$i];
            if (move_uploaded_file($_FILES['images']['tmp_name'][$i], $upload_directory . $_FILES['images']['name'][$i])) {
                $number_of_moved_files++;
                $url = $_FILES['images']['name'][$i];
                list($width, $height, $type, $attr) = getimagesize("uploaded/".$_FILES["images"]['name'][$i]);
                $pieces = explode("_", $url);
                $ImageName = $pieces[1];    
                mysql_query("UPDATE ProjectImage SET Name = '$ImageName', Url = '$url', UrlHeight =  '$height' WHERE Name = '$originalname' AND Pid = '$id'");
            }    
        }    
    }

既存の画像のリストを生成するために使用されるPHP:

$query2 = "SELECT * FROM ProjectImage as pi WHERE pid = '$id' ORDER BY pi.id";
$result2 = mysql_query ($query2); // Run the Query
while ($row2 = mysql_fetch_array($result2))
{
?>
<div id="file_container" class="control-group">
    <label for="image" class="control-label">Image:</label>
    <div class="controls">
        <input name="images[]" type="file"  />
        <img src="uploaded/<?php echo $row2['Url']; ?>" />
        <a href="delete.php?id=<?php echo $row2['id']; ?>">Delete</a>
        <br />
    </div>
</div>
<?php
}
?>
<a href="javascript:void(0);" onClick="add_file_field();">Add another</a><br />

ポインタをありがとう:-)

4

1 に答える 1

1

それらを既存のものに置き換えてほしいかどうかは完全にはわかりません。とにかく、私はあなたに次のいずれかを行うために必要なすべての方法を提供します:

file_exists() -パスに基づいてブール値を返します。同じファイルがすでに存在するかどうかを確認するために使用できます。

rename() -おそらくこれはコードのどこかにすでにあります。基本的に、再配置時に既存のファイルを置き換えます。この動作を望まない場合は、file_exists()最初に条件を使用してください。

MYSQL INSERT ... ON UPDATEメソッドを使用すると、アップロードおよび置換機能を簡単に解決できます。これには、imagepathへの列を一意として設定する必要がありますが、これは関係なく持つ必要があります。

例:

INSERT INTO ProjectImage (Name, Url, UrlHeight, path_to_file)
VALUES ('$ImageName', '$url', '$height', '$path_to_file')
ON DUPLICATE KEY UPDATE Name = VALUES(Name), Url = VALUES(Url), UrlHeight = VALUES(UrlHeight)

それから、私はあなたのコードがあまりにも非論理的であると思うのではないかと思います。一部の変数には大文字が含まれ、一部の変数はそれらが説明するものに対して長すぎ、コードはMySQLインジェクションの危険にさらされています。

于 2012-11-28T10:23:28.090 に答える