0

下のフォームにキャンセルボタンがあります。ユーザーがファイルをアップロードしている場合は、[キャンセル]ボタンをクリックして、必要に応じてアップロードをキャンセルできます。しかし、私の問題は、ファイルがアップロードプロセスにあるかどうかに関係なく、ファイル名を含む行をデータベースに常に挿入していることです。既存または新しいファイルがサーバーの「ImageFiles」フォルダーにアップロードされた場合、ファイル名を含むデータベース行を挿入します。アップロードがキャンセルされた場合、データベース行を挿入しないでください。これは可能ですか?

現在のフォームコードは次のとおりです。

var $fileImage = $("<form action='imageupload.php' method='post' enctype='multipart/form-data' target='upload_target' onsubmit='return startImageUpload(this);' class='imageuploadform' >" + 
  "Image File: <input name='fileImage' type='file' class='fileImage' /></label><br/><br/><label class='imagelbl'>" + 
  "<input type='submit' name='submitImageBtn' class='sbtnimage' value='Upload' /></label>" +     
  "</p><p class='imagef1_cancel' align='center'></p>" +
  "<iframe class='upload_target' name='upload_target' src='#' style='width:0;height:0;border:0px;solid;#fff;'></iframe></form>");

以下は、ファイルをアップロードし、データベースの行を挿入するimageupload.phpスクリプトです。

<?php

session_start();


...//Connect to DB

$result = 0;

if( is_file("ImageFiles/".$_FILES['fileImage']['name'])) {
    $parts = explode(".",$_FILES['fileImage']['name']);
    $ext = array_pop($parts);
    $base = implode(".",$parts);
    $n = 2;

    while( is_file("ImageFiles/".$base."_".$n.".".$ext)) $n++;
    $_FILES['fileImage']['name'] = $base."_".$n.".".$ext;

    move_uploaded_file($_FILES["fileImage"]["tmp_name"],
    "ImageFiles/" . $_FILES["fileImage"]["name"]);
    $result = 1;

    $imagesql = "INSERT INTO Image (ImageFile) 
    VALUES ('ImageFiles/".mysql_real_escape_string($_FILES['fileImage']['name'])."')";

    mysql_query($imagesql);

}
    else
      {
      move_uploaded_file($_FILES["fileImage"]["tmp_name"],
      "ImageFiles/" . $_FILES["fileImage"]["name"]);
      $result = 1;

        $imagesql = "INSERT INTO Image (ImageFile) 
        VALUES ('ImageFiles/".mysql_real_escape_string($_FILES['fileImage']['name'])."')";

mysql_query($imagesql);

      }


      mysql_close();

?>
4

3 に答える 3

2

コメントで要求されたように、これが Key メソッドです。

<?
    if(!empty($_FILES) && !isset($_POST['Cancel'])) // only process if we haven't clicked Cancel
    {
        foreach($_FILES as $Key => $File) // loop through the files as we don't know the input file name.
        {
            if($File['size'] > 0) // check it has a size
            {
                // do insert, making sure you store $Key with the image
                mysql_query("insert into Image (ImageFile, Key) values ('{$File['name']}', '$Key'");
            }
        }
    }
    if(isset($_POST['Cancel']) && !empty($_POST['Cancel'])) // if we have clicked cancel
    {
        $Key = array_shift($_POST['Cancel']); // get the unique key from the post.
        mysql_query("delete from Image where Key = '$Key'"); // delete the file from the database.
    }
?>

上記は、アップロードとキャンセルを処理する PHP コードです。

<form action="" method="post" enctype="multipart/form-data">
    <? $Key = md5(); ?> <!-- Create the unique key -->
    <input type="file" name="<?= $Key; ?>" /> <!-- Set the File input name to the unique key to be accessed via the server. -->
    <input type="submit" value="Upload" />
    <input type="submit" name="Cancel[<?= $Key; ?>]" value="Cancel" /> <!-- Set the Cancel submit name to include the unique key to be accessed when clicking Cancel -->
</form>

以上がフォームです。

于 2012-05-18T08:00:13.307 に答える
0

この投稿から、キャンセル ボタンをクリックして iframe src を変更すると、投稿されたデータがリセットされます。フォームが送信された$_FILES['fileImage']['error']場合でも、ファイルのアップロードを伴うフォームの送信がリセットされた場合に設定する必要があります (推測です)。自分で試したことはありませんが、試してみる価値のあるオプションだと思います。

それ以外の場合、フォーム全体にファイルアップロードフィールドしかない場合は、キャンセルボタンを作成して、input type="reset"ファイルのアップロードでフォームの送信を中断し、挿入操作を防ぐことができます。

于 2012-05-18T07:39:50.860 に答える
0

insert ステートメントの後、挿入された ID を取得します。mysql_insert_id();

キャンセルボタンを押すと、挿入されたIDの行を削除できます

于 2012-05-18T07:27:15.430 に答える