Php 按名称删除表行
我正在使用Php 按名称删除表行,php,jquery,mysql,ajax,dropzone.js,Php,Jquery,Mysql,Ajax,Dropzone.js,我正在使用dropzone.js将图像文件存储到文件夹中。问题是,只要没有刷新或切换到同一页面上的其他链接,所有上传的图像预览都只显示在dropzone字段中,因此这些图像只能在上传后立即删除(如果我在这里出错,请纠正我) 由于这种情况,我有了一个想法,即在上传到MySQL数据库的同时保存信息(例如文件名、大小、链接、类型等),然后查询表输出,以便稍后能够从表行中删除特定的图像文件 通过点击垃圾桶(观看附件图像),通常情况下,文件名应该由jQuery获取,然后由AJAX发送到PHP,这样就可以
dropzone.js
将图像文件存储到文件夹中。问题是,只要没有刷新或切换到同一页面上的其他链接,所有上传的图像预览都只显示在dropzone字段中,因此这些图像只能在上传后立即删除(如果我在这里出错,请纠正我)
由于这种情况,我有了一个想法,即在上传到MySQL
数据库的同时保存信息(例如文件名、大小、链接、类型等),然后查询表输出,以便稍后能够从表行中删除特定的图像文件
通过点击垃圾桶(观看附件图像),通常情况下,文件名应该由jQuery
获取,然后由AJAX
发送到PHP
,这样就可以从数据库中删除该行,并且文件与文件夹解除链接。不知何故,它通过ID
而不是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>";
}
?>
顺便说一句,警报(名称)一直在说:未定义!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);
?>
Javascript错误
您的javascript中存在问题。这是错误的
var data = 'name=' + name ;
有时它会工作,但当文件名包含非字母数字字符时,即使是空格也会中断。例如,如果文件名为hello world.jpg
,它将被发送到服务器,但服务器希望它是hello+world.jpg
,您应该这样做
var data = {'name': name }
PHP错误
这也是错误的
$filedel = "DELETE FROM file_upload WHERE name='$file'";
特殊字符将破坏这一点,更糟糕的是,它可能导致sql注入。固定为
$filedel = $pdo->prepare("DELETE FROM file_upload WHERE name=:file");
$filedel->execute(array(":file"=>$file));
Javascript错误
您的javascript中存在问题。这是错误的
var data = 'name=' + name ;
有时它会工作,但当文件名包含非字母数字字符时,即使是空格也会中断。例如,如果文件名为hello world.jpg
,它将被发送到服务器,但服务器希望它是hello+world.jpg
,您应该这样做
var data = {'name': name }
PHP错误
这也是错误的
$filedel = "DELETE FROM file_upload WHERE name='$file'";
特殊字符将破坏这一点,更糟糕的是,它可能导致sql注入。固定为
$filedel = $pdo->prepare("DELETE FROM file_upload WHERE name=:file");
$filedel->execute(array(":file"=>$file));
您需要使用以下命令,而不是使用获取数据:
您只能将prop()
用于
支持的对象,如class
和id
,在您使用name
的情况下,这些对象不受支持。而attr()
可用于不同的不受支持的标记
另一种方法:
例如,一种方法是在上指定一个新标记
您还需要考虑“E4C5/P>>P>的答案和建议,而不是使用获取数据,您需要使用:
您只能将prop()
用于
支持的对象,如class
和id
,在您使用name
的情况下,这些对象不受支持。而attr()
可用于不同的不受支持的标记
另一种方法:
例如,一种方法是在上指定一个新标记
你还需要考虑E4C5
的答案和建议。你能帮我一个忙,并把你的PHP代码中的HTML添加到什么地方吗?我看到您添加了生成HTML的PHP代码,但没有数据可供我填写循环,我基本上是在玩猜谜游戏。PHP脚本只返回echo,并将其作为成功警报发送到JS文件。就这样。其他的都在后面处理。你试过我的答案了吗?你能帮我一个忙,把PHP代码生成的HTML添加到某个地方吗?我看到您添加了生成HTML的PHP代码,但没有数据可供我填写循环,我基本上是在玩猜谜游戏。PHP脚本只返回echo,并将其作为成功警报发送到JS文件。就这样。其他的都在后面处理。你试过我的答案吗?即使把JS代码改成var data={'name':name}它也会一直说:未定义!由于某种原因,似乎无法获取任何值(图像文件中的名称)。真奇怪!你知道还有什么不对劲吗?在你发布的代码中没有一个带有droplist类的表为什么你不直接将名称添加到
标记中对我来说是个谜@e4c5-这就是我对我的答案的建议:(顺便说一句,我们已经远离了原来的问题。这有两个问题是我帮助您解决的。未定义的变量是另外一个问题。请接受这个问题,如果您仍然有问题,请发布另一个问题,即使将JS代码改为var data={'name':name}它一直在说:未定义!似乎没有值(来自图像文件的名称)由于某种原因可以获取。这很奇怪!知道还有什么可能是错误的吗?在你发布的代码中没有一个带有droplist类的表。为什么你不直接将名称添加到
标记中对我来说是个谜!@e4c5-这就是我在回答中的建议:(顺便说一句,我们已经远离了原来的问题。我帮你解决了两个问题。未定义的变量是另外一个问题。如果你仍然有问题,请接受这个问题并发布另一个问题是的,现在它很好!竖起大拇指!我想。prop()将是相同的,例如.attr()和.attr()同时已过时且不再使用。我再次必须检查两种方法之间的差异。很好,你解决了这个奇怪的问题。@what_me-如果答案对你有帮助,你可以勾选答案左侧相应的复选图标,或者向上投票最有帮助的答案。是的,现在
var name = $(this).attr('data-artname');