2012-05-08 26 views
1

我是一名學習PHP和MySQL的高中學生。我正在嘗試創建一個簡單的照片共享網站,允許用戶註冊並開始上傳圖片。每個用戶都有一個顯示其所有照片的配置文件。簡單的照片分享網站:如何爲多個用戶及其照片構建MySQL數據庫

我現在只有一個表,被稱爲「用戶」:用戶名,電子郵件,密碼

我應該如何建立一個表的照片?我如何鏈接到每張圖片的文件路徑?

謝謝

回答

1

第一個問題是你在哪裏存儲用戶的照片?我會推薦這:

Table (User's): 
Username | Password | Email 
--------------------------- 
user1 | fdgfdg | fdfgdf 
user2 | ffdgfd | fgdfgf 
user3 | dgfdgg | fgdgdd 

然後,每當一個用戶註冊,創建與該用戶的名字和一個子目錄名爲照片的文件夾。

爲每個用戶創建一個表。

Table user1 
Photo  | Title | info 
---------------------------- 
duck.jpg | My Duck! | fgdf 
cat.png | Le Cat | dfgd 

然後,當用戶登錄時,列出所有標題並將它們動態鏈接到照片。

所以我會

My Duck --> http://mysite.com/user1/photos/myduck.jpg 

下用戶1將登錄的用戶名,照片會自動添加和myduck.jpg會從數據庫中拉出。

但是,這會打開兩個洞: - 盜鏈 - 如果有人知道用戶名和照片標題,他們可以在未獲得許可的情況下訪問照片。

+0

不要爲每個用戶創建一個表,這不是良好的數據庫設計。以第三種正常形式閱讀。你不應該在每次用戶註冊時創建新表格 – bumperbox

+0

我意識到這不是一個好的設計,而且我也不會在網絡應用程序中使用它,但他是一個初學者,所以我認爲這會更簡單/更簡單執行。 – citruspi

3

在user表創建一個名爲ID列(這應該不會改變) 您通常使用類似的INT AUTOINCREMENT號這使數據庫自動分配它,這應該被標記爲PRIMARY KEY

創建一個表名爲照片

Table photos 
Id = autoincrement primary key 
UserID = int (you can set this up as a foreign key, but to keep it simple, just make it indexed) 
Title = varchar 
Info = varchar 
Filename = varchar 

Table Photos 
Id  | UserId | Title | info | Filename | (add other columns to suit) 
------------------------------------------------------------ 
1  | 1  | Duck  | xyz | duck.jpg | 
2  | 1  | Cat  | xyz | cat.jpg | 
3  | 2  | Mouse | xyz | mouse.jpg | 

你可以從數據中看到上述 照片1和2都屬於用戶1 和照片3屬於用戶2

要選擇所有照片的用戶名「鮑勃」,你會做這樣的事情

SELECT Photos.Id, Photos.Filename 
FROM Photos 
JOIN Users ON Photos.UserId=Users.Id 
WHERE Users.username = 'bob'