系統: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
請到這兩個帖接分,謝謝 這個貼使命完成,提前結束。
此帖已經結束使命,雖然還有個問題,但主題不和,另開一帖為好。
請兩位大神到回複的地址領取分數,致謝!