1

これが私が解決策に望んでいることです。ユーザーが [キャンセル] ボタンをクリックすると、キャンセルされるファイルのファイル名を探し、そのファイル名を含むデータベース行を削除しようとします。

問題は、それが述べているようにファイル名を認識していないことですimagecancelname=undefined. これは定義されていないため、ファイル名を認識しないため、ファイル名を含むデータベース行を削除できません。print $imagecancelsql を実行すると、ファイルのアップロードをキャンセルした後に以下に表示されます。

DELETE FROM Image WHERE ImageFile = 'ImageFiles/undefined'

問題は、imagecancelnameキャンセルされるファイルの名前を認識して、ファイル名を含むデータベース行を削除できるようにするにはどうすればよいかということです。

以下は、現在のフォーム コードです。

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>");

以下は、ファイルのアップロード時にキャンセル ボタンを表示する startImageUpload 関数と、ユーザーが [キャンセル] ボタンをクリックした場合のキャンセル ボタン機能を含む関数です。

    var sourceImageForm; 

         function startImageUpload(imageuploadform, imagecancelname){

  $(imageuploadform).find('.imagef1_upload_process').css('visibility','visible');
  $(imageuploadform).find('.imagef1_cancel').css('visibility','visible');
  $(imageuploadform).find('.imagef1_upload_form').css('visibility','hidden');
  sourceImageForm = imageuploadform;

/*The above would show and hide elements within the form the file is being uploaded.
For example if I have three forms and the second form is uploading a file, then it
shows and hides the elements within the second form only */

        $(imageuploadform).find('.imagef1_cancel').html('<div><button type="button" class="imageCancel" id="image_cancel_' + imagecancelname + '">Cancel</button></div>').find(".imageCancel").on("click", function(event) {
        $.ajax("cancelimage.php?imagecancelname=" + $(this).attr('id').slice(13));

});       
      return true;
}

最後に、ユーザーが [キャンセル] ボタンをクリックすると、このスクリプトに移動する cancelimage.php スクリプトを次に示します。このスクリプトは、$GET メソッドを使用してファイル名を見つけてデータベース行を削除するために使用されます。

<?php

  // ... connected to DB

  $image_cancel_ = $_GET["imagecancelname"];
  $imagecancelsql = "
    DELETE FROM Image 
    WHERE ImageFile = 'ImageFiles/".mysql_real_escape_string($image_cancel_)."'
  ";

  print $imagecancelsql;

  mysql_close();

?>

以下は、クエリの印刷です。

注意: 未定義のインデックス: 19 行目の /web/stud/xxx/Mobile_app/cancelimage.php の imagecancelname array(0) { } DELETE FROM Image WHERE ImageFile = 'ImageFiles/'

4

2 に答える 2

0

私の推測では、ファイル パスを保持するためにボタンに定義したカスタム属性がブラウザに気に入らないのでしょう。ただし、この情報は標準の属性であるid. 代わりにこの JS を試してください。

function startImageUpload(imagecancelname){
  // All this can be chained into one since .html() returns the correct jQuery object
  $('.imagef1_cancel').eq(window.lastUploadImageIndex).html('<div><button type="button" class="imageCancel" id="image_cancel_' + imagecancelname + '">Cancel</button></div>').find(".imageCancel").on("click", function(event) {
    $.ajax("cancelimage.php?imagecancelname=" + $(this).attr('id').slice(13));
  });     
  return true;
}
于 2012-05-16T15:49:50.257 に答える