精華區beta PHP 關於我們 聯絡資訊
我現在 再做權限設定的部分 參考網路上的做法是用 邏輯運算去做 就是 有查 新 修 刪 4個權限 分別對映到 1 2 4 8 如果只有查 就是存1 有查跟新 就是1+2=3 以此類推... $c=4 作檢查的時候就用 if($_SESSION["auth"]&$c==4) 去做檢查 如果Session=1 作出來的結果應該是0才對 而不是4 但我作出來卻是4... 運算出來的結果都不對 難道不能這樣作嗎? 我都是用10進位 我之前作checkbox也是用這個方法 但是那時都是正確的 作權限檢查就給我出錯.. 實在想不出來錯在哪裡....只好上來發問 請大家幫幫忙... 0100 and 0001 __________ 0000 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 211.20.201.205 ※ 編輯: vivi50218 來自: 211.20.201.205 (01/10 14:36) ※ 編輯: vivi50218 來自: 211.20.201.205 (01/10 14:36)
flamerecca:用echo大法檢查吧 看看你實際到底比較了哪兩個數字 01/10 14:40
vivi50218:值是對的阿.. echo 出來是1 跟 4 .... 01/10 14:50
richile0819:應該用&&罷 01/11 10:44
bobju:你若對運算符的優先順序不確定,最好還是用小括號 01/12 11:44
> -------------------------------------------------------------------------- < 作者: gpmm (銀色) 看板: PHP 標題: Re: [請益] 關於PHP 邏輯運算 (and,or) 時間: Thu Jan 10 14:44:32 2013 ※ 引述《vivi50218 (vivi)》之銘言: : 我現在 再做權限設定的部分 參考網路上的做法是用 邏輯運算去做 : 就是 有查 新 修 刪 4個權限 分別對映到 1 2 4 8 : 如果只有查 就是存1 有查跟新 就是1+2=3 以此類推... : $c=4 : 作檢查的時候就用 if($_SESSION["auth"]&$c==4) 去做檢查 : 如果Session=1 作出來的結果應該是0才對 而不是4 但我作出來卻是4... : 運算出來的結果都不對 難道不能這樣作嗎? 我都是用10進位 : 我之前作checkbox也是用這個方法 但是那時都是正確的 作權限檢查就給我出錯.. : 實在想不出來錯在哪裡....只好上來發問 請大家幫幫忙... : 0100 : and 0001 : __________ : 0000 // 定義權限 define ('_SELECT', 0x001); define ('_INSERT', 0x002); define ('_UPDATE', 0x004); define ('_DELETE', 0x008); // 使用者持有的權限 $userAuth = _SELECT | _INSERT | _UPDATE | _DELETE; // 權限判定 if ($userAuth & _SELECT) { } if ($userAuth & _INSERT) { } -- 列出我平常用的方式,你參考看看 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 175.180.111.33
PTTLSboy:請問一下0x001裡的x代表什麼呢?? 01/13 02:18
gpmm:0x 代表這是 16 進位 :P 01/13 22:10
> -------------------------------------------------------------------------- < 作者: flamerecca (werewolf) 看板: PHP 標題: Re: [請益] 關於PHP 邏輯運算 (and,or) 時間: Thu Jan 10 14:50:08 2013 ※ 引述《gpmm (銀色)》之銘言: : // 定義權限 : define ('_SELECT', 0x001); : define ('_INSERT', 0x002); : define ('_UPDATE', 0x004); : define ('_DELETE', 0x008); : // 使用者持有的權限 : $userAuth = _SELECT | _INSERT | _UPDATE | _DELETE; : // 權限判定 : if ($userAuth & _SELECT) { : } : if ($userAuth & _INSERT) { : } 這是比較正確的寫法 不過我嘗試他的寫法也沒錯說? 用 http://writecodeonline.com/php/ 試跑 ==script== $a = '1'; echo $a.'<br />'; $b = 4; echo $b.'<br />'; $c = $a & $b; echo $c.'<br />'; if($c){echo 'aaa'.'<br />';} if($a&$c==4){echo 'bbb'.'<br />';} ==output== 1 4 0 應該是其他地方寫錯? -- To iterate is human, to recurse is divine. -- L. Peter Deutsch -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.36.235.231
gpmm:有可能,我懶得測 code XD 推一個 f 大超用心 01/10 14:52
vivi50218:其他地方沒錯阿 我是把判斷寫在最前面 這個方法是一定可 01/10 14:52
vivi50218:以 因為我已經這樣作很久了... 但是就是不知道 為什麼 01/10 14:52
vivi50218:突然間出錯了.... 01/10 14:52
> -------------------------------------------------------------------------- < 作者: gpmm (銀色) 看板: PHP 標題: Re: [請益] 關於PHP 邏輯運算 (and,or) 時間: Thu Jan 10 14:53:11 2013 : -- : ※ 發信站: 批踢踢實業坊(ptt.cc) : ◆ From: 211.20.201.205 : ※ 編輯: vivi50218 來自: 211.20.201.205 (01/10 14:36) : ※ 編輯: vivi50218 來自: 211.20.201.205 (01/10 14:36) : 推 flamerecca:用echo大法檢查吧 看看你實際到底比較了哪兩個數字 01/10 14:40 : → vivi50218:值是對的阿.. echo 出來是1 跟 4 .... 01/10 14:50 我猜是這個問題 if($_SESSION["auth"]&$c==4) if(($_SESSION["auth"]&$c)==4) 你試試看 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 175.180.111.33
flamerecca:我弄出來了 超級有趣XD 01/10 14:56
vivi50218:解決了 ...真的是這樣 看來我功力還太淺= = 感謝 01/10 14:56
vivi50218:給你一個讚 01/10 14:56
gpmm:腦袋閃過…亂猜猜到了 XDD 01/10 14:57
flamerecca:以後不要這樣節省code~ 會有奇怪的bug出現 01/10 14:59
vivi50218:但這也太詭異了吧 我之前從資料庫抓值 用$row["xxx"] 01/10 14:59
vivi50218:不用加括號也是對的.. 01/10 15:00
jaceju:優先權 == 比 & 高。PHP 官方手冊:http://goo.gl/HBvpY 01/15 14:48
jaceju:嗚,底下 gpmm 有回應了,我多回 = = 01/15 14:49
> -------------------------------------------------------------------------- < 作者: vivi50218 (vivi) 看板: PHP 標題: Re: [請益] 關於PHP 邏輯運算 (and,or) 時間: Thu Jan 10 15:16:50 2013 另外我還想問個問題 就是為什麼不能這樣用呢 $a = 1; $b = 4; if($a&4==0) 這個是不成立的 if($a&$b==0) 成立 但$c=$a&4; 出來的結果是$c=0 if裡面不能直接用數字 只能用變數 意思不一樣嗎?.. 這問題我很早就發現了..但我後來改用變數解決就沒去管他 剛好趁個機會問一問... +-*/ 卻是可以直接加數字 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 211.20.201.205 ※ 編輯: vivi50218 來自: 211.20.201.205 (01/10 15:19) > -------------------------------------------------------------------------- < 作者: flamerecca (werewolf) 看板: PHP 標題: Re: [請益] 關於PHP 邏輯運算 (and,or) 時間: Thu Jan 10 15:49:39 2013 ※ 引述《vivi50218 (vivi)》之銘言: : 另外我還想問個問題 : 就是為什麼不能這樣用呢 : $a = 1; : $b = 4; : if($a&4==0) 這個是不成立的 : if($a&$b==0) 成立 : 但$c=$a&4; 出來的結果是$c=0 : if裡面不能直接用數字 只能用變數 意思不一樣嗎?.. : 這問題我很早就發現了..但我後來改用變數解決就沒去管他 剛好趁個機會問一問... : +-*/ 卻是可以直接加數字 應該是電腦解讀你這段程式順序的問題 加上括弧之前 電腦是這樣解讀的: if($a&(4==0)) 所以不成立 === 個人意見是不要寫這種程式 好好的分開寫就好XD 用g板有的寫法不是很乾淨嗎XD -- 卍~卍~卍~卍~卍~卍~ 嘉察仁波切《聽即解脫咒》 ~卍~卍~卍~卍~卍~卍 ★Ah Ah Sha Sa Ma Ha ★阿 阿 夏 沙 嘛 哈 ★Ma Ben Dharma Ra Ra ★嘛 北 當 嘛 RA RA ★Ha Gan Ga Ah Sha La ★哈 港 嘎 阿 夏 拉 ★Sa Den Dharma Da Li ★沙 殿 當 嘛 達 哩 ★Ga Ha Na Ah Li Ta ★嘎 哈 哪 阿 哩 答 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.36.235.231 > -------------------------------------------------------------------------- < 作者: gpmm (銀色) 看板: PHP 標題: Re: [請益] 關於PHP 邏輯運算 (and,or) 時間: Thu Jan 10 16:44:40 2013 ※ 引述《vivi50218 (vivi)》之銘言: : 另外我還想問個問題 : 就是為什麼不能這樣用呢 : $a = 1; : $b = 4; : if($a&4==0) 這個是不成立的 : if($a&$b==0) 成立 : 但$c=$a&4; 出來的結果是$c=0 : if裡面不能直接用數字 只能用變數 意思不一樣嗎?.. : 這問題我很早就發現了..但我後來改用變數解決就沒去管他 剛好趁個機會問一問... : +-*/ 卻是可以直接加數字 我不確定你指出的部份是有哪些因素影響造成(其實是我懶的仔細看… orz) 但是你可以參考以下這份官方說明 http://php.net/manual/en/language.operators.precedence.php 這裡有所有 operator 的優先順序, 另外,我覺得陳述句盡可能寫的清楚明瞭,該加括弧就加, 除了避免解讀錯誤外,同時更能降低讀 code(無論是自己或其他人)的辨識負擔。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 175.180.111.33 ※ 編輯: gpmm 來自: 175.180.111.33 (01/11 11:06)