Показать список файлов из каталога с флажками - PullRequest
0 голосов
/ 16 июня 2011

Я пытаюсь отобразить список всех файлов .txt в каталоге с флажками рядом с каждым файлом.Затем установите флажки для файлов, которые вы хотите, и следующий процесс удалит эти файлы из каталога.У меня есть следующий код для отображения файлов в каталоге, но я не знаю, как создать флажки рядом с именами файлов.

// Define the full path to your folder from root 
$path = "/var/www/vhosts/default/htdocs/Members/$company/Users/$insp_name/Orders/Clients"; 

// Open the folder 
$dir_handle = @opendir($path) or die("Unable to open $path"); 

// Loop through the files 
while ($file = readdir($dir_handle)) {
  if($file == "." || $file == ".." || $file == "index.php" ) 
    continue; 

  echo "$file<br />";
}

// Close 
closedir($dir_handle);

Ответы [ 4 ]

4 голосов
/ 16 июня 2011

Примечание. В следующем блоке if используйте скобки вокруг continue для ясности. В противном случае, похоже, что echo происходит внутри блока if, а не после его завершения.

if($file == "." || $file == ".." || $file == "index.php" ) 
{
  continue; 
}
// Prints a checkbox after each file.
// The checkboxes are received by the form handler as an array called $files[]
// holding the filenames of the files you want deleted.
echo "<input type='checkbox' name='files[]' value='$file' /> $file<br />\n";

Теперь в вашем скрипте обработки форм:

$path = "/var/www/vhosts/default/htdocs/Members/$company/Users/$insp_name/Orders/Clients";
foreach($_POST['files'] as $filename) {
  // To prevent traversal attacks, you need to validate $filename
  // For example, if it would only be expected to be alphanumeric:
  if (ctype_alnum($filename)) {
    if(!unlink($path . "/" . $filename)) {
       echo "Error deleting $filename";
    }
  }
}

Примечание о проверке: очень важно проверить содержимое $filename, чтобы убедиться, что оно не содержит нулевых байтов, или ../../../, чтобы разрешить изменение файлов за пределами предполагаемого пути. В приведенном выше примере это было сделано с ctype_alnum(), но другие регулярные выражения или in_array() могут быть более подходящими для данной ситуации.

0 голосов
/ 16 июня 2011

Просто отобразите элемент INPUT прямо перед выводом имени файла

echo "<input type=\"checkbox\" value=\"$file\" name=\"files[]\" />$file<br />";

Вы также можете добавить ! is_file($path.DIRECTORY_SEPARATOR.$file) в оператор if, чтобы убедиться, что это файл, а не каталог.

if ( $file == "." || $file == ".." || $file == "index.php" || ! is_file($path.DIRECTORY_SEPARATOR.$file) ) 
0 голосов
/ 16 июня 2011

Замените ваш эхо-оператор следующим:

echo "<input type=\"checkbox\" name=\"files[]\" value=\"$file\">$file<br/>";
0 голосов
/ 16 июня 2011

echo '<input type="checkbox" name="files" value="whatever" /> ' . $file . '<br />';

Это должно создать элемент checkbox рядом с каждым файлом в вашем списке.

Кроме того, обратите внимание, что форматирование вашего кода довольно запутанно - continue заставляет его выглядеть так, как будто он будет запускать каждую итерацию, несмотря ни на что. Попробуйте поместить его в ту же строку, что и оператор if, или в строку ниже с соответствующим отступом. Или поместите это в { }.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...