语句运行,而不考虑If语句


Statement running regardless of If Statement

即使没有上传图像,也会执行'unlink()'方法,为什么会这样?我该如何修复它?

If (isset($_FILES["image"]["name"])) {
    move_uploaded_file($_FILES["imageUp"]["tmp_name"],
        "C:/xampp/htdocs/" . $_FILES["image"]["name"]);
    //if (file_exists($delete)) {
        unlink($delete);
    }
    else {
    $img = $data['row']->image_name;
    }
//}
isset($_FILES["image"]["name"] 

将始终设置,即使您是否上载文件。isset检查事物是否被设置。所以它将永远是true

所以你需要更改你的代码:

if (isset($_FILES["image"]["name"]) && !empty($_FILES["image"]["name"])) {
move_uploaded_file($_FILES["imageUp"]["tmp_name"],
    "C:/xampp/htdocs/" . $_FILES["image"]["name"]);
//if (file_exists($delete)) {
    unlink($delete);
} else {
    $img = $data['row']->image_name;
}

请试试这个。希望这有帮助:)

根据php文档,如果一切正常,move_uploaded_file将返回TRUE,如果出现问题,则返回FALSE

正如您所说,图像没有移动,因为move_uploaded_file正在返回FALSE
您可以证明将您的代码更改为:

var_dump(move_uploaded_file($_FILES["imageUp"]["tmp_name"],
    "C:/xampp/htdocs/" . $_FILES["image"]["name"]));

看看会有什么回报。

当:时,move_uploaded_file将返回FALSE

  1. 目的地不存在
  2. 服务器没有足够的权限将文件移动到目标
  3. 文件未上载,因为它大于php.ini变量upload_max_filesize
  4. 文件未上载,因为它大于php.ini变量post_max_size

检查并纠正所有这些点,它应该是有效的。

执行unlink()的真正原因是您禁用了if条件

使用CCD_ 11对CCD_。

这是代码,你可能想写:

if (isset($_FILES["image"]["name"]) && is_uploaded_file($_FILES['image']['tmp_name'])) {
    move_uploaded_file($_FILES["image"]["tmp_name"],
        "C:/xampp/htdocs/" . $_FILES["image"]["name"]);
    if (file_exists($delete)) {
        unlink($delete);
    } else {
        $img = $data['row']->image_name;
    }
}

并确保$delete已保存!想象一下,如果$delete等于"C:'users'your-name'some-private-file"。如果您需要更多帮助,请给我们更多关于这个片段的代码。