在php中同时上传两个图像


Uploading two images in php at the same time

我有两个图像要上传到服务器。如果两个文件都设置在html中,则应执行第一个查询,如果选择了image1而image2不是应执行的第二个查询,如未选择image1而选择了inage2,则执行第三个查询,若在image1和image2中均未选择图像,则应执行查询4。

请注意,我还有三个文本框,无论是否选择图像1或图像2,它们都将被更新。

我遇到的问题是

当我在image1和image2中都没有选择任何文件时,第一个代码通过插入image 1和image 2的emoty值来执行,这意味着nto。

有没有一种更干净、更有效的方法来减少代码重复。

if (isset($_FILES['newsthumb']) && isset($_FILES['newsmain'])) {
  $title            = mysql_real_escape_string(trim($_POST['title']));
  $body             = mysql_real_escape_string(trim($_POST['body']));
  $mainimage_title  = mysql_real_escape_string(trim($_POST['mainimage_title']));
  $thumbimage = $_FILES['newsthumb'];
  $mainimage  = $_FILES['newsmain'];
$unique = time();
$thumbname  = strtolower($thumbimage['name']); 
$mainmane   = strtolower($mainimage['name']);
 $thumbname  = preg_replace("/[^A-Z0-9._-]/i", "_", $thumbname);
 $mainmane   = preg_replace("/[^A-Z0-9._-]/i", "_", $mainmane);
 $thumbname = mysql_real_escape_string($thumbname);
 $mainmane  = mysql_real_escape_string($mainmane);
 $uploaddir = "images/newsimage/";
 $thumbsuccess = move_uploaded_file($thumbimage["tmp_name"], $uploaddir.$thumbname);
 $mainsuccess  = move_uploaded_file($mainimage["tmp_name"], $uploaddir.$mainmane);
 $newsarticle = "UPDATE news 
              SET title = '$title', 
                  body = '$body', 
                  mainimage_title = '$mainimage_title' , 
                  thumbnail = '$thumbname', 
                  mainimage = '$mainmane', 
                  editdate = NOW()
                  WHERE id = '$article_id'"; 
              mysql_query($newsarticle) or die (mysql_error());
            }

  if (!isset($_FILES['newsthumb']) && isset($_FILES['newsmain'])) {
  $title            = mysql_real_escape_string(trim($_POST['title']));
  $body             = mysql_real_escape_string(trim($_POST['body']));
  $mainimage_title  = mysql_real_escape_string(trim($_POST['mainimage_title']));
// Commented out since it is not defined anywhere in your original posted code.
// You will have to implement that in.
  $mainimage  = $_FILES['newsmain'];
  $unique = time();
  $mainmane   = strtolower($mainimage['name']);
  $mainmane   = preg_replace("/[^A-Z0-9._-]/i", "_", $mainmane);
  $mainmane  = mysql_real_escape_string($mainmane);
  $uploaddir = "images/newsimage/";
  $mainsuccess  = move_uploaded_file($mainimage["tmp_name"], $uploaddir.$mainmane);
  $newsarticle = "UPDATE news 
                  SET title = '$title', 
                      body = '$body', 
                      mainimage_title = '$mainimage_title' , 
                      mainimage = '$mainmane', 
                      editdate = NOW()
                      WHERE id = '$article_id'"; 
                  mysql_query($newsarticle) or die (mysql_error());
                } 

if (isset($_FILES['newsthumb']) && (!isset($_FILES['newsmain']))) {
  $title            = mysql_real_escape_string(trim($_POST['title']));
  $body             = mysql_real_escape_string(trim($_POST['body']));
  $mainimage_title  = mysql_real_escape_string(trim($_POST['mainimage_title']));
// Commented out since it is not defined anywhere in your original posted code.
// You will have to implement that in.
  $thumbimage = $_FILES['newsthumb'];
  $unique = time();
  $thumbname  = strtolower($thumbimage['name']); 
  $thumbname  = preg_replace("/[^A-Z0-9._-]/i", "_", $thumbname);
  $thumbname = mysql_real_escape_string($thumbname);
  $uploaddir = "images/newsimage/";
  $thumbsuccess = move_uploaded_file($thumbimage["tmp_name"], $uploaddir.$thumbname);

  $newsarticle = "UPDATE news 
                  SET title = '$title', 
                      body = '$body', 
                      mainimage_title = '$mainimage_title' , 
                      thumbnail = '$thumbname', 
                      editdate = NOW()
                      WHERE id = '$article_id'"; 
                  mysql_query($newsarticle) or die (mysql_error());
                }

if (!isset($_FILES['newsthumb']) && (!isset($_FILES['newsmain']))) {
  $title            = mysql_real_escape_string(trim($_POST['title']));
  $body             = mysql_real_escape_string(trim($_POST['body']));
  $mainimage_title  = mysql_real_escape_string(trim($_POST['mainimage_title']));    
  $newsarticle = "UPDATE news 
                  SET title = '$title', 
                      body = '$body', 
                      mainimage_title = '$mainimage_title' , 
                      editdate = NOW()
                      WHERE id = '$article_id'"; 
                  mysql_query($newsarticle) or die (mysql_error());
                }

也许可以通过创建一个函数来获取参数中的文件和他的东西。这将有助于避免重复。

用于检查选择或不选择哪个文件:

if ($_FILES["file"]["error"] > 0)

更多解释:

function uploadASingleFile($file){ 
// Do your stuff here for the upload (moving the file, sql request etc.) 
}

然后,检查文件是否被选中(使用["error"])并调用函数

if($_FILES["file1"]["error"] == 0){
uploadASingleFile($_FILES["file1"]); // Obviously, handle errors...
}
if($_FILES["file2"]["error"] == 0){
uploadASingleFile($_FILES["file2"]); // Obviously, handle errors...
}

代码较少重复且清晰。我回答你的问题了吗?