我正在尝试编辑员工。如果以新名称形式上传新文件,我将删除旧文件。除使用旧图像进行更新外,此方法效果很好。 我看了一些有关Stackoverflow问题的教程和示例,但是它们不能解决我的问题。
我的问题是:
如果用户想保留旧图像,如何使用现有图像更新行 图片?
这是我的更新页面:
// This part select old image
try{
$id = $_REQUEST['update_id'];
$select_stmt = $pdo->prepare('SELECT * FROM employees WHERE id =:id');
$select_stmt->bindParam(':id',$id);
$select_stmt->execute();
$row = $select_stmt->fetch(PDO::FETCH_ASSOC);
extract($row);
}catch(PDOException $e){
$e->getMessage();
}
}
if(isset($_REQUEST['btn_update'])){
try{
$name = $_REQUEST['name'];
$address = $_REQUEST['address'];
$salary = $_REQUEST['salary'];
// This part giving new name to image and validation.
$image_file = generatenewstring(12).$_FILES["image"]["name"];
$type = $_FILES["image"]["type"];
$size = $_FILES["image"]["size"];
$temp = $_FILES["image"]["tmp_name"];
$path="../images/ilanlar/".$image_file;
$directory="../images/ilanlar/";
if($image_file){
if($type=="image/jpg" || $type=='image/jpeg' || $type=='image/png' || $type=='image/gif'){
// Checking for image if exist we will delete this statment later on
if(!file_exists($path)){
if($size < 1000000){
// deleting old image
unlink($directory.$row['image']);
// uploading new image
move_uploaded_file($temp, "../images/ilanlar/" .$image_file);
}else{
$errorMsg = "Your File To large Please Upload 5MB Size";
}
}else{
$errorMsg = "File Already Exists...Check Upload Folder";
}
}else{
$errorMsg = "Upload JPG, JPEG, PNG & GIF File Formate.....CHECK FILE EXTENSION";
}
}else{
$image_file = $row['image'];
}
if(!isset($errorMsg)){
$stmt=$pdo->prepare('UPDATE employees SET
name=:name, address=:address, salary=:salary, image=:image
WHERE id=:id');
$stmt->bindParam(':name',$name);
$stmt->bindParam(':address',$address);
$stmt->bindParam(':salary',$salary);
$stmt->bindParam(':image',$image_file);
$stmt->bindParam(':id',$id);
//bind all parameters
if($stmt->execute()){
echo "File Update Successfully.......";
header("refresh:3;3.php");
}
}
}catch(PDOException $e){
echo $e->getMessage();
}
}
感谢您的帮助。
我尝试的代码太长,每次都必须执行一个新查询:
if ($image == 0) {
//query1
} else if ($image == 1) {
//query2
} else {
//query3
}
答案 0 :(得分:0)
出了什么问题:
当您不上传新文件时,您仍然可以运行
$image_file = generatenewstring(12).$_FILES["image"]["name"];
// snip
if ($image_file) {
// Processing image & error handling
}
我假设generatenewstring(12)
生成一个包含12个随机字符的字符串,所以$image_file
总是会屈服为true,因此始终执行if语句。
您的类型检查将失败,因此$errorMsg
将设置为"Upload JPG, [snip]"
。因此
if(!isset($errorMsg)) {
// Update-statement
}
不会被执行。
解决方案:
将if ($image_file)
更改为if(is_uploaded_file($_FILES["image"]["tmp_name"]))
。在这种情况下,当您不上传任何内容时将不会执行整个块,因此不会设置$errorMsg
。
您可能也不想:
1)移动一些代码(不上传时不需要整个块)
if(is_uploaded_file($_FILES["image"]["tmp_name"])) {
$image_file = ...
$type = ...
// [snip]
$directory = ...
if ($type == "image/jpg") {
}
} else {
$image_file = $row['image'];
}
2)在某处回显您的$errorMsg
;)
3)您可以将COALESCE
留在注释之外,您已经通过将$image_file
设置为else语句中的当前值来解决该问题。