Demon666 寫:To yuankuei大大
我照著您的code修改,,,成功了,,真是太帥了,,不過後面發生一個問題,就是訪客點選文章後進入登入的畫面,輸入帳號密碼後理論上應該會看到之前點選的文章, 可是卻出現文章不存在的資訊,我用test帳號到您的Demo論壇上也是發生這種狀況....不知道是否有辦法可以修改呢?....謝謝
我只是一個稍微懂程式的小人物罷了..
既然是看文章的時候出現錯誤..
那就往 viewtopic.php 來找找看問題在哪裡..
1. 修改方式:
打開 viewtopic.php,尋找\r
[php]//
// Start auth check
//
$is_auth = array();
$is_auth = auth(AUTH_ALL, $forum_id, $userdata, $forum_topic_data);
if( !$is_auth['auth_view'] || !$is_auth['auth_read'] )
{
if ( !$userdata['session_logged_in'] )
{
$redirect = ( isset($post_id) ) ? POST_POST_URL . "=$post_id" : POST_TOPIC_URL . "=$topic_id";
$redirect .= ( isset($start) ) ? "&start=$start" : '';
redirect(append_sid("login.$phpEx?redirect=viewtopic.$phpEx&$redirect", true));
}
$message = ( !$is_auth['auth_view'] ) ? $lang['Topic_post_not_exist'] : sprintf($lang['Sorry_auth_read'], $is_auth['auth_read_type']);
message_die(GENERAL_MESSAGE, $message);
}
//
// End auth check
//[/php]
找出其中一段..
[php]$redirect = ( isset($post_id) ) ? POST_POST_URL . "=$post_id" : POST_TOPIC_URL . "=$topic_id";[/php]
改成
[php]$redirect = ( $post_id ) ? POST_POST_URL . "=$post_id" : POST_TOPIC_URL . "=$topic_id";[/php]
去掉 isset() 這個函數..
2. 原因:(不想看廢話請跳過

)
仔細看看權限不足而被要求登入的時候,網址列上面的內容..
代碼: 選擇全部
http://abc.com/phpbb/login.php?redirect=viewtopic.php&[color=red]p=0[/color]&start=0
p 這個參數是告訴程式去找一個主題裡面的一篇文章.. (傳到程式裡面變成 $post_id 這個變數)
---------
譬如當我們按下跳到最新發表文章的小圖,就會直接跳到那篇文章..
而不用再把整個主題看過一遍..
---------
p=0 當然會找不到這個段落..所以顯示文章不存在..
這一段程式碼是判斷閱讀文章的使用者權限夠不夠..
$redirect 變數是設定登入之後,應該要重新導向到哪一個地方去..
isset() 這個函數的功能是判斷變數存不存在..
但奇怪的是,這一個檔案的開頭就宣告 $post_id = 0;
這麼一來,萬一沒有給 $post_id 值,還是會被導向 p=0 的那一頁
所以把 isset() 函數去除,直接判斷 $post_id 的值是不是大於零\r
哎呀..好像講得太複雜
這算是 phpBB 的一個 bug 嗎??
