Heim  >  Artikel  >  Backend-Entwicklung  >  此帖有贡献回答共献出500分,无贡献回答献100分。

此帖有贡献回答共献出500分,无贡献回答献100分。

WBOY
WBOYOriginal
2016-06-23 13:43:31927Durchsuche

系统: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 或者全局变量之类。

<?require '../bbs/source/class/class_core.php';//引入系统核心文件$discuz = C::app();$discuz->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 "登录失败";}?>
像这个  为什么不对?    

但是如果按照常规的方法写,又是对的:

<?require '../bbs/source/class/class_core.php';//引入系统核心文件$discuz = C::app();$discuz->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()里面也执行了这个操作,可以没有,直接执行setloginstatus	dsetcookie('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()里面也执行了这个操作,可以没有,直接执行setloginstatus	dsetcookie('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

请到这两个帖接分,谢谢    这个贴使命完成,提前结束。

此帖已经结束使命,虽然还有个问题,但主题不和,另开一帖为好。

请两位大神到回复的地址领取分数,致谢!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn