# PHP Code löscht ganzes Verzeichnis statt einem Ordner



## fafrey (25. Mrz 2014)

Guten Morgen,

ich hab ein php script bekommen über das ich mal drüberschauen sollte, nur mein Problem ist, dass ich keine Ahnung von php habe.

Das Script löscht (wie im Titel schon erwähnt) ein komplettes Verzeichnis wenn man einen Ordner zum löschen auswählt und diesen löscht.

ich DENKE der Fehler wird zwischen den Zeilen 715-849 oder 857-919 liegen.

*715-849:*

```
function bulk_submit($bulk_action,$d) {
  global $_POST, $sqlpref, $d, $tbcolor1, $userdir, $tbcolor2;
  if (!$bulk_action) $error .= "Bitte eine Aktion wählen.<br>\n";
  if (!$_POST[filesel] && !$_POST[foldersel]) $error .= "Bitte mindesten eine Datei auswählen und diese Aktion durchzuführen.<br>\n";
  if ($_POST[filesel] && $_POST[foldersel]) $delvar = "Dateien/Ordner und deren Inhalt";
  elseif ($_POST[filesel] && count($_POST[filesel]) > 1) $delvar = "files";
  elseif ($_POST[foldersel] && count($_POST[foldersel]) > 1) $delvar = "Ordner und deren Inhalt";
  elseif ($_POST[filesel]) $delvar = "Datei";
  elseif ($_POST[foldersel]) $delvar = "Ordner und deren Inhalt";
  if (!$error && $bulk_action == "delete") {
    page_header("Löschen");
    opentitle("Löschen");
    opentable("100%");
    echo "<table border=\"0\" cellpadding=\"2\" cellspacing=\"0\" width=100%>\n"
        ."<form name=bulk_action action=\"?p=bulk_action\" method=post>\n"
        ."<tr><td><font class=error>Sind sie sich sicher dass die $delvar löchen wollen?</font><br>\n"
        ."<tr><td bgcolor=$tbcolor1>\n";
    $a=0; $b=0;
    if (is_array($_POST[filesel])) {
      foreach ($_POST[filesel] as $file) {
        echo "$file <input type=hidden name=filesel[$a] value=$file><br>\n";
        $a++;
      }
    }
    if (is_array($_POST[foldersel])) {
      foreach ($_POST[foldersel] as $file) {
        echo "$file<input type=hidden name=foldersel[$b] value=$file><br>\n";
        $b++;
      }
    }
    echo "<tr><td align=center><br><a href=\"javascript:document.bulk_action.submit();\">Ja</a> | \n"
        ."<a href=\"?p=home\"> Nein </a>\n"
        ."<input type=hidden name=bulk_action value=\"$bulk_action\">\n"
        ."<input type=hidden name=d value=\"$d\">\n"
        ."</td></tr></form></table>\n";
    closetable();
    page_footer();
  } elseif (!$error && $bulk_action == "move") {
    page_header("Verschieben");
    opentitle("Verschieben");
    opentable("100%");
    echo "<table border=\"0\" cellpadding=\"2\" cellspacing=\"0\" width=100%>\n"
        ."<form name=bulk_action action=\"?p=bulk_action\" method=post>\n"
        ."<tr><td>Verschiebe $delvar:\n"
        ."<tr><td bgcolor=$tbcolor1>\n";

    $a=0; $b=0;
    if (is_array($_POST[filesel])) {
      foreach ($_POST[filesel] as $file) {
        echo "$file <input type=hidden name=filesel[$a] value=$file><br>\n";
        $a++;
      }
    }
    if (is_array($_POST[foldersel])) {
      foreach ($_POST[foldersel] as $file) {
        echo "$file<input type=hidden name=foldersel[$b] value=$file><br>\n";
        $b++;
      }
    }
    echo "<tr><td><select name=ndir size=1>\n"
        ."<option value=\"".substr($item,strlen($userdir.$d))."/\">".substr($item,strlen($userdir.$d))."/</option>";
    $content = listdir($userdir);
    asort($content);
    foreach ($content as $item) echo "<option value=\"".substr($item,strlen($userdir))."/\">".substr($item,strlen($userdir))."/</option>\n";
    echo "</select> "
        ."<input type=\"Submit\" value=\"Verschieben\" class=\"button\">\n"
        ."<input type=hidden name=bulk_action value=\"$bulk_action\">\n"
        ."<input type=hidden name=d value=\"$d\">\n"
        ."</td></tr></form></table>\n";
    closetable();
    page_footer();
  } elseif (!$error && $bulk_action == "chmod") {
    page_header("Berechtigung ändern");
    opentitle("Berechtigung ändern");
    opentable("100%");
    echo "<table border=\"0\" cellpadding=\"2\" cellspacing=\"0\" width=100%>\n"
        ."<form name=bulk_action action=\"?p=bulk_action\" method=post>\n"
        ."<tr><td>Von $delvar die >Berechtigungen ändern:\n"
        ."<tr><td bgcolor=$tbcolor1>\n";

    $a=0; $b=0;
    if (is_array($_POST[filesel])) {
      foreach ($_POST[filesel] as $file) {
        echo "$file <input type=hidden name=filesel[$a] value=$file><br>\n";
        $a++;
      }
    }
    if (is_array($_POST[foldersel])) {
      foreach ($_POST[foldersel] as $file) {
        echo "$file<input type=hidden name=foldersel[$b] value=$file><br>\n";
        $b++;
      }
    }
    
    if (is_array($_POST[filesel])) {
      $keys = array_keys($_POST[filesel]);
      $chval = substr(sprintf('%o', @fileperms($userdir.$d.$_POST[filesel][$keys{0}])), -4);
    } else {
      $keys = array_keys($_POST[foldersel]);
      $chval = substr(sprintf('%o', @fileperms($userdir.$d.$_POST[foldersel][$keys{0}])), -4);
    }
    echo "<tr><td><br><table cellpadding=0 cellspacing=0>\n"
/* Work in Progess
        ."<tr><td><table cellpadding=0 cellspacing=0 width=120 bgcolor=$tbcolor1>\n"
        ."<tr><td colspan=2>Owner:<tr><td>Read<td><input type=checkbox name=perms00 onMouseUp=\"chmodmake(400);\">\n"
        ."<tr><td>Write<td><input type=checkbox name=perms01 onMouseUp=\"chmodmake(200);\">\n"
        ."<tr><td>Execute<td><input type=checkbox name=perms02 onMouseUp=\"chmodmake(100);\"></table>\n"
        ."<td width=20><img src=images/pixel.gif width=20 height=1>\n"
        ."<td><table cellpadding=0 cellspacing=0 width=120 bgcolor=$tbcolor1>\n"
        ."<tr><td colspan=2>Group:<tr><td>Read<td><input type=checkbox name=perms10 onMouseUp=\"chmodmake(40);\">\n"
        ."<tr><td>Write<td><input type=checkbox name=perms11 onMouseUp=\"chmodmake(20);\">\n"
        ."<tr><td>Execute<td><input type=checkbox name=perms12 onMouseUp=\"chmodmake(10);\"></table>\n"
        ."<td width=20><img src=images/pixel.gif width=20 height=1>\n"
        ."<td><table cellpadding=0 cellspacing=0 width=120 bgcolor=$tbcolor1>\n"
        ."<tr><td colspan=2>Pubic:<tr><td>Read<td><input type=checkbox name=perms20 onMouseUp=\"chmodmake(4);\">\n"
        ."<tr><td>Write<td><input type=checkbox name=perms21 onMouseUp=\"chmodmake(2);\">\n"
        ."<tr><td>Execute<td><input type=checkbox name=perms22 onMouseUp=\"chmodmake(1);\"></table>\n"
        ."</table>\n"
*/
        ."<tr><td><input type=text width=20 size=20 name=ndir value=\"$chval\">\n"
        ."<br><br><input type=\"Submit\" value=\"Ändern\" class=\"button\">\n"
        ."<input type=hidden name=bulk_action value=\"$bulk_action\">\n"
        ."<input type=hidden name=d value=\"$d\">\n"
        ."</td></tr></form></table></table>\n";
    closetable();
    page_footer();
  } else {
    page_header("Aktion");
    opentitle("Aktion");
    opentable("100%");
    echo "<font class=error>$error</font>\n";
    closetable();
    page_footer();
  }
}
```
*857-919:*

```
function bulk_action($bulk_action,$d,$ndir) {

  global $_POST, $sqlpref, $tbcolor1, $contenta, $contentb, $userdir;
  set_error_handler ('error_handler');
  if (!$bulk_action) $error .= "Bitte eine Aktion wählen.<br>\n";
  if (!$_POST[filesel] && !$_POST[foldersel]) $error .= "Bitte mindesten eine Datei auswählen und diese Aktion durchzuführen.<br>\n";
  if (!$error && $bulk_action == "delete") {
    page_header("Löschen");
    opentitle("Löschen");
    opentable("100%");
    if (is_array($_POST[filesel])) {
      foreach ($_POST[filesel] as $file) {
        if(@unlink($userdir.$d.$file)) echo "<font class=ok>$file wurde erfolgreich gelöscht.<br>\n";
      }
    }
    if (is_array($_POST[foldersel])) {
      foreach ($_POST[foldersel] as $file) {
        listdircontents($userdir.$d);
        foreach ($contenta as $delitem) if(@unlink($userdir.$d.$delitem)) echo "<font class=ok>$delitem wurde erfolgreich gelöscht.<br>\n";
        foreach ($contentb as $delitem) if(@rmdir($userdir.$d.$delitem)) echo "<font class=ok>$delitem wurde erfolgreich gelöscht.<br>\n";
      }
    }
    if (!$parseerror) echo "<a href=\"?d=$d\">Zurück</a>\n";
    closetable();
    page_footer();
  } elseif (!$error && $bulk_action == "move") {
    page_header("Verschieben");
    opentitle("Verschieben");
    opentable("100%");
    if (is_array($_POST[filesel])) {
      foreach ($_POST[filesel] as $file) {
        if(@rename($userdir.$d.$file, $userdir.$ndir.$file)) echo "<font class=ok>$file wurde erfolgreich verschoben.<br>\n";
      }
    }
    if (is_array($_POST[foldersel])) {
      foreach ($_POST[foldersel] as $file) {
        if(@rename($userdir.$d.$file, $userdir.$ndir.$file)) echo "<font class=ok>$file wurde erfolgreich verschoben.<br>\n";
      }
    }
    if (!$parseerror) echo "<a href=\"?d=$d\">Zurück</a>\n";
    closetable();
    page_footer();
  } elseif (!$error && $bulk_action == "chmod") {
    page_header("Berechtigung ändern");
    opentitle("Berechtigung ändern");
    opentable("100%");
    if (is_array($_POST[filesel])) {
      foreach ($_POST[filesel] as $file) {
        if(@chmod($userdir.$d.$file, intval($ndir,8))) echo "<font class=ok>".$file."'s Berechtigungen wurden erfolgreich auf $ndir geändert.<br>\n";
      }
    }
    if (is_array($_POST[foldersel])) {
      foreach ($_POST[foldersel] as $file) {
        if(@chmod($userdir.$d.$file, $ndir)) echo "<font class=ok>".$file."'s Berechtigungen wurden erfolgreich geändert.<br>\n";
      }
    }
    if (!$parseerror) echo "<a href=\"?d=$d\">Zurück</a>\n";
    closetable();
    page_footer();
  } else {
    page_header("Action");
    opentitle("Action");
    opentable("100%");
    echo "<font class=error>$error</font>\n";
    closetable();
    page_footer();
  }
}
```


----------



## Thallius (25. Mrz 2014)

Was ist denn jetzt der Unterschied zwischen einem Verzeichnis und einem Ordner?

Und das ist kein php script das ist ein Schlag ins Gesicht für jeden PHP Scripter. *grusel*

Gruß

Claus


----------



## Tobse (25. Mrz 2014)

Thallius hat gesagt.:


> Was ist denn jetzt der Unterschied zwischen einem Verzeichnis und einem Ordner?


Die Frage tut sich mir auch auf. Ich denke aber, dass es wie folgt gemeint ist:
Man wählt den Ordner 
	
	
	
	





```
/foo/bar/
```
 aus, gelöscht wird aber 
	
	
	
	





```
/foo
```
. Sprich es läuft darauf hinaus

```
unlink("foo");
// anstatt was eigentlich passieren sollte
unlink("foo/bar");
```



Thallius hat gesagt.:


> Und das ist kein php script das ist ein Schlag ins Gesicht für jeden PHP Scripter. *grusel*


Sehe ich änlich, eigentlich unzumutbar.

[EDIT]Da der Code wie gesagt nicht lesbar ist, ist es mir unmöglich dir zu sagen, warum und ob der Fehler in dem Code liegt.[/EDIT]


----------

