取消链接后删除db条目

时间:2010-11-07 15:24:04

标签: php upload

如果这个问题形成错误或有点厚,请提前道歉但是这里......

我有一个用于查看数据输入的PHP表单

其中一部分处理上传的文件。

每个表格行可以上传三个可能的文件的复选框。数据库中有3个与这些可能的文件上载相关的字段。选中表单复选框会导致相应的上载文件被取消链接。它工作正常。

这是我的谜题。如何删除/更新与未链接文件对应的数据库中的正确条目?

问题是html中的3个复选框命名相同:'delpic []'。换句话说,通过勾选复选框返回的值将被添加到数组中。这是简洁地管理取消关联的关键(我认为)。

如果要取消链接某个特定行的文件,应用程序如何“知道”mysql数据库中的相应字段进行更新?

Argghhh。

汤姆

2 个答案:

答案 0 :(得分:0)

它将如何'知道'是您将使用正确的查询在脚本中告诉它。假设您在数据库表中有一个字段'file_names','table',它存储唯一的文件名,并且相关目录中的所有文件都具有唯一的名称。然后当你做一些文件'foo'时,你将查询你的表并查看具有'foo'的行,如果并使用正确的sql对hat行做一些事情。比如删除该行,例如。

$db = mysql_connect('YOUR_DB_ADDRESS','YOUR_DB_USER','YOUR_DB_PASS') or die("Database error"); 
mysql_select_db('YOUR_DB', $db); 

$SQL = 'DELETE FROM table WHERE file_names = "foo"';
mysql_query($SQL); 

答案 1 :(得分:0)

在您的表单中,您正在使用数组。我猜这些数组是否包含您要删除的文件的名称,如下所示?

<?php
array => (
    [0] => 'file1.gif',
    [1] => 'file2.gif',
    [2] => 'file3.jpg'
    // ...
)
?>

我个人建议你在这里使用数据库中的主键而不是文件名(你的​​数据库表 有一个主键,对吧?),然后从中获取行数据库。这样你知道行存在,你将能够从表中获取文件名。

至于实际删除,如果您的数据库支持事务,那么我更倾向于以相反的方式执行它并删除文件之前的行,使用以下伪代码:

  1. 开始交易
  2. 从数据库中删除行
  3. 尝试删除文件
  4. if(删除行)和(文件删除)
  5. 提交交易
  6. 否则
  7. 回滚交易并报告错误