> 백엔드 개발 > PHP 튜토리얼 > 此帖有贡献回答共献出500分,无贡献回答献100分。

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

WBOY
풀어 주다: 2016-06-23 13:43:31
원래의
967명이 탐색했습니다.

系统: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

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

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

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿