Удалить несколько строк по имени файла, используя Coldfusion
У меня есть таблица в форме, которая заполняется списком имен файлов из базы данных. У каждой строки в таблице есть флажок. Я хотел бы иметь возможность проверить несколько строк в таблице, а затем отправить форму. После отправки каждая строка базы данных будет удалена на основе проверенного имени файла. Мне также нужно было бы иметь возможность удалить этот файл с сервера. Я использую ColdFusion и знаю, что для этого потребуется какой-то тип cfloop, но я не уверен, что это лучший способ сделать это.
Вот код для формы.
<cfform name="mainform"
action="deletingFiles.cfm?action=deleteDoc&teacherid=#url.teacherid#" method="post">
<table border="0" width="50%" id="product-table">
<tr>
<th>Check</th>
<th> Description </th>
<th>Date</th>
</tr>
<cfoutput query="delete">
<tr>
<td><input type="checkbox" name="DeleteID" value="#file_name#"></td>
<td><a href= "deletingFiles.cfm?action=editDoc">#description#</a></td>
<td>#DateFormat(date, "mmm-dd-yyyy")#</td>
</tr>
</cfoutput>
</table>
<center>
<button name="passchk" class="button blue" type="submit" >
<p> Delete Checked Items </p>
</button>
</center>
</cfform>
Это мой код для удаления файлов из базы данных и с сервера. Прямо сейчас он удалит только один файл.
<cfif URL.action is "deleteDoc">
<cfquery name="deleteDoc" datasource="test" username="" password="">
delete from testdoc where file_name = '#form.DeleteID#'
</cfquery>
<cffile action = "delete"
file = "f:\inetpub\wwwroot\test\#form.DeleteID#">
</cfif>
Заранее благодарю за любую помощь, которую вы можете оказать!
1 ответ
Решение
Основной ответ что-то вроде:
<!--- This performs SQL delete even if there is no corresponding file --->
<cfquery name="deleteDoc" datasource="test" username="" password="">
delete
from testdoc
where file_name IN (<cfqueryparam cf_sql_type="varchar"
value="#form.DeleteID#" list="yes">)
</cfquery>
<cfloop index="i" list="#form.DeleteID#">
<!--- This code is vulnerable to attacks consider filtering out input --->
<cffile action = "delete"
file = "f:\inetpub\wwwroot\test\#i#">
</cfloop>