2016-09-21 1 views
-5

Я застрял на своих кодах от 2 дней. Я уже пробовал более 100 руководств/руководств, но ни один из них не решил мою проблему. В основном руководство предназначено для базы данных.Удалить файл из каталога с php NO DATABASE

Я использую готовый плагин галереи для отображения изображений на своем веб-сайте. Эта галерея не использует базу данных. Для этого я создал панель администратора с функцией загрузки. Теперь я ищу функцию для удаления загруженных фотографий с панели администратора. один рис за один раз или несколько вариантов будет более хорошим.

Сейчас этот код я отображаются изображения в Admin Страница в main.php, которые я загрузил раньше:

<?php 
$folder_path = 'gallery-images/'; //image's folder path 

$num_files = glob($folder_path . "*.{jpeg,jpg,gif,png,bmp}", GLOB_BRACE); 

$folder = opendir($folder_path); 

if($num_files > 0) 
{ 
while(false !== ($file = readdir($folder))) 
{ 
    $file_path = $folder_path.$file; 
    $extension = strtolower(pathinfo($file ,PATHINFO_EXTENSION)); 
    if($extension=='jpg' || $extension =='png' || $extension == 'gif' || $extension == 'bmp') 
    { 
    ?> 
      <a href="<?php echo $file_path; ?>" id="fname"><img src="<?php echo $file_path; ?>" height="250" /></a> 
      <?php 
    } 
} 
} 
else 
{ 
echo "the folder was empty !"; 
} 
closedir($folder); 
?> 

И я пытаюсь это удалить код в delete.php

<?php 
$filename = $_POST['fname']; 
$path = $_POST['directory']; 
if(file_exists($path."/".$filename)) { 
unlink($path."/".$filename); //delete file 
} 
?> 

Поэтому мне нужна функция для удаления файла с сервера с подтверждением и с кнопкой удаления. Прямо сейчас файл просто открывается щелчком. Эта функция будет только для администратора, поэтому я думаю, что я уверен в функции удаления, поскольку я читаю подобные темы.

Спасибо заранее.

EDIT 1:

До сих пор этот код успешно удалить файл с сервера (ответ от @Jocelyn):

<h3><a href="?delete=1">Delete Now!</a></h3> 

<?php 
    if(isset($_GET['delete'])) 
    { 
     unlink(__FILE__); 
    } 
?> 

Change this unlink(__FILE__); to unlink("$file_path"); 

EDIT 2:

К сожалению, это делает удалите файл с сервера, но удалите все файлы в этом каталоге.

Можно ли удалить только один файл, который я нажимаю.

Прямо сейчас все фотографии, появляющиеся из одной ссылки кода, я думаю, что проблема.

Ссылка это, из которого появляется фотографии:

<a href="?delete=1" id="delete" name="delete"><img src="<?php echo $file_path; ?>" height="250" /></a> 
+0

Вы можете показать нам, что вы делали? –

+0

Откуда вы получаете этот '$ _POST ['fname']' и '$ _POST ['directory']' – arunrc

+4

ok, что вы спрашиваете, как добавить/использовать кнопку? Работает ли ваш код на данный момент? Отвечайте на комментарии здесь, иначе возьмите это с ответами (ответами). Я для одного не буду стоять здесь здесь навсегда. –

ответ

0

очень быстро починили пример того, как вы могли бы достичь своей цели с помощью Ajax для отправки файла в delete.php сценария. Несомненно, что, поскольку он не протестирован, могут возникнуть проблемы, но это отправная точка.

<?php 
    /* delete.php */ 
    $img=!empty($_GET['name']) ? $_GET['name'] : false; 
    $result=false; 


    if($img){ 
     /* 

      here you would typically check that the path sent via ajax exists 
      and then use unlink to delete the file before sending a response 
      to the ajax callback function - the callback would then inform the 
      user that the file has been deleted (or not!) 

      For testing though a simple message will suffice so that files are not deleted unnecessarily!!! 

      -- uncomment the line below to actually attempt deletion of file. 
     */ 


     if(file_exists($img)){ 
      #$result = @unlink($img); 
      clearstatcache(); 
     } 


     echo $result ? 'The file '.$img.' was deleted' : 'The file '.$img.' could not be deleted'; 
    } 
?> 




<?php 
    $root='c:/wwwroot'; 
?> 
<!-- /* admin page that lists images */ --> 
<html> 
    <head> 
     <title>Delete images - no database</title> 
     <script> 
      function ajax(imagename,callback){ 
       var xhr=new XMLHttpRequest(); 
       xhr.onreadystatechange=function(){ 
        if(xhr.status==200 && xhr.readyState==4){ 
         callback.call(this, xhr.response); 
        } 
       }; 
       xhr.open('GET', 'delete.php?name='+imagename, true); 
       xhr.send(); 
      } 
      function deleteimage(e){ 
       e.preventDefault(); 
       ajax.call(this, e.target.dataset.path+'/'+e.target.dataset.name, cbdeleteimage); 
      } 
      function cbdeleteimage(r){ 
       alert(r); 
      } 
      function bindEvents(){ 
       var col=document.querySelectorAll('img.delete'); 
       for(var n in col)if(col[ n ].nodeType==1) col[n].addEventListener('click', deleteimage, false); 
      } 

      document.addEventListener('DOMContentLoaded', bindEvents, false); 
     </script> 
    </head> 
    <body> 
     <?php 

      $dir = 'gallery-images/';  /* YOUR path */ 
      $dir = $root . '/images/misc/'; /* MY test path */ 

      $files=preg_grep('@(\.jpg|\.jpeg|\.png|\.bmp|\.gif)@i', glob($dir . '*.*')); 
      $html=array(); 


      foreach($files as $file){ 
       if($blocal) $file=str_replace($root, '', $file); /* remove MY site root from file names */ 
       $name = pathinfo($file, PATHINFO_BASENAME); 
       $path = pathinfo($file, PATHINFO_DIRNAME); 

       $html[]="<img class='delete' src='{$file}' data-name='{$name}' data-path='{$path}' />"; 
      } 


      echo implode(PHP_EOL, $html); 
     ?> 
    </body> 
</html> 
+0

Попробуйте это, но ничего не произойдет. Отображение фотографий, но когда я нажимаю 1 пустое всплывающее окно, тогда ничего. –

+0

Я заметил несколько ошибок - это было, как я уже говорил, очень быстро, и не испытал – RamRaider

+0

, спасибо за вашу помощь. Можете ли вы помочь мне с перенаправлением? снова проверьте мой вопрос внизу. –

0

Так это окончательный код, который прекрасно подходит для нубов как я, кто застрял со своей работой:

это Delete.php удалить только запрошенный файл

<?php 
$file = $_GET['delete']; 
if(isset($_GET['delete'])) 
    { 
     unlink("./gallery-images/$file"); 
     header("Location:home.php"); 
    } 
?> 

Этот upload.php для загрузки файла с переименованием в значение автоматического прироста:

<?php 

// Upload and Rename File 

if (isset($_POST['submit'])) 
{ 
    $filename = $_FILES["file"]["name"]; 
    $file_basename = substr($filename, 0, strripos($filename, '.')); // get file extention 
    $file_ext = substr($filename, strripos($filename, '.')); // get file name 
    $filesize = $_FILES["file"]["size"]; 
    $allowed_file_types = array('.png','.jpg','.jpeg'); 
    $count = count (glob ('gallery-images/*')); 

    if (in_array($file_ext,$allowed_file_types) && ($filesize < 10000000)) 
    { 
     // Rename file 
     $newfilename = ($count + 1) . $file_ext; 
     if(file_exists("gallery-images/" . $newfilename)) 

     { 
      // file already exists error 
      echo "You have already uploaded this file."; 
     } 
     else 
     {  
      move_uploaded_file($_FILES["file"]["tmp_name"], "gallery-images/" . $newfilename); 
      header("Location: home.php"); 
      exit; 
     } 
    } 
    elseif (empty($file_basename)) 
    { 
     // file selection error 
     echo "Please select a file to upload."; 
    } 
    elseif ($filesize > 10000000) 
    { 
     // file size error 
     echo "The file you are trying to upload is too large."; 
    } 
    else 
    { 
     // file type error 
     echo "Only these file typs are allowed for upload: " . implode(', ',$allowed_file_types); 
     unlink($_FILES["file"]["tmp_name"]); 
    } 
} 

?> 

Это дом.PHP для отображения изображения с возможностью удаления:

Upload Form:

<form action="upload.php" method="post" enctype="multipart/form-data"> 
    Select image to upload: <br /> 
    <input type="file" name="file" id="file"><br /><br /> 
    <input type="submit" value="Upload Image" name="submit"> 
</form> 

Показать фотографии из каталога:

<?php 
$folder_path = 'gallery-images/'; //image's folder path 
$num_files = glob($folder_path . "*.{jpeg,jpg,png}", GLOB_BRACE); 
$folder = opendir($folder_path); 
$file = '$file_path'; 

if($num_files > 0) 
{ 
while(false !== ($file = readdir($folder))) 
{ 
    $file_path = $folder_path.$file; 
    $extension = strtolower(pathinfo($file ,PATHINFO_EXTENSION)); 
    if($extension=='jpg' || $extension =='png' || $extension == 'jpeg' || $extension == 'bmp') 
    { 
    ?> 
    <a href="delete.php?delete=<?php echo $file; ?>" onclick="return deleletconfig()" id="delete" name="delete"><img src="<?php echo $file_path; ?>" height="175" /></a> 
<?php 
    } 
} 
} 
else 
{ 
echo "the folder was empty !"; 
} 
closedir($folder); 
?> 

подтверждения удаления всплывающего сценарий:

<script> 
function deleletconfig(){ 

var del=confirm("Are you sure you want to delete this record?"); 
if (del==true){ 
} 
return del; 
} 
</script> 

Надеется, что это будет полезно для учащихся. Спасибо.

Смежные вопросы