2015-03-23 3 views
1

У меня есть система «профиля», где каждый зарегистрированный пользователь может изменить свой профиль, чтобы изображение отображалось. Процесс загрузки - загрузить изображение в папке с именем pictures, а затем записать имя файла в строку базы данных с именем "picture", он работает, и все в порядке, но мне нужно знать, как хешировать имя загруженного изображения, так что если 2 человека с различными рисунками, но то же название картины будет загружать файл, будет проблема ...Как хэш-имя загруженного файла в db?

Вот моя форма представить:

<form action="" method="post" enctype="multipart/form-data"> 
    <input type="file" name="file"> 
    <input type="submit" name="submit"> 
</form> 

у меня есть этот код для загрузки файла в папку и в строке базы данных:

<?php 
    if(isset($_POST['submit'])){ 
     move_uploaded_file($_FILES['file']['tmp_name'],"pictures/".$user_id.$_FILES['file']['name']); 
     $con = mysqli_connect("host","name","pass","db"); 
     $q = mysqli_query($con,"UPDATE members SET picture = '".$_FILES['file']['name']."' WHERE username = '".$_SESSION['username']."'"); 
    } 
?> 

А вот код, показывающий изображение на веб-сайте:

<?php 
    $con = mysqli_connect("host","name","pass","db"); 
    $q = mysqli_query($con,"SELECT * FROM members WHERE username = '".$_SESSION['username']."'"); 
    while($row = mysqli_fetch_assoc($q)){ 
     if($row['picture'] == ""){ 
      echo " <img src='pictures/public_icon.png' width='25' height='25'>"; *//This is default pic//* 
     } else { 
      echo " <img width='25' height='25' src='pictures/".$row['picture']."' alt='Profile Pic'>"; *//And this is pic from db row//* 
     }          
    } 
?> 

Я хотел бы знать, как хэш имя эта картина в загруженном папке, а также в строке базы данных ... Горячая я могу это сделать ? Я бы хэш его с «ид» и строке «дата» из БД, но я не знаю, как ..:/

+0

Вы можете добавить произвольную строку или номер, чтобы решить эту проблему. – Toretto

+0

@ Торетто - как это сделать? –

+0

Вы также можете изменить имя загруженного файла на стороне сервера, чтобы не было конфликов –

ответ

0

Используйте это для загрузки вместо:

<?php 
    if(isset($_POST['submit'])){ 

     /* 
     * create a unique file name with the current time and ip address of 
     * user, since it is highly unlikely to have the same file uploaded 
     *form the same ip address at the same time 
     */ 
     $unique_file_name = time(). $_SERVER['REMOTE_ADDR']. $_FILES['file']['name']; 

     //run query only if file upload and transfer succeeded 
     if(move_uploaded_file($_FILES['file']['tmp_name'],"pictures/".$user_id. $unique_file_name)){ 
      $con = mysqli_connect("host","name","pass","db"); 
      $q = mysqli_query($con,"UPDATE members SET picture = '".$_FILES['file']['name']."' WHERE username = '".$_SESSION['username']."'"); 
     } 
    } 
?> 
+0

Имя файла прекрасно работает, но как вытащить имя из db сейчас? –

+0

Вместо 'SELECT *' Используйте это: '' SELECT 'picture' – NaijaProgrammer

+0

Но теперь он только переименовывает файл в папку profile_pics. Имя файла в базе данных имеет то же имя, что и имя на вашем ПК другого пользователя. .. почему? –

-1

Вы можете попробовать это один

<?php 
    if(isset($_POST['submit'])){ 
      $filename = $user_id.$_FILES['file']['name']; 
      move_uploaded_file($_FILES['file']['tmp_name'],"pictures/".$filename); 
      $con = mysqli_connect("host","name","pass","db"); 
      $q = mysqli_query($con,"UPDATE members SET picture = '".$filename."' WHERE username = '".$_SESSION['username']."'"); 
    } ?>  
Смежные вопросы