替换以前的图像并使用PHP将新图像添加到服务器

时间:2012-11-28 10:01:54

标签: php mysql sql file upload

我目前正在开发一个“编辑项目”脚本,该脚本允许用户替换我网站上的图片。这部分效果很好。

但是,我也希望选择允许上传新图片 - 这些不会取代现有图片。 因此,总而言之,用户可以替换现有图像并使用表单上传新图像。

问题: 如何告诉我的PHP,某些图片而不是替换图片?我需要这样做,所以我可以对新图像运行INSERT INTO查询。

我在下面附上了部分代码:

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 />

非常感谢任何指示: - )

1 个答案:

答案 0 :(得分: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注入的危险。