Хорошо, прежде всего .. Если какой-то параметр является массивом, то его имя $ 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
}
?>