此帖有貢獻回答共獻出500分,無貢獻回答獻100分。

來源:互聯網
上載者:User
系統:discuz3.2版本

我需要些一些sql,查詢discuz的資料表,擷取文章、會員及其各項資料等等資訊。除了查詢,還包括寫入、更新這些操作。

當然不是簡單的資料庫連接,需要和discuz他自己的規則對上。

舉個實在的例子:
discuz程式我安裝在bbs檔案夾裡面,這時我在檔案夾外面寫個menberinfo.php 通過這個php上登入框,我可以登入,擷取自己的會員資訊,然後進入論壇bbs,裡面的也登入上了。


只能加100分,能解決了再給貢獻大者逐一送分。


清倉大甩賣了,大家快來了


回複討論(解決方案)

http://bbs.csdn.net/topics/390896551#post-398264470
menberinfo.php

require_once './bbs/source/class/class_core.php';//根目錄下C::app()->init();/*基礎操作DB::insert(),DB::update(),DB::query(),DB::delete()*/

http://bbs.csdn.net/topics/390896551#post-398264470
menberinfo.php

require_once './bbs/source/class/class_core.php';//根目錄下C::app()->init();/*基礎操作DB::insert(),DB::update(),DB::query(),DB::delete()*/

主要兩個問題,一個是下面這些的用法,一個是如何將結果儲存session 或者全域變數之類。

init();$name=$_POST['name'];$pw=md5(md5($_POST['pw']));$count = DB::result(DB::query("select uid from md_common_member where username=$name and password=$pw"), 0);if($count){ global  $_G; $arr=array(); $_G=$arr['uid']; echo "登入成功";}else{echo "登入失敗";}?>
像這個 為什麼不對?

但是如果按照常規的方法寫,又是對的:

init();$name=$_POST['name'];$pw=md5(md5($_POST['pw']));$connect=mysql_pconnect("localhost","root","1234");if(!mysql_select_db('xxx',$connect))die("資料庫連接失敗!");$sql="SELECT count(*) FROM md_common_member WHERE username='$username' and password='$pw'";$res = mysql_query($sql);//執行查詢語句$row=mysql_fetch_assoc($res);if($row['uid']){ global  $_G;$_G=$row['uid']; echo "登入成功";}else{echo "登入失敗";}?>


當然只是語句無誤,這裡弱弱問一句,discuz是怎麼加密的呢?

$user='管理員';//郵箱或者暱稱$pwd=md5(123456);if(strlen($user) > 6 && strlen($user) <= 32 && preg_match("/^([A-Za-z0-9\-_.+]+)@([A-Za-z0-9\-]+[.][A-Za-z0-9\-.]+)$/", $user)){//郵箱登入$uc=DB::fetch_first('SELECT uid,email,username,password,salt FROM %t WHERE '.DB::field("email",$user),array('ucenter_members'));}else{//暱稱登入$uc=DB::fetch_first('SELECT uid,email,username,password,salt FROM %t WHERE '.DB::field("username",$user),array('ucenter_members'));}$pwd=md5($pwd.$uc['salt']);if($pwd===$uc['password']){//登入成功//驗證的密碼是pre_ucenter_members表中的password欄位,它是由使用者密碼md5後加上salt欄位(註冊時隨機產生的)再md5產生的}else{//失敗}//你也可以引入ucenter進行登入//調用之前,你需要loaducenter();才可以使用uc_user_login//參考http://faq.comsenz.com/library/UCenter/interface/interface_user.htm

$user='管理員';//郵箱或者暱稱$pwd=md5(123456);if(strlen($user) > 6 && strlen($user) <= 32 && preg_match("/^([A-Za-z0-9\-_.+]+)@([A-Za-z0-9\-]+[.][A-Za-z0-9\-.]+)$/", $user)){//郵箱登入$uc=DB::fetch_first('SELECT uid,email,username,password,salt FROM %t WHERE '.DB::field("email",$user),array('ucenter_members'));}else{//暱稱登入$uc=DB::fetch_first('SELECT uid,email,username,password,salt FROM %t WHERE '.DB::field("username",$user),array('ucenter_members'));}$pwd=md5($pwd.$uc['salt']);if($pwd===$uc['password']){//登入成功//驗證的密碼是pre_ucenter_members表中的password欄位,它是由使用者密碼md5後加上salt欄位(註冊時隨機產生的)再md5產生的}else{//失敗}//你也可以引入ucenter進行登入//調用之前,你需要loaducenter();才可以使用uc_user_login//參考http://faq.comsenz.com/library/UCenter/interface/interface_user.htm

最後一個問題了,登入後如何賦值給全域變數,更新session。

看了參考文檔,水平有限,看不明白。

$uid=1;//使用者uid$cookietime = 31536000;if(($member = getuserbyuid($uid, 1))) {//這個設定後,本網站就是登入狀態了,其實下面的setloginstatus()裡面也執行了這個操作,可以沒有,直接執行setloginstatusdsetcookie('auth', authcode("$member[password]\t$member[uid]", 'ENCODE'), $cookietime);}require_once libfile('function/member');//設定後,可以用$_G['uid'],$_G['username']...擷取使用者資訊,session和統計也在裡面執行了setloginstatus($member, $cookietime);//若是有其他網站應用程式,要執行下面的同步登陸if($_G['setting']['allowsynlogin']) {loaducenter();//將$ucsynlogin輸出到網頁上,執行同步登陸$ucsynlogin = uc_user_synlogin($uid);}//更新使用者狀態,TIMESTAMP,discuz的時間常量C::t('common_member_status')->update($uid, array('lastip' => '', 'lastvisit' =>TIMESTAMP, 'lastactivity' => TIMESTAMP));

可以用ucenter實現,前提是需要在Ucenter裡面要增加一個應用






官方有個demo,關於登陸,登出,擷取使用者資訊,收發短訊息。
見:
http://faq.comsenz.com/library/UCenter/example/example_index.htm
demo下載:
http://faq.comsenz.com/library/UCenter/example/examples.zip

下載後解壓,放到任意可以訪問到的網站目錄中,把你論壇中的uc_client複製到,demo的根路徑中。
再配置一下demo中的config.inc.php,與ucenter中的一樣就可以。

下面運行效果:










可以用ucenter實現,前提是需要在Ucenter裡面要增加一個應用






官方有個demo,關於登陸,登出,擷取使用者資訊,收發短訊息。
見:
http://faq.comsenz.com/library/UCenter/example/example_index.htm
demo下載:
http://faq.comsenz.com/library/UCenter/example/examples.zip

下載後解壓,放到任意可以訪問到的網站目錄中,把你論壇中的uc_client複製到,demo的根路徑中。
再配置一下demo中的config.inc.php,與ucenter中的一樣就可以。

下面運行效果:







http://bbs.csdn.net/topics/390952723 請到這裡接分

$uid=1;//使用者uid$cookietime = 31536000;if(($member = getuserbyuid($uid, 1))) {//這個設定後,本網站就是登入狀態了,其實下面的setloginstatus()裡面也執行了這個操作,可以沒有,直接執行setloginstatusdsetcookie('auth', authcode("$member[password]\t$member[uid]", 'ENCODE'), $cookietime);}require_once libfile('function/member');//設定後,可以用$_G['uid'],$_G['username']...擷取使用者資訊,session和統計也在裡面執行了setloginstatus($member, $cookietime);//若是有其他網站應用程式,要執行下面的同步登陸if($_G['setting']['allowsynlogin']) {loaducenter();//將$ucsynlogin輸出到網頁上,執行同步登陸$ucsynlogin = uc_user_synlogin($uid);}//更新使用者狀態,TIMESTAMP,discuz的時間常量C::t('common_member_status')->update($uid, array('lastip' => '', 'lastvisit' =>TIMESTAMP, 'lastactivity' => TIMESTAMP));



http://bbs.csdn.net/topics/390952720

http://bbs.csdn.net/topics/390952721

請到這兩個帖接分,謝謝 這個貼使命完成,提前結束。

此帖已經結束使命,雖然還有個問題,但主題不和,另開一帖為好。

請兩位大神到回複的地址領取分數,致謝!

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.