лучший способ взять идентификатор базы данных, а затем удалить файл в каталоге? - PullRequest
1 голос
/ 08 августа 2011

Я пытаюсь получить идентификатор каждого файла, а затем удалить их все со скрытым вводом, я не знаю, если я делаю неправильно, есть ли лучшие способы, каков будет ваш подход ??.Мой код для удаления файла сначала идентификатор базы данных, а затем файл папки

Это мой код:

<?php

    include '../Model/File.php';

    $path = "uploadedfiles/";
    $directory = dir($path);
    $types = array('jpg', 'jpeg', 'txt', 'gif', 'png', 'doc', 'docx', 'pdf', 'xlsx', 'pptx');
    $identifier = "";

    $objFile = new File();

    $result= $objFile->listFiles();

    foreach ($result as $array){
        $identifier = $array['name_file'];

        echo  "<input type=\"hidden\" id=\"id_file\"   value=\"".$array['id_file']."\">";
        echo $array['name_file'] . "<a id=\"". urlencode($identifier)."\" href=\"#\ class=\"delete\" >Delete</a><br/>";
    }

?>

он выводит:

  1. file1 [deletelink]
  2. file2 [deletelink]
  3. file3 [deletelink]
  4. file4 [deletelink]

print_r ($ result)

Array ([0] => Array ([id_archivo] => 41 [0] => 41 [nombre_archivo] => 1294861647_-desktop.png [1] => 1294861647_-desktop.png [fecha] => 2011-08-08 15:10:09 [2] => 2011-08-08 15:10:09) [1] => Массив ([id_archivo] => 42[0] => 42 [nombre_archivo] => Dragon_Ball_Simpsons.jpg [1] => Dragon_Ball_Simpsons.jpg [fecha] => 2011-08-08 15:11:49 [2] => 2011-08-08 15:11: 49) [2] => Массив ([id_archivo] => 43 [0] => 43 [nombre_archivo] => VATOS.jpg [1] => VATOS.jpg [fecha] => 2011-08-08 16:30:00 [2] => 2011-08-08 16:30:00))

Ответы [ 2 ]

2 голосов
/ 08 августа 2011

Хорошо, прежде всего .. Если какой-то параметр является массивом, то его имя $ results будет более логичным, чем $ result.Кроме того, почему echo "<input name=\"" . $somearray['name'] . "\">";, если вы можете просто echo '<input name="' . $somearray['name'] . '">';

Если нет никакой функции или особой причины для добавления буфера здесь: $identifier = $array['name_file'];, то ваша проблема может заключаться в том, что вы этого не делаетеконец $identifier с unset();.Итак, мое первое предположение будет следующим:

foreach ($result as $array){
    $identifier = $array['name_file'];
    echo  '<input type="hidden" id="id_file"   value="' . $array['id_file'].  '\">';
    echo $array['name_file'] . '<a id="' . urlencode($identifier) . '\" href="#" class="delete" >Delete</a><br/>';
    unset($identifier);
}

Поскольку foreach сгенерировал "$ array", он будет автоматически сброшен при загрузке новой записи, а $identifier - нет.Вот почему вам нужно unset() для сброса значения для следующей записи.

Однако гораздо проще было бы полностью удалить идентификатор $:

foreach ($result as $array){
    echo  '<input type="hidden" id="id_file"   value="' . $array['id_file'].  '\">';
    echo $array['name_file'] . '<a id="' . urlencode($array['name_file']) . '\" href="#" class="delete" >Delete</a><br/>';
}

Есть и другие моменты вВаш код, который я бы выбрал, но это должно решить проблему.

РЕДАКТИРОВАТЬ

На основе ваших комментариев я создал эти сценарии. Это в основном программирование бесплатно:) Как вы понимаете, вы должны сами добавить свои собственные классы БД и тому подобное.Но так как они кажутся простыми массивами.Тогда это должно сработать:

include '../Model/File.php';
$objFile = new File();
$files_array = $objFile->listFiles();

Первые несколько заметок ..

Не могу найти причину для этого .. $ directory = dir ($ path);

Почему здесь типы?Ваш скрипт, похоже, не работает с загрузками .. $ types = array ('jpg', 'jpeg', 'txt', 'gif', 'png', 'doc', 'docx', 'pdf', 'xlsx', 'pptx');

Почему это здесь?Если у вас есть другая переменная над предоставленным кодом, тогда unset ($ identifier);$ identifier = "";

Так как у нас есть пример массива выше, мы прокомментировали эту часть из $ objFile = new File ();$ result = $ objFile-> listFiles ();

Пример в реальном времени: http://kopli.pri.ee/stackoverflow/6986586.php

Обратите внимание, что у меня нет файлов .. Итак, примерВот как отображается общая таблица, а также эффект jQuery.

Основной файл

<html>
<head>
    <title>Kalle rocks!</title>
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.js"></script>
    <style>
        table {width: 600px; margin: 0px auto;}
        th, td {padding: 5px;}
        th {border-bottom: 1px solid black;}
        .tfoot {background: #EAEAEA;}
        .delete {background: #FFCECE; color: black; cursor: pointer; text-align: center;}
    </style>
</head>
<body>
<?php

// Where the files sit
$path = 'uploadedfiles/';

// Example array
$files_array[] = array(
    'id_archivo' => 41,
    'nombre_archivo' => '1294861647_-desktop.png',
    'fecha' => '2011-08-08 15:10:09'
);
$files_array[] = array(
    'id_archivo' => 42,
    'nombre_archivo' => 'Dragon_Ball_Simpsons.jpg',
    'fecha' => '2011-08-08 15:11:49 '
);
$files_array[] = array(
    'id_archivo' => 43,
    'nombre_archivo' => 'VATOS.jpg ',
    'fecha' => '2011-08-08 16:30:00'
);

// Start the table       
echo '<table cellpadding="0" cellspacing="0" border="0">
<thead>
<tr>
    <th>ID</th>
    <th>Name</th>
    <th>Date</th>
    <th>Delete</th>
</tr>
</thead>
<tbody>';

// Run the foreach loop
$files_displayed = 0;
foreach ($files_array as $fileid => $file){
    $files_displayed++;
    echo '<tr id="fileid_' . $fileid . '">
        <td>' . $fileid . '</td>
        <td>' . $file['nombre_archivo'] . '</td>
        <td>' . $file['fecha'] . '</td>
        <td class="delete"><span>[X]</span></td>
    </tr>';
}

// End the table and display totals
echo '</body>
<tfoot>
<tr>
    <td colspan="4" class="tfoot">Currently displaying ' . $files_displayed . ' files total</td>
</tr>
</tfoot>
</table>';

?>
<script>
$('.delete').click(function () {
    var file_row = $(this).parent('tr');
    var fileid = file_row.attr('id').replace('fileid_', '');
    $.ajax({
        type: 'get',
        url: 'ajax_file_delete.php',
        data: 'action=delete&fileid=' + fileid,
        beforeSend: function() {
        },
        success: function() {
            file_row.fadeOut('slow');
        }
    });
});
</script>
</body>
</html>

Ajax-файл (ajax_file_delete.php)

<?php

$path = 'uploadedfiles/';

// In theory, your include '../Model/File.php'; and $result= $objFile->listFiles(); should be included here, so the array would be imported

$files_array[] = array(
    'id_archivo' => 41,
    'nombre_archivo' => '1294861647_-desktop.png',
    'fecha' => '2011-08-08 15:10:09'
);
$files_array[] = array(
    'id_archivo' => 42,
    'nombre_archivo' => 'Dragon_Ball_Simpsons.jpg',
    'fecha' => '2011-08-08 15:11:49 '
);
$files_array[] = array(
    'id_archivo' => 43,
    'nombre_archivo' => 'VATOS.jpg ',
    'fecha' => '2011-08-08 16:30:00'
);

if ($_GET['delete']) {
    unlink($path . $files_array[$_GET['fileid']]['nombre_archivo']);
    // also, you can add here some mysql related stuff to delete the file from the db
}

?>
1 голос
/ 08 августа 2011

По моему честному мнению в этих вещах я думаю, что вы должны использовать $directory хотя бы один.Вероятно, здесь: $result= $objFile->listFiles($directory);.

Попробуйте демпинг var $results.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...