2016-04-12 18 views
-1

Kullanıcının PDF dosyalarını karşıya yüklemesine ve dosyanın adını veritabanına kaydetmesine izin veren bir sistemim var.Veritabanında bulunmayan sunucudan dosyaları sil

Bu betik nasıl çalışır, böylece kullanıcı veritabanımda adı olmayan sunucudaki tüm dosyaları silebilir?

Aslında sahip olduğum şey budur, ancak komut dosyası tüm dosyaları siler. Nasıl devam edeceğimi bilmiyorum.

<?php 

include 'fimg.class.php'; 
require('../../../php/cone.php'); 
//header('Location: ../produccion.php'); 

$directory = "upload/"; 

//get all image files with a .jpg extension. 
$images = glob($directory . "*"); 

foreach($images as $image) 
{ 
    $name = explode('_',$image); 
    $name = 'photos/' . $name[0]; 
    $sql = mysql_query("SELECT imagen FROM r_alumnos"); 
    if(mysql_num_rows($sql) == 0) 
     unlink($image); 
} 

?> 
+2

[ 'mysql_ kullanmayı bırakın lütfen *' işlevleri] (http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php). [Bu uzantılar] (http://php.net/manual/en/migration70.removed-exts-sapis.php) PHP 7'de kaldırılmıştır. [Hakkında] öğrenin (http://en.wikipedia.org/ wiki/Prepared_statement) [PDO] için ifadeler (http://php.net/manual/en/pdo.prepared-statements.php) ve [MySQLi] (http://php.net/manual/en/mysqli.quickstart .prepared-statements.php) ve PDO kullanmayı düşünün, [gerçekten çok kolay] (http://jayblanchard.net/demystifying_php_pdo.html). –

+1

Bir "WHERE" yan tümcesi kullanın. –

+0

DB'deki görüntü dosya adı nedir? tam yol ya da sadece dosya adı? Ayrıca "glob ($ directory." * .jpg ") kullanarak sadece' jpg' dosyalarını aldığınızdan emin olun; ' –

cevap

0

Bunu işleyen bir bakım senaryosu gibi bir şey oluşturabilirsiniz.

Birincisi, (yürütme şahsen birden fazla sorgu sevmiyorum) Bir dizide her şeyi yüklemek:

$database_files = array(); 
$result_db_files = mysqli_query("SELECT imagen FROM r_alumnos"); 

while ($row = $result_db_files->fetch_assoc()) 
{ 
    $database_files[] = $row['imagen']; 
} 

Daha sonra her dosyayı kontrol:

$images = glob($directory . "*"); 

    foreach($images as $image) 
    { 
     $name = explode('_',$image); 
     $name = 'photos/' . $name[0]; 
     if (!in_array($name, $database_files)) 
     { 
      unlink($image); 
     } 
    }