如何检查一个名称是否已经存在于一个表单帖子,如果它添加一个数字的名称


PHP How to check if a name already exists on a form post, and if it does adds a number to the name

我正在编写一段代码,用于上传.zip文件,获取.zip文件的内容并删除.zip本身。它还根据您自己的输入更改目录的名称,这是必需的。这是表单:

<form action ="" method="post" enctype="multipart/form-data">
    <div>
        <p><input type="text" name="NewName" placeholder="Enter New Name" required/></p>
        <p><input type="file" name="zip" required/></p>
        <p><input type="submit" value="upload" /></p>
    </div>
</form>

这是我用来重写目录的php,默认命名为"NewMap"

 if($_POST['NewName']){
      $NewNameStr = $_POST['NewName'];
      $NewNameTrim=preg_replace('/'s+/', '', $NewNameStr);
      rename("uploads/NewMap/", "uploads/" . $NewNameTrim);
      mkdir("uploads/NewMap/");
 }

正如你所看到的,在我重命名它之后,我再次创建了目录以供将来使用。

我的问题如下:有可能用户将使用一个已经存在的名称,当这种情况发生时,它不会重命名任何东西,并且映射结构变得混乱。我如何检查名称是否已经存在$_POST['NewName'];再加上一个数字?如果user1将目录命名为onions user2也将目录命名为onions user2的目录命名为onions1

试试这样:

$dirName = YOUR_PATH;
$directoryExists = false;
$i = 1;
$tempName = $dirName;
do{
    if(file_exists($tempName)){
        $tempName = $dirName.$i;
        $i++;
    }else{
        $directoryExists = true;
        $dirName = $tempName;
    }
}while(!$directoryExists);

或者您可以在每个文件夹名称后添加日期时间(例如2016082916001234)

我强烈建议您不要允许这种情况发生。我指出,使用用户的id,或任何唯一标识符,并在他的所有文件夹中连接。也就是说,如果他想创建一个名为potato的文件夹,那么实际名称应该是:Potatouser

相关文章: