2012-04-29 12 views
-1

私はアップロードされたファイル名を表示するように想定されてimageNameArrayを付加するという問題があります。アップロードされたばかりのファイルの名前を追加するには?

問題は、ページを更新して別のファイル(panda.png)をアップロードしたときに、ファイルをアップロードすると「panda.png」が表示されるはずです。 。しかし、以前にアップロードされたファイル(pig.png)の名前が追加されており、panda.pngは追加されません。

私は再びページを更新し、別のファイル(tiger.png)をアップロードした場合、私はファイルをアップロードするとき、そして、それはtiger.png」を表示する必要があります。しかし、それはまだ以前にアップロードされたファイル(panda.png)の名前を追加するだけで、tiger.pngは追加しません。私は、このようなmonkey.pngとして(ないさわやかページ)別のファイルをアップロードした場合

は、再びそれはpanda.pngを追加します。いいえ、monkey.png。したがって、tiger.pngとmonkey.pngを追加する必要がありますが、代わりにpanda.pngとpanda.pngを追加します。

私が欲しいのは、ファイルがアップロードされたとき、それは名前ですが付加されることです。しかし、どのようにこれを達成することができますか?私はなぜこれが起こっていると言って説明よりも、それが簡単に見つけて、それを修正する方法のコード化された例を示してください:)

以下

を追加が発生したJavaScriptコードです:

以下
<?php 
    session_start(); 

    $idx = count($_SESSION ['fileImage'] - 1); 
    $output = isset($_SESSION ['fileImage'][$idx]) ? 
     $_SESSION ['fileImage'][$idx]['name'] : ""; 

    ?> 

<script type="text/javascript"> 

function imageClickHandler(imageuploadform){ 
     if(imageValidation(imageuploadform)){ 
      return startImageUpload(imageuploadform); 
     } 
     return false; 
    } 

function startImageUpload(imageuploadform){ 

       $(".imageCancel").click(function() { 
       $('.upload_target').get(0).contentwindow 
      return stopImageUpload(); 
    }); 

     return true; 
} 

    function stopImageUpload(success){ 
     var imageNameArray = new Array(); 
     imageNameArray = <?php echo $output ?>; 
     var result = ''; 

     if (success == 1){ 
      result = '<span class="msg">The file was uploaded successfully!</span><br/><br/>'; 

      for(var i=0;i<imageNameArray.length;i++) 
      { 
       $('.listImage').append(imageNameArray[i]+ '<br/>'); 
      } 
     } 
     else { 
      result = '<span class="emsg">There was an error during file upload!</span><br/><br/>'; 
     } 
     return true; 
    } 

</script> 

<body> 

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



</body> 

は、PHPでそれは上のjavascript関数から別のページ上にあるファイルをアップロードするスクリプト(imageupload.php):

<?php 
session_start(); 

$result = 0; 
$errors = array(); 
$dirImage = "ImageFiles/"; 

if (isset ($_FILES ['fileImage']) && 
    $_FILES ["fileImage"] ["error"] == UPLOAD_ERR_OK) { 

    $fileName = $_FILES ['fileImage'] ['name']; 

    $fileExt = pathinfo ($fileName, PATHINFO_EXTENSION); 
    $fileExt = strtolower ($fileExt); 

    $fileDst = $dirImage . DIRECTORY_SEPARATOR . $fileName; 

     if (count ($errors) == 0) { 
      if (move_uploaded_file ($fileTemp, $fileDst)) { 
       $result = 1; 
     } 
    } 
} 

$_SESSION ['fileImage'][] = array('name' => $_FILES ['fileImage']['name']); 
?> 
<script language="javascript" type="text/javascript">window.top.stopImageUpload(<?php echo $result;?>);</script> 
+0

誰かが最初にこれを答えるのを待つ:http://stackoverflow.com/questions/10374158/it-is-not-appending-the-variable/ 10374223#10374223 – freshnode

+0

あなたは、関連するformタグやファイル入力HTMLを含めることはできますか?これにより、コードの流れを理解するのに役立ちます。 –

+0

@tomhallamは申し訳ありませんが、トムは、私は、コードが関連を含むように更新したフォームのコード – user1364441

答えて

1

問題は、PHPコードはページをレンダリングするときにアップロードされたファイルの名前を出力しているということです、それは(次の)画像がアップロードされる前である。

これはstopImageUpload() JavaScript関数では、この行に起こる:

imageNameArray = <?php echo $output ?>; 

ありますが、これを解決することができますカップルの方法がありますが、私はstopImageUpload()機能を経由して戻ってファイル名を渡すの簡単な方法のために行くだろう。

// stolen from http://stackoverflow.com/questions/1219860/javascript-jquery-html-encoding 
function htmlEncode(value) { return $('<div/>').text(value).html(); } 

function stopImageUpload(success, filename) { 
    var imageNameArray = new Array(); 
    var result = ''; 

    if (success) { 
    result = '<span class="msg">The file was uploaded successfully!</span><br/><br/>'; 

    $('.listImage').append(htmlEncode(filename) + '<br/>'); 
    } else { 
    result = '<span class="emsg">There was an error during file upload!</span><br/><br/>'; 
    } 
} 

その後、あなたは、単にimageupload.phpの最後の行を調整する必要があります。

<script language="javascript" type="text/javascript">window.top.stopImageUpload(<?php echo $result ? 'true' : 'false'; ?>, '<?php echo $_FILES['fileImage']['name'] ?>');</script> 

注:このオプションは、<?= ?>ブロックを許可するようになっている場合は、上記のコードを作ることができますが非常に良く見えます。

<script language="javascript" type="text/javascript">window.top.stopImageUpload(<?= $result ? 'true' : 'false'; ?>, <?= $_FILES['fileImage']['name'] ?>);</script> 
+0

ありがとう、私のためにこの問題を解決してください:) – user1364441

関連する問題