iT邦幫忙

0

如何在PHP5的架構裡實現不同登入帳號呈現不同內容

  • 分享至 

  • xImage

如題
有個想法但不知道可不可行
原本的寫法是每一個呈現的樣子都寫一個IF包住,判斷到登入的帳號呈現他的樣子
不過這寫法到最後會越來越長而且也很難維護
目前的想法是二維陣列放資料
X放帳號
Y放呈現的資料代號
用FOR去跑陣列,判斷SWITCH符合Y就呈現該資料
只是Y的資料量不一定,隨著不同的X有不同的資料
後續的帳號會越來越多
怕每一次進來都要跑兩層FOR會炸掉
想請問各位大大有沒有什麼更好的建議

看更多先前的討論...收起先前的討論...
wiseguy iT邦超人 1 級 ‧ 2022-10-25 15:24:46 檢舉
你這問題,可能害站上一堆專家大師們一下子都嚇傻了,懷疑你是不是第一天寫程式。沒人程式這麼寫的。
你的描述,就是一個資料庫 Table 就能解決的事。帳號是 key,資料是 value,這樣就能無限個帳號對應無限個資料。程式只須看誰登入,用他的帳號去 select,一個SQL指令就能抓到專屬這個帳號的資料,不須陣列也不須For,這個方案 Got it ?
wiseguy iT邦超人 1 級 ‧ 2022-10-25 15:36:48 檢舉
即便不使用資料庫,也可以為每個帳號開一個檔案來放專屬這個帳號的資料。程式一樣只須看誰登入,就把這個檔案內容顯示出來即可。Big O = 1,就不會有你擔心的帳號越多耗時越久的問題。不過檔案會有 race condition 問題,還是資料庫會比較優。
chukai iT邦新手 5 級 ‧ 2022-10-25 16:10:56 檢舉
剛入職,看到前輩長長的php,只想著可以怎麼維護,也不敢亂問
不過看了您的辦法後茅塞頓開,也大概知道怎麼做了,謝謝
感覺貴公司的資安是個很可怕的破口!且提出重構 & 升級建議, 除非薪水優渥, 或者你需要累積資歷, 不然...能逃快逃!
不知道最後樓主(公司)用了什麼方案?只是最近偶爾對小系統用檔案資料庫做過渡也還能接受
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

1
chan15
iT邦新手 2 級 ‧ 2022-10-26 09:10:09

你的解法根本用不到程式的方便之處,因為你這樣等於手刻所有的結果,跟單純寫 html 沒什麼差別,思維上是根據不同的 id 取得不同的內容,所以程式這邊要做的只有根據不同的 id 取得不同的內容這件事而已,而取得不同的內容有很多方法。

(1) 資料庫:
把使用者帳號跟他需要的結果存到資料庫,利用資料庫內的資料呈現。

(2) 實體檔案:
一般來說如果你沒有資料庫,那會把需要分門別類的資料放在不同的檔案比較好管理,像是:

data/lucy.php
data/chan.php

根據登入名稱去取對應的資料,裡面可能會長成這樣:

return [
    "realname": "chan",
    "tel": 0912345678
];

但我覺得各家的 list 或是 array 都不算很好維護,會蠻推薦改成 yaml:

data/chan.yaml

"realname": "chan"
"tel": 0912345678

然後再用各家語法解析 yaml,PHP 的話推薦 symfony/yaml,養成這個習慣的話資料要轉換語言使用都蠻方便的,但還是推薦資料庫最好啦,在怎樣 sqlite 應該也可以用才對。

chukai iT邦新手 5 級 ‧ 2022-10-26 11:27:34 檢舉

因為前輩目前才5組帳號就快兩千列了,而且幾乎都是做同樣的事,所以我才想說看能不能把程式簡化,但是又考慮到以後帳號會越來越多,空間時間會有問題
加上公司的PHP還在5基本上前輩們也不建議升級,但是有資料庫,前面wiseguy的方法我覺得還不錯,以後到我的時候會試著用用看,也謝謝您提供方法

我要發表回答

立即登入回答