0

サーバーにアップロードしたい画像が 2 つあります。両方のファイルが html に設定されている場合、最初のクエリを実行する必要があります。image1 が選択されていて、image2 が 2 番目のクエリではない場合、image1 が選択されておらず、inage2 が選択されている場合は、3 番目のクエリが実行されます。画像が選択されていない場合は、3 番目のクエリが実行されます。 image1 と image2 の両方で、クエリ 4 を実行する必要があります。

image1 または image2 が選択されているかどうかに関係なく、更新される 3 つのテキスト ボックスもあることに注意してください。

私が抱えている問題は、

image1とimage2の両方でファイルを選択しないと、最初のコードが実行され、image1とimage2のemoty値が挿入されますが、これは意図されたものではありません。

コードの重複を減らすためのよりクリーンで効率的な方法はありますか。

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());
                }
4

1 に答える 1

1

おそらく、ファイルをパラメーターで取得し、彼のものにする関数を作成することによって。重複せずに役立ちます。

でどのファイルが選択されているか、または選択されていないかを確認するには:

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...
}

コードの重複が少なく、明確です。あなたの質問に答えましたか?

于 2013-07-28T22:58:01.907 に答える