我的代码中已经达到了这个目的:
<?php
include 'template/overall/header.php';?>
<div class="large-12 medium-12 columns">
<table width="60%" border="1" align="center">
<tr>
<th colspan="4"><label style="text-align: center"><b>Dina filer</b></label> <label style="text-align: center"><a href="ladda_fil.php"> Ladda upp en ny fil</a></label></th>
</tr>
<tr>
<td>Fil Namn</td>
<td>Fil Typ</td>
<td>Fil Storlek(KB)</td>
<td>Öppna</td>
<td>Radera</td>
</tr>
<?php
$sql="SELECT * FROM file LEFT JOIN users on userName";
$result_set=mysql_query($sql);
if($result_set === FALSE) {
die(mysql_error()); // TODO: better error handling
}
while($row=mysql_fetch_array($result_set))
{
?>
<form action="" method="POST">
<tr>
<td><?php echo $row['file'] ?></td>
<td><?php echo $row['type'] ?></td>
<td><?php echo $row['size'] ?></td>
<td><a href="filer/mina_filer/<?php echo $row['file'] ?>" target="_blank">Öppna fil</a></td>
<td style="text-align: center; padding-top: 10px"><input name="delete" type="checkbox"></td>
</tr>
<?php
}
?>
</table>
<input type="submit" class="button" value="Radera filer" style="float: right; margin-right: 20%; padding: 0.7%; color: black; font-style: italic; font-size: 80%">
</form>
</div>
<?php
if (isset($_POST['delete'])) {
$sql = "DELETE * FROM file WHERE";
mysql_query($sql);
}
include 'template/overall/footer.php';
?>
我从哪里开始?这是从数据库中删除的开始,但它不起作用。我是php的新手并试图解决这个问题。任何帮助表示赞赏!
答案 0 :(得分:0)
使用unlink()功能,您可以删除文件夹中的文件。
示例代码
$res=mysql_query("SELECT file FROM tbl_uploads WHERE id=".$_GET['remove_id']);
$row=mysql_fetch_array($res);
mysql_query("DELETE FROM tbl_uploads WHERE id=".$_GET['remove_id']);
unlink("folder/path/".$row['file']);
更新::
要删除目录,您可以使用rmdir()。
这很有用
realpath - Returns canonicalized absolute pathname.
is_writable - Tells whether the filename is writable.
对于SQL注入,我们可以使用mysql_real_escape_string。
mysql_real_escape_string - 转义字符串中的特殊字符 在SQL语句中使用。但是在PHP 5.5.0中不推荐使用此扩展,并且它已在PHP 7.0.0中删除。相反,应该使用MySQLi或PDO_MySQL扩展。
答案 1 :(得分:0)
就像@RiggsFolly所说,还有很多东西需要学习。这个答案将涵盖您正在寻找的一些概念。对于初学者来说,这里有一些安全漏洞。首先停止使用mysql_*
而使用mysqli_*
,您也应该使用预准备语句来避免SQL注入。并且,还要检查文件是否属于用户,用户可以在其POST或GET请求中输入任何file_id
,并可以删除不属于他的文件。
让我们来看看如何做到这一点。
list_file.php
是您列出文件的地方:
//list files
while($row=mysql_fetch_array($result_set))
{
?>
<tr>
<td><?php echo $row['file'] ?></td>
<td><?php echo $row['type'] ?></td>
<td><?php echo $row['size'] ?></td>
<td><a href="filer/mina_filer/<?php echo $row['file'] ?>" target="_blank">Öppna fil</a></td>
<td style="text-align: center; padding-top: 10px"><a href="delete.php?file_delete=" . $row['file_id']>Delete</a></td>
</tr>
<?php
}
?>
delete_file.php
看起来像这样:
<?php
$file_id=$_GET['file_id'];
$user_id=$_SESSION['user_id']; //user ID stored in session at time of login
$conn = new mysqli($servername, $username, $password, $dbname);
if (isset($_GET['file_delete'])) {
$sql = "DELETE * FROM file WHERE ? && ? LIMIT 1"; // question indicate placeholders for later use, Also make sure to limit it to 1
$stmt = $conn->prepare($sql); // prepare query
$stmt->bind_param("ii", $file_id, $user_id); // Bind values to the placeholders
if($stmt->execute()){ // execute the query OR delete the entry if it exists
$sql="SELECT * FROM file WHERE file_id = '". $file_id ."' LIMIT 1"; // select file name using file_id
$result=mysqli_query($sql);
if($row=mysqli_fetch_array($result,MYSQLI_ASSOC)){
unlink("folder/path/" . $row['file']);// Delete the file from server
}
}else{echo "Something went wrong!";}
}
?>
您可以查看准备好的陈述here
另外,这个<a href="filer/mina_filer/<?php echo $row['file'] ?>" target="_blank">
是一个坏主意。您可以将其链接到download.php脚本,发送get或post参数并使用脚本获取文件而不是公开文件目录。查看this并查看下载脚本的外观