如何删除本地主机上上传的文件以及 PHP 中的用户帐户

Posted

技术标签:

【中文标题】如何删除本地主机上上传的文件以及 PHP 中的用户帐户【英文标题】:How To Delete Uploaded File On Local Host Along With User Account In Php 【发布时间】:2015-03-18 13:50:35 【问题描述】:

这是注册页面的php代码,当用户注册时,他必须上传txt格式的文件|| doc格式。现在我希望每当用户通过单击删除按钮在delete.php上删除他的帐户时,他上传到“我的localhost wamp www/govt/document中的文档文件夹”上的上传文件也应该与用户帐户一起删除但是现在只有帐户正在删除并且文件在那里,我想删除由登录的特定用户上传的那些文件。

if(isset($_POST['submit']))
    $name = $_POST['name'];
    $password= $_POST['password'];
    $day = $_POST['dob'];
    $month=$_POST['dob2'];
    $year = $_POST['dob3'];
    if(isset($_POST['gender']))
    $gender = $_POST['gender'];
    
    if(isset($_FILES['upload']))
    $filename = $_FILES['upload']['name'];
    $filetmp = $_FILES['upload']['tmp_name'];
    $filetype = $_FILES['upload']['type'];
    $fileError= $_FILES['upload']['error'];
    $filesize= $_FILES['upload']['size'];
    
$max=1000000;
if(!empty($name) && !empty($password) && !empty($day) && !empty($month) && !empty($year) && isset($gender))
if(!empty($password))
$password=sha1($password);
if(!empty($name))
$query=mysqli_query($conn,"SELECT * FROM govtup WHERE name='$name'");
$count=mysqli_num_rows($query);
if ($count==1) 
echo "This name is already registered please choose another username";
else
if($fileError==0)
if($filesize<=$max)
if (($filetype=="text/plain") || ($filetype=="application/msword"))
move_uploaded_file($filetmp, "document/".rand(100,9999999).time()."$filename");
$query2=mysqli_query($conn,"INSERT INTO govtup(name,password,day,month,year,gender) VALUES ('$name','$password','$day','$month','$year','$gender')");
if($query2)
unset($name);
header("Location: login.php");
echo "Successfully registered";
else
echo "not registered";

else
echo "only txt and doc file allowed";

else
echo "The file is too big please choose filesize less than 1mb";

else
echo "please choose a txt or doc file to upload";




else
echo "Please fill all the field";



?>

删除.php代码 这是 delete.php 代码,它正在从 mysql phpmyadmin 中删除用户帐户详细信息,我希望当用户单击删除帐户按钮时,现在登录的用户上传的文件应该与用户详细信息一起删除。

<?php 

session_start();
require_once("inc/connection.php");
if(empty($_SESSION['usersession']))
header("Location: login.php");

if(isset($_SESSION['msg']))
echo $_SESSION['msg'];
unset($_SESSION['msg']);



?>
<!DOCTYPE html>
<html>
<head>
<title>REGISTER HERE</title>
<link rel="stylesheet" type="text/css" href="css/style.css"/>
</head>
<body>
<div id="wrapper">
<?php 
if(isset($_POST['delete']))
    $id=mysqli_real_escape_string($conn,$_SESSION['usersession']['id']);
    $query=mysqli_query($conn,"DELETE FROM govtup WHERE id='$id'");
    if($query)
        header("Location: login.php");
    else
        echo "Unable to proccess your request";
    
    $_SESSION['msg']="Your Account Has  Been Deleted";
    unset($_SESSION['usersession']);


?>
<form enctype="multipart/form-data" method="post" action="" id="form">
<label class="lb">USERNAME</label><p>
<input type="text" name="name" class="int"  value="<?php echo $_SESSION['usersession']['name'];?>" readonly/><p>

<label class="lb">D.O.B</label><p>
<input type="text" name="dob" value="<?php echo $_SESSION['usersession']['day']."-". $_SESSION['usersession']['month']."-".$_SESSION['usersession']['year']; ?>" readonly/>

<P>
<label class="lb">GENDER</label><p>
<input type="text" name="gender" value="<?php echo $_SESSION['usersession']['gender'];?>" readonly/>
<p>
<input type="submit" name="delete" id="dbtn" value="delete account">
</form>
</div>
<script type="text/javascript" src="inc/jquery.js"></script>
<script type="text/javascript">
    $(document).ready(function()
        $("#dbtn").click(function(e)
            if(!confirm("Are you sure you want to delete your account"))
                e.preventDefault();
                return false
            
            return true;

        )

    );
</script>
</body>
</html>

【问题讨论】:

你找过php unlink()函数吗? 【参考方案1】:

您必须在数据库中创建一个新列,用于存储文件名。我在这里修改您的插入查询

$query2=mysqli_query($conn,"INSERT INTO govtup(name,password,day,month,year,gender,file) VALUES ('$name','$password','$day','$month','$year','$gender','$filename')");

删除部分

if(isset($_POST['delete']))
    $id=mysqli_real_escape_string($conn,$_SESSION['usersession']['id']);

    $select = mysqli_fetch_assoc(mysqli_query($conn,"SELECT file FROM govtup WHERE id='$id'")); //Fetch the file which is associated with this account

    unlink('YourFolderPath/'.$select['file']); //Deleting the file

    $query=mysqli_query($conn,"DELETE FROM govtup WHERE id='$id'");
    if($query)
        header("Location: login.php");
    else
        echo "Unable to proccess your request";
    
    $_SESSION['msg']="Your Account Has  Been Deleted";
    unset($_SESSION['usersession']);

【讨论】:

我正在数据库中为文件名创建一个列,但是我应该为此选择什么“类型”,如果是 varchar,那么它的长度应该是多少,因为我给它一个随机数,然后是时间戳,然后是文件名,所以它如果有 1000 多个用户在我的 fom 上注册,那就太长了。 问题已解决,但现在我在编辑它并上传另一个名称不同的文件时遇到了另一个问题,新文件替换了以前的文件,这没问题,但是当我删除帐户时,它只会删除一个替换了前一个文件但保留替换文件的文件,我想删除用户在注册时或编辑后上传的所有文件。 嘿,问题没有解决,因为它只是从数据库中删除文件,而不是从“文件夹”中删除【参考方案2】:

如果我没记错的话,您并没有在任何地方存储信息,即哪些文件属于各个用户。 如果您将文件名与用户一起存储,则可以检索文件名和unlink

【讨论】:

【参考方案3】:

创建具有唯一 ID 的文件夹。并将其分配给用户。 如果用户删除他的帐户删除与此关联的文件夹。

rmdir($dirname) 

【讨论】:

你能告诉我应该在我的 php 代码中哪里使用这个代码【参考方案4】:

对于您的删除问题,首先检查您的 $select 您返回的内容,并通过回显它来检查您的图像路径。 DB和Folder中的文件名应该相同。

对于更新问题,首先您将检查用户是否更改了图像,然后从数据库中获取该用户的文件名并以相同的方式取消链接。如果用户没有更改图像,那么您不需要取消链接该图像,也不需要更新数据库列

【讨论】:

以上是关于如何删除本地主机上上传的文件以及 PHP 中的用户帐户的主要内容,如果未能解决你的问题,请参考以下文章

如何正确引用本地主机上 PHP、CSS 等的子目录(在 xampp 中)中的文件?

在本地主机上上传文件,以便网络中的任何人都可以访问[重复]

我可以从本地主机上传到 AWS S3,但不能从我的 AWS Elastic BeanStalk 实例上传?

PHP cURL 在本地主机上工作但在服务器上不工作

如何将文件放在本地主机上

如何在本地主机上使用 htaccess 制作 seo url? [关闭]