2013-07-09 55 views
-1

我正在尋找處理此問題的最佳方法,我一直在尋找一種方法來嘗試解決此問題。URL和phpmyadmin自動增量

我有一個數據庫表名爲products,並在此表中我有我所有的產品在其像鞋子,衣服,帽子等

我有我基於所用的一切呼應成其單頁產品ID代碼我使用看起來像這樣

<a href="product.php?ID=<?php echo $row['ID']; ?>">View</a> 

的URL看起來像這樣

http://www.example.x10.mx/product.php?ID=1 

的問題是,有人可以將ID更改爲2或3或4 ....這不應該發生。我不知道這個問題是不是使用付費域名或者它只是在x10Hosting上。

問題

我想從URL變化的ID到任何他們想要的隨機數,可以有人請告訴我如何可以做到這一點提供用途。

另一個問題 是他們的方式phpMyAdmin的可以生成的隨機字母和數字的混合,因爲這是我想到的解決我的問題

感謝

+0

他們爲什麼不能自己編輯ID?你如何確保「代碼」始終保持相同的書籤,哪些不是,或者應該不可參考? – prodigitalson

+0

@prodigitalson事情是我設計product.php和itemview.php頁面的方式是,這兩個回顯身份證,所以如果我改變ID爲2,而我在itemview.php頁面上它會顯示與該ID相關的事情它不應該顯示在itemview.php上,並且與許多其他產品相同 – Luffy

+1

只要不依賴於具有相同ID的安全性或驗證,它應該不成問題。他們會混合顯示器,但這是他們自己的錯。他們不應該這樣做,並期望獲得合理的產出,你不應該擔心。 – Barmar

回答

-1

我不得不接近的唯一途徑在工作時我們的商業系統發生類似的問題我們處理它的方式是提供用戶在其查詢中的值的散列表。

如果您針對鹽對查詢字符串進行加密並使您的url /product.php?id=1 & hash = ajk23j4aksdljfklasdjf2345j - 然後在product.php上驗證哈希是否正確匹配。如果哈希值不匹配,則意味着用戶已經改變了某些東西。

+0

你可以解釋更多的細節,請... – Luffy

+0

比方說,例如我有網址:http: //www.website.com/script.php?id=5&subid=10 - 我將採用id = 5&subid = 10並創建一個加密的字符串來對抗salt。該鏈接將附加該散列:http://www.website.com/script.php?id=5&subid=10&hash=hashhere - 然後您將確保計算的加密/散列字符串與內容匹配查詢字符串 – skrilled

+0

如果您試圖變得簡單並且不需要高級安全性,那麼您甚至可以執行如下操作:$ hash = md5(md5($ id));我非常懷疑你的普通用戶會計算出你的ID的雙md5散列是什麼。然後,只需在腳本本身驗證$ _GET ['hash'] == md5(md5($ _ GET ['id'])) ; – skrilled

-1

這心不是一個真正的答案,但我覺得有必要在這裏發表,因爲我的感覺是一個應用程序設計不良情況

從對主要問題的評論跟帖:

抱歉讓你混淆,但他們沒有什麼可以混淆的。例如帽子,鞋子使用product.php頁面和手套,襯衫使用itemview.php頁面,當您單擊視圖時,兩個頁面都使用產品ID(ID)。希望有道理

它仍然沒有任何意義。你提到的所有這些事實上都是產品...只是不同類型的產品。在任何理智的設計中,他們都將使用相同的URL格式。根據產品類型做事情的邏輯屬於你用作控制器的任何東西 - 在你的情況下,我假定url中的.php頁面。你只需要其中一個......從那裏你可以做不同的事情。

例中最基本的常識:

// This is product.php 

if(!isset($_GET['id'])) { 
    // 404 or some other error 
} 

$product = get_item_by_id($_GET['id']); 

if(!$product) { 
    // 404 or other error 
} 

switch($product['type']) { 
    case 'cap': 
    case 'shoes': 
     // for cap and shoes use the product_view template 
     include 'product_view.php'; 
     break; 

    case 'gloves': 
    case 'shirts': 
     // for gloves and shirts use the item_view template 
     include 'item_view.php'; 
     break; 

    default: 
     // otherwise use the default product view template 
     include 'default_view.php'; 

} 

// anything else you need to do that isnt done in the view specific file 

現在一切都假定這些都是具體的產品,但你的例子聽起來更像類別。通常情況下,您將擁有一個與產品完全相同的類別的單獨頁面,但以某種視覺方式輸出產品實體的「集合」。

+0

''type''會成爲數據庫中的表名嗎?此代碼是否也適用於顯示我所有產品的頁面? – Luffy

+0

使用上面的示例,'type'將是'product'表中的一個列名。就個人而言,我不會使用類型,我會使用像'view'或'template'這樣的單獨字段,並將名稱映射到'the_name.php'。這使您可以更改模板,以便將產品與實際產品類型分開輸出,而實際產品類型最有可能具有語義意義。 – prodigitalson

+0

如果您在一個頁面上顯示所有產品,您爲什麼會在第一時間同時使用'product.php'和'itemview.php'?事實上,你有兩頁意味着至少有兩種不同類型的項目(至少從外觀的角度來看),並且你想單獨顯示它們...... – prodigitalson