Home > Article > Backend Development > 此帖有贡献回答共献出500分,无贡献回答献100分。
系统: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 "登录失败";}?>
$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中的一样就可以。
下面运行效果:
$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));
此帖已经结束使命,虽然还有个问题,但主题不和,另开一帖为好。
请两位大神到回复的地址领取分数,致谢!