2017-02-07 2 views
0

Когда я загружаю изображение с тем же именем, оно заменяет мое предустановленное изображение. Я хочу дать ему номер (увеличение этого числа) 1_name.png, 2_name.png. Это мой код:Изменение имени загруженного изображения в PHP

if(isset($_POST['submit_im'])) { 
    $name = $_FILES['file']['name']; 
    $tmp_name = $_FILES['file']['tmp_name']; 
    $location = 'uploads/'; 
    $target = 'uploads/'.$name; 

    if(file_exists('uploads/'.$name)) { 
     $i = 1; 
     while(file_exists('uploads/'.$i."_".$name)) { 
      $i++; 
     } 
     $name = $i."_".$name; 
    } 

    if(move_uploaded_file($tmp_name,$location.$name)) { 
     $title = $_POST['title']; 
     $query = "INSERT INTO obrazky(img,title) VALUES ('".$target."','$title')"; 
     $result = mysqli_query($connection, $query); 
    } else { 

Спасибо за помощь :)

+3

Помогите с чем? И почему бы просто не дать изображению случайное имя? –

+2

И помните о проблеме SQL-инъекции, которую вы имеете в этом запросе. –

ответ

2

Вы можете сделать это гораздо проще, просто подсчитать количество файлов, которые вы имеете в своем каталоге и увеличить его на 1.

$cntFiles = count(array_diff(scandir("/uploads"), array(".", ".."))); 
$cntFiles++; // Increase by 1 for the next number 
$name = $cntFiles."_".$name; 

Мы делаем array_diff(), чтобы удалить записи . и .., которые поступают из файловой системы, но не представляют файлы в этом каталоге.

Кроме того, у вас есть некоторые проблемы в вашем коде

$target = 'uploads/'.$name; 

if(file_exists('uploads/'.$name)) { 
    $i = 1; 
    while(file_exists('uploads/'.$i."_".$name)) {/*...*/} 

Во-первых, вы проверяете против 2-х различных имен файлов. На данный момент имя вряд ли будет использоваться, потому что вы проверяете имя, в которое был загружен файл.

Во-вторых, вы указали переменную с именем файла, но вы ее не используете.

$target = 'uploads/'.$name; 
if(file_exists($target)) {/*...*/} 

Кроме того, ваш код уязвим для SQL Injection, но это покрывается в связанном вопросе.

+0

Спасибо :) Это работает :) – Forlis

+0

@Forlis Если этот ответ вам помог, было бы хорошо, если бы вы приняли его с зеленой галочкой под значками голосования. Это указывает на вопрос, как ответили. – KhorneHoly

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