我目前正在开发一个“编辑项目”脚本,该脚本允许用户替换我网站上的图片。这部分效果很好。
但是,我也希望选择允许上传新图片 - 这些不会取代现有图片。 因此,总而言之,用户可以替换现有图像并使用表单上传新图像。
问题: 如何告诉我的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 />
非常感谢任何指示: - )
答案 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注入的危险。