-1
因此在为学校做作业。停留在问题上,我不知道如何解决这个问题或在哪里寻找(他们也没有提供太多的帮助)。PHP BUG,上传图片
继承人的问题。
“editBanner.php”页面存在一个错误。删除图像时,该号码将被删除。上传新文件时,会给出比当前横幅总数多一个的编号。这是一个主要的问题,例如如果我们有四个横幅:1.jpg,2.jpg,3.jpg和4.jpg。如果删除2.jpg,我们会留下1.jpg,3.jpg和4.jpg。如果我们上传了一张新图片,页面会计算图片的数量(在这种情况下为三张)并添加1,给我们一个新的文件名“4.jpg”。我们已经有一个名为4.jpg的文件,因此旧的4.jpg将被替换。找到一种方法来解决这个错误,以便图像永远不会被替换。
这是代码。任何帮助都会很棒。并提前致谢。如果你知道一个修补程序,如果你能解释修补程序和它的工作原理,那就太棒了。
<?php
require_once ("Includes/simplecms-config.php");
require_once ("Includes/connectDB.php");
include("Includes/header.php");
confirm_is_admin();
$dir = 'Images/banner';
$confirmation = "";
if(isset($_GET["del"])){
if (file_exists($dir . "/" . $_GET["del"])) {
unlink($dir . "/" . $_GET["del"]);
$confirmation = $_GET["del"] . " deleted. <br><br>";
} else {
$confirmation = $_GET["del"] . " doesn't exist. <br><br>";
}
}
$files = scandir($dir);
array_shift($files);
array_shift($files);
$newImage = COUNT($files)+1;
if(isset($_GET["add"])) {
$confirmation = "Image successfully uploaded.";
}
if(isset($_FILES["file"]["name"])){
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 50 * 1024 * 1024) //50mb (1024 * 1kb = 1mb, 50 x 1024kb = 50mb)
&& in_array($extension, $allowedExts)) {
if ($_FILES["file"]["error"] > 0) {
echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
} else {
echo "Upload: " . $_FILES["file"]["name"] . "<br>";
echo "Type: " . $_FILES["file"]["type"] . "<br>";
echo "Size: " . ($_FILES["file"]["size"]/1024) . "kB<br>";
echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>";
move_uploaded_file($_FILES["file"]["tmp_name"], $dir ."/" . $newImage . "." . $extension);
echo "Stored in: " . $dir . "/" . $_FILES["file"]["name"];
header("Location: editBanner.php?add=1");
}
} else {
echo "Invalid file";
}
}
?>
<div id="container">
<div id="admin">
<?php
if(!empty($confirmation)) {
echo "<div id='confirmation'>" . $confirmation . "</div>";
}
for ($i = 0; $i < COUNT($files); $i++) {
echo '<div id="bannerImage">';
echo $files[$i] . ' - <a href="editBanner.php?del=' . $files[$i] . '">Delete</a><br>';
echo '<img src="' . $dir . '/' . $files[$i] . '"width="200px" height="100px" /><br>';
echo '</div>';
$files[$i--];
}
?>
<style>
#bannerAdd {
float: right;
margin-right: 700px;
}
</style>
<div id="bannerAdd" >
<form action="editBanner.php" method="post"
enctype="multipart/form-data" >
<h3>Upload a New Banner Image</h3>
<input type="file" name="file" id="file"><br>
<input type="submit" name="submit" value="Submit">
</form>
</div>
</div>
</div>
</div> <!-- End of outer-wrapper which opens in header.php -->
<?php
include ("Includes/footer.php");
?>
不意味着粗鲁,但是那些你的作业? –
是我的第一个PHP研究。这是一场噩梦。 –
'$ newImage = COUNT($ files)+1;' - 这是您构建新文件名的行。有人指出,在特定情况下它会造成重大问题。至少在您拥有的图像名称列表中将其更改为唯一的。 –