我正在使用dropzone.js
将图像文件存储到文件夹中。问题是,所有上传的图片预览只会在dropzone field
内显示,只要没有刷新或切换到同一页面上的其他链接,这些图片只能在上传后立即删除(请更正我如果我错在这里)
由于这种情况,我有一个想法,通过保存信息(例如文件名,大小,链接,类型等)以及上传到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
顺便说一下,警报(姓名)一直说:未定义! IDK
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);
?>
答案 0 :(得分:2)
var name = $(this).parent().parent().attr('name');
您只能prop()
<tr>
支持class
支持的id
,name
和attr()
,在您的情况下,您使用的<a>
{ {1}},不受支持。虽然echo '<td><a class="delete" href="#" data-artname="'.$row['name'].'">...
可用于不同的不支持的代码。
一种方法是直接在var name = $(this).parent().parent().attr('name');
上分配新标签,而不是通过父母两次:
var name = $(this).attr('data-artname');
所以,而不是使用名称获取名称:
dataLayer.push(
{'userID': '<%= current_user.id %>'},
{'userCategory': 'User'}
);
您可以使用以下方式获取相应的名称数据:
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
'userID': '<%= current_user.id %>',
'userCategory': 'User'
});
您可以查看此tags作为示例。
您仍然需要考虑@ e4c5
的答案和建议答案 1 :(得分:1)
您的javascript中存在问题。这是错误的。
var data = 'name=' + name ;
有时它会起作用,但是当文件名包含非字母数字字符时,即使是空格也会破坏。例如,如果文件名是hello world.jpg
,它将被发送到服务器,但是服务器想要它hello+world.jpg
你应该改为
var data = {'name': name }
这也是错误的。
$filedel = "DELETE FROM file_upload WHERE name='$file'";
特殊字符会破坏这一点,更糟糕的是它可能导致sql注入。修复为
$filedel = $pdo->prepare("DELETE FROM file_upload WHERE name=:file");
$filedel->execute(array(":file"=>$file));