如何删除 PHP 数组

How to remove PHP array

我们正在尝试将新的图片上传字段 image_cover 合并到我们现有的 PHP 代码中。我们目前有 3 个 HTML 字段,前两个是 image0image1 数组,我们刚刚添加了 image_cover。我们希望使用这个新字段,就像我们的 image0image1 在没有数组的情况下上传一样,因为在该字段中只上传 1 张图像。这是我们的代码:

$inames = array();
for ($x = 0; $x < 2; $x++) {
    if (!($_FILES[image . $x]['name'] == "")) {
        $y = $x + 1;
        if ($_FILES['image$x']['size'] > $site_config['image_max_filesize'])
            show_error_msg(T_("ERROR"), T_("INVAILD_FILE_SIZE_IMAGE"), 1);
        $uploaddir = $site_config["uploads_dir"] . "/images/";
        $ifile = $_FILES[image . $x]['tmp_name'];
        $im = getimagesize($ifile);
        if (!$im[2])
            show_error_msg(T_("ERROR"), sprintf(T_("INVALID_IMAGE"), $y), 1);
        if (!array_key_exists($im['mime'], $allowed_types))
            show_error_msg(T_("ERROR"), T_("INVALID_FILETYPE_IMAGE"), 1);
        $ret = SQL_Query_exec("SHOW TABLE STATUS LIKE 'files'");
        $row = mysql_fetch_array($ret);
        $next_id = $row['Auto_increment'];
        $ifilename = $next_id . $x . $allowed_types[$im['mime']];
        $copy = copy($ifile, $uploaddir . $ifilename);
        if (!$copy)
            show_error_msg(T_("ERROR"), sprintf(T_("IMAGE_UPLOAD_FAILED"), $y), 1);
        $inames[] = $ifilename;
    }
}

我们的查询如下(我们添加了$icover

$ret = SQL_Query_exec("INSERT INTO table (filename, owner, name, descr, image_cover, image1, image2, category, added, info, size, numfiles, save_as, rules, external, nfo, filelang, anon, last_action) VALUES (".sqlesc($fname).", '".$CURUSER['id']."', ".sqlesc($name).", ".sqlesc($descr).", '".$icover[0]."', '".$inames[0]."', '".$inames[1]."', '".$catid."', '" . get_date_time() . "', '".$info."', '".$size."', '".$filecount."', ".sqlesc($fname).", '".$rules."', '".$external."', '".$details."', '".$langid."','$anon', '".get_date_time()."')");

HTML 个字段

<form action="index.php" method="post">
<input type='file' name='image_cover' size='50' />
<input type='file' name='image0' size='50' />
<input type='file' name='image1' size='50' />

我们的专栏已就位,是 image1image0 专栏的匹配重命名副本 table .我们应该怎么做?太感谢了,难住了!

首先,您可能希望将图像上传过程与查询数据库 table 中的 'next ID' 分离。使用关系记录中的标识符重命名文件,例如 Post 的标题或用户名等。为了下面的示例,我将只使用当前时间戳。

其次,您的查询将无法正常工作,因为 $icover 变量未创建。

为了以最简单的方式演示这一点,您可以从循环中提取图像处理代码,然后 运行 再次将其用于图像封面:

$time = time();
$inames = array();
for ($x = 0; $x < 2; $x++) {
    if (!($_FILES[image . $x]['name'] == "")) {
        $y = $x + 1;
        if ($_FILES['image$x']['size'] > $site_config['image_max_filesize'])
            show_error_msg(T_("ERROR"), T_("INVAILD_FILE_SIZE_IMAGE"), 1);
        $uploaddir = $site_config["uploads_dir"] . "/images/";
        $ifile = $_FILES[image . $x]['tmp_name'];
        $im = getimagesize($ifile);
        if (!$im[2])
            show_error_msg(T_("ERROR"), sprintf(T_("INVALID_IMAGE"), $y), 1);
        if (!array_key_exists($im['mime'], $allowed_types))
            show_error_msg(T_("ERROR"), T_("INVALID_FILETYPE_IMAGE"), 1);
        $ifilename = $time . '_' . $x . $allowed_types[$im['mime']];
        $copy = copy($ifile, $uploaddir . $ifilename);
        if (!$copy)
            show_error_msg(T_("ERROR"), sprintf(T_("IMAGE_UPLOAD_FAILED"), $y), 1);
        $inames[] = $ifilename;
    }
}

    if (!($_FILES['image_cover']['name'] == "")) {
        if ($_FILES['image_cover']['size'] > $site_config['image_max_filesize'])
            show_error_msg(T_("ERROR"), T_("INVAILD_FILE_SIZE_IMAGE"), 1);
        $uploaddir = $site_config["uploads_dir"] . "/images/";
        $ifile = $_FILES['image_cover']['tmp_name'];
        $im = getimagesize($ifile);
        if (!$im[2])
            show_error_msg(T_("ERROR"), sprintf(T_("INVALID_IMAGE"), $y), 1);
        if (!array_key_exists($im['mime'], $allowed_types))
            show_error_msg(T_("ERROR"), T_("INVALID_FILETYPE_IMAGE"), 1);

        $ifilename = $time . '_image_cover' . $allowed_types[$im['mime']];
        $copy = copy($ifile, $uploaddir . $ifilename);
        if (!$copy)
            show_error_msg(T_("ERROR"), sprintf(T_("IMAGE_UPLOAD_FAILED"), 1), 1);
        $inames['image_cover'] = $ifilename;
    }

(然后在您的查询中使用 $inames['image_cover']...)

为了进一步细化,将上面的错误处理提取到自己的回调中,然后将整个图像处理过程封装到一个回调中。

除了在图像文件名中使用预期的 ID,您还可以实现一个关系 table,它保存这些图像相关记录的主键。然后在图像文件名中使用该主键(而不是我为演示创建的 $time 值)。