2016-09-16 50 views
0

我創建了一個小型幫助臺系統,允許用戶在創建票據時上傳文件。故障單存儲在ID號與存儲在數據庫中的故障單詳細信息相匹配的文件夾中。現在,當我打開票證詳情時,我還希望它列出與該票證關聯的文件,以便我可以打開它們。到目前爲止,我可以檢索所有的票據細節,但我堅持使用json_encode($ files),以及如何使用當前的JavaScript代碼引用它們。有任何想法嗎?JavaScript調用PHP文件scandir()結果

我也有問題。和..在scandir()數組中,並想刪除它們。當使用註釋行時,您可以在我的PHP文件中看到它使json_encode數組看起來不正確。由於

PHP文件(片段)

$value = $_POST['value']; 

$sql = "SELECT * FROM helpdesk WHERE ID = '$value'"; 
$result = mysqli_query($conn, $sql); 

while($rowEdit = mysqli_fetch_array($result)) 
{    
     echo json_encode(array($rowEdit['ID'], $rowEdit['DateCreated'], $rowEdit['Name'], $rowEdit['Company'], $rowEdit['Phone'], $rowEdit['Email'])); 
} 

$dir = 'uploads/' . $value .'/'; 
$files = scandir($dir); 
//$files = array_diff(scandir($dir), array('.', '..')); 
echo json_encode($files); 

HTML文件(JavaScript片段)

$(function(){ 
    /* Opens selected ticket details */ 
    var modal = document.getElementById('modal'); 
    var output = ""; 
    $('#btnEdit').click(function(e){ 
     var value = $("#tblTickets tr.selected td:first").html(); 
      $.ajax({ 
       type : "POST", 
       url : "sql_helpdesk_ticket_details.php",      
       data : {value:value}, 
       success : function(output) { 
        var result = $.parseJSON(output); 
        $(".modal-body #txtID").val(result[0]); 
        $(".modal-body #txtDateCreated").val(result[1]); 
        $(".modal-body #txtName").val(result[2]); 
        $(".modal-body #txtCompany").val(result[3]); 
        $(".modal-body #txtPhone").val(result[4]); 
        $(".modal-body #txtEmail").val(result[5]); 

        modal.style.display = 'block'; 
       } 
      });    
    }); 

回答

1

這聽起來像你想的兩個輸出結合起來,從我可以破譯。要做到這一點,通過存儲在一個名爲data一個關鍵數據庫回報,另一個是名爲files的文件,並在最後輸出到JSON創建一個數組:

define('DS',DIRECTORY_SEPARATOR); 
# Trim any spacing 
$id = trim($_POST['value']); 
# Just die if there are any errors 
# I am presuming $_POST['value'] is numeric. If not, you need to bind_param 
if(!empty($id)) { 
    if(!is_numeric($id)) 
     die(json_encode(array('error'=>'Id not numeric'))); 
} 
else 
    die(json_encode(array('error'=>'Id can not be empty'))); 
# As noted, if you are allowing anything but numeric, bind_param is required 
$result = mysqli_query($conn, "SELECT * FROM `helpdesk` WHERE `ID` = '{$id}'"); 
$data = array(); 
# Loop through and save to array 
while($rowEdit = mysqli_fetch_array($result)) {    
    $data['data'][] = array(
          $rowEdit['ID'], 
          $rowEdit['DateCreated'], 
          $rowEdit['Name'], 
          $rowEdit['Company'], 
          $rowEdit['Phone'], 
          $rowEdit['Email']) 
         ); 
} 
# Create directory path 
$dir = 'uploads'.DS.$value.DS; 
# It is wise to check that it exists first 
if(is_dir($dir)) { 
    $files = scandir($dir); 
    # I just loop through the results, but you can array_diff to filter the dots 
    foreach($files as $file) { 
     if(!is_file($file)) 
      continue; 
     # Save files to array 
     $data['files'][] = $file; 
    } 
} 
# Output all the data 
die(json_encode($data)); 

您的JavaScript將不得不進行調整以適應新鑰匙。

+0

感謝@Rasclatt,現在我的json_encode格式爲{「data」:[「data1」,「data2」],「files」:[「。」,「..」,「file1」,「file2」 ]},從JavaScript我怎麼引用'數據'數組對象'data2'例如。 'var result = $ .parseJSON(output); (「。modal-body #txtID」).val(result [data] [2]);' – user2168287

+0

對不起,我解決了。 '$(「。modal-body #txtID」).val(result.data [2]);' – user2168287