我正在使用 dropzone.js
将图像文件存储到文件夹中。问题是,只要没有刷新或切换到同一页面上的其他链接,所有上传的图片预览只会显示在 dropzone 字段
中,因此这些图片只能在上传后立即删除(如果我在这里错了,请纠正我)。
由于这种情况,我有了一个想法,通过保存信息(例如文件名、大小、链接、类型等)以及上传到 MySQL
数据库,然后查询一个表输出,这样我就可以稍后从表行中删除特定的图像文件。
通过点击垃圾桶(看附图),文件的名称通常会被 jQuery
获取,然后被 AJAX
发送到 PHP
这样就可以从数据库中删除该行,并且该文件与文件夹断开链接。它以某种方式在 ID
上运行良好,但在 name
上运行不佳。我在这里看不到可能的错误,因此我需要你的帮助。我需要一个 NAME
由 jQuery
而不是 ID
获取,这一点非常重要。它甚至可以这样工作吗?如果是这样,如何?如果不是,怎么办?
<table class="table table-striped table-hover droplist">
<thead>
<tr>
<th>#</th>
<th>filename</th>
<th>size[bytes]</th>
<th>image</th>
<th>type</th>
<th>created_at</th>
<th>delete</th>
</tr>
</thead>
<?php
$statement = $pdo->prepare("SELECT * FROM file_upload ORDER BY id");
$result = $statement->execute();
$count = 1;
while($row = $statement->fetch()) {
echo '<tr name="'.$row['name'].'">';
echo "<td>".$count++."</td>";
echo "<td>".$row['name']."</td>";
echo "<td>".$row['size']."</td>";
// echo '<td><a href="'.$row['link'].'">'.$row['link'].'</a></td>';
echo "<td>".$row['type']."</td>";
echo "<td>".date('d.m.Y H:i:s',strtotime($row['date']))."</td>";
echo '<td><a class="delete" href="#"><i class="fa fa-trash" ></i></a></td>';
echo "</tr>";
}
?>
dropzonelist.js
:
$('table.droplist td a.delete').click(function(e) {
e.preventDefault();
var name = $(this).parent().parent().prop('name');
var data = 'name=' + name ;
var parent = $(this).parent().parent();
// alert(name),
$.ajax({
type: "POST",
url: "delete_dropfile.php",
data: data,
cache: false,
success: function(response) {
//...whatever
顺便说一句,alert(name) 一直在说:undefined!身份证
PHP
脚本:
if(isset($_POST['name'])) {
$file = $_POST['name'];
} else {
die;
}
// sql to delete a record
$filedel = "DELETE FROM file_upload WHERE name='$file'";
if ($pdo->exec($filedel)) {
echo "(image)file successfully erased!";
}
unlink($_SERVER['DOCUMENT_ROOT'] . '/anydaynow/gallery/samples/' . $file);
?>
最佳答案
而不是使用 prop()
要获取数据,您需要使用 attr()
:
var name = $(this).parent().parent().attr('name');
您可以使用 prop()
只给那些 tags <tr>
支持的喜欢class
和 id
,在您的情况下,您使用 name
的地方, 不受支持。同时 attr()
可用于不同的不受支持的标签。
另一种方法:
一种方法是在您的 <a>
上分配一个新标签直接,而不是通过父级两次:
echo '<td><a class="delete" href="#" data-artname="'.$row['name'].'">...
所以,不要使用以下方法获取名称:
var name = $(this).parent().parent().attr('name');
可以通过以下方式获取对应的姓名数据:
var name = $(this).attr('data-artname');
你可以查看这个fiddle举个例子。
还是需要考虑@e4c5的回答和推荐
关于php - 按名称删除表格行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41498460/