2012-06-05 54 views
1

早上好,我一直在試圖解決這個問題,但是我必須承認這種編程方式的新特點。用一個隨機名稱將圖像保存到數據庫中

其實我在製作一個新聞網站,對於新聞管理我有一個小問題,我想,當我點擊保存圖片時,它會得到一個隨機名稱,而不是它從用戶文件中得到的名稱:pic.jpg保存爲2613.jpg。

我試圖做到這一點,以防止如果有2個相同名稱的圖片新的一個替換舊的,我嘗試使用JavaScript,PHP,但我wouldnt能夠解決我的問題,希望你們可以幫助我順便說一句,即時通訊工作使用JavaScript,PHP,Postgresql的,jQuery和AJAX,如果你需要更多的細節,請讓我知道,並再次,希望我能從這個社區得到一些幫助。

function guardar(){ 
if($('#titl').val() == '' || $('#categ').val() == '' || $('#cont').val()==''){ 
      alert("Todos los campos deben contener datos!"); 
      return false; 
     } 

     $.ajax({ 
      url: "noticias_php.php", 
      data:{ 
       n : rand(), 
       "accion" : "guardar", 
       ID  : $('#id').val(), 
       Titulo : $('#titl').val(), 
       Categorias : $('#categ').val(), 
       Contenido : $('#cont').val(), 
       fecha: $('#fecha').val(), 
       imagen: $('#img_id').val() 

      }, 
      success: function(datos){ 
       var respuesta = explode("-*", datos); 

         if (respuesta[0] == "SI"){ 
          aviso(respuesta[1]); 
          limpiar(); 
         }else if (respuesta[0] == "NO"){ 
          aviso(respuesta[1]); 
         }else{ 
          aviso(datos); 
         } 
      } 
     }); 
    } 
+2

考慮改寫你的問題。作爲一個單句是非常難以理解的。 – lanzz

+2

在php中使用sha(uniqid(microtime()))函數獲​​得隨機唯一名稱 – 2012-06-05 14:08:20

回答

0

有幾件事你可以在這裏做 - 我會推薦使用PHP在服務器級別做它們。您顯示的代碼似乎是客戶端JavaScript。

通常,您可以生成隨機數或日期戳(這可能更有用)。然後將其替換或附加到文件名稱。根據您的網站的使用情況,這些都應該足夠了。

PHP隨機數發生器 - rand(0000, 9999)

PHP郵戳發生器(請注意,如果產生的日期不包括:人物等等這些都會打破一些圖像的URL) - date("YmdHis")

我經常使用一些PHP這樣的清理文件名

$file_name = str_replace(" ", "_", rand(0000, 9999)."_".eregi_replace("[[:space:]]+", " ", strtolower($_FILES['image']['name']))); 

這不僅使其成爲唯一通過附加一個4位數的隨機數的文件名也將斯蒂普所有的雙空格,使所有小寫同時更換帶下劃線的空格。它可能不是最乾淨的,但它的工作原理。

+0

謝謝這幫助我! – user1437548

+0

隨意投票;-) – megaSteve4

+1

可悲,沒有足夠的代表投票 – user1437548

0

使用UUID(與GUID大致相同)。 Postgres UUID

你在什麼版本?如果在9.1上嘗試執行CREATE EXTENSION「uuid-ossp」;

你是在Windows還是在某些* niX盒子上?有關如何安裝的詳細信息,請參閱此鏈接,具體取決於您所在的位置。 Install uuid-ossp module

0

您可能想要根據數據庫驅動它 - 從ImageList中選擇max(id)+1。這樣你保證唯一性,而不是有一個隨機值。你也可以使用UUID,但是它們的文件名會更長。

+1

'select max(id)+ 1' will ** not ** guarantee only uniqueness。序列是更好的選擇。 –

0

md5(microtime(true)); - 這將是非常獨特的。

您可以附加user_idrand(0,1000)使其更獨特。

另外顯然是使用tempnam這將在bash環境中創建唯一的臨時文件,您可以重複使用。

相關問題