2016-09-16 3 views
0

Я создал небольшую службу поддержки, которая позволяет пользователям загружать файлы при создании билетов. Билеты хранятся в папке с идентификационным номером, который соответствует данным билета, которые хранятся в базе данных. Теперь, когда я открываю детали билета, я также хочу, чтобы он перечислял файлы, связанные с этим билетом, чтобы я мог их открыть. Пока я могу получить все детали билета, но я застрял в json_encode ($ files) и как я могу ссылаться на них с моим текущим кодом JavaScript. Есть идеи?Javascript call PHP file scandir() results

У меня также есть проблема с. и .. в массиве 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 (выход); $ (". Modal-body #txtID"). Val (результат [данные] [2]); – user2168287

+0

Извините, я проработал. '$ (". modal-body #txtID "). val (result.data [2]);' – user2168287