本教程假定您熟悉我的文章: 如何手动插入用户的单模光纤论坛使用PHP 。
最近,我面临的挑战是移动800左右乐队从数据库到单模光纤论坛。 本人面临几个问题的动议时,我并不包括在第一篇文章:
- 乐队的名字是不能保证是安全的一个字符的字符进入单模光纤数据库。 因此,某种形式的名称修改功能已被雇用。
- 乐队没有密码。 因此,某些类型的密码生成需要就业。
我去的步骤关于注册的所有频段的论坛去有点像这样:
打开带数据库
每个 (带) (
生成密码
重命名带“安全”的名称
抓斗并生成所需的信息插入用户
插入乐队到smf_members
发送带电子邮件与密码
)
信息我可以从带的数据库,是有益的包括: bandName , bandEmail ,并bandWebsite
这是密码生成功能我用( blatently取自totallyphp.co.uk ) :
功能 createRandomPassword ( ) (
$字符= “ abcdefghijkmnopqrstuvwxyz023456789 ” ;
() * 1000000); srand ( (双) microtime中 ( ) * 1000000 ) ;
$为I = 0 ;
$传球= “ ;
而 ( $字母i “ = 7 ) (
33; $ num个= 兰特 ( ) % 33 ;
$ tmp的= substr ( $字符, $ num个, 1 ) ;
$传球= $通行证。 $ tmp的;
$一+ + ;
)
返回 $通过;
)
在这里创建的密码相对薄弱,但它不够好我的目的。 任何密码生成功能将罚款这里。 我选择了这一个,因为它很容易记住的成员,如果他们选择不改变它。
如何做到这一点:
/ /第一次连接到数据库的乐队
$用户名= “ bandUsername ” ;
$东道国= “ bandHost ” ;
$ mypassword = “ bandPassword ” ;
$ db_name = “ bandDatabase ” ;
("cannot connect to server"); mysql_connect ( “ $主机” , “ $的用户名” , “ $ mypassword ” ) 或死亡 ( “无法连接到服务器” ) ;
("cannot select DB"); mysql_select_db ( “ $ db_name ” ) 或死亡 ( “不能选择数据库” ) ;
/ /现在抓斗所有乐队从数据库
$查询= “选择*从allBands ” ;
$带= mysql_query ( $查询)或死亡( “配置错误2222b ” ) ;
$ userRows = mysql_num_rows ( $带) ;
/ /现在可以连接到光纤分贝
$东道国= “ smfhost ” ; / /主机名称
$用户名= “ smfuser ; / /数据库用户名
$ mypassword = “ smfpassword ” ; / /数据库密码
$ db_name = “ smfdatabase ” ; / /数据库名称
("cannot connect to server"); mysql_connect ( “ $主机” , “ $的用户名” , “ $ mypassword ” ) 或死亡 ( “无法连接到服务器” ) ;
("cannot select DB"); mysql_select_db ( “ $ db_name ” ) 或死亡 ( “不能选择数据库” ) ;
/ / $ vaild_chars将成为一系列允许字符的用户名。 我决定只允许字母和数字。 还有其他的字符,可用于这不会造成问题,但风格的原因,我决定去,只有字母和数字
$ valid_chars = “ abcdefghijklmnopqrstu vwxyz 0 1 2 3 4 5 6 7 8 9 ” ;
$ valid_chars = 爆炸 ( “ ” , $ valid_chars ) ;
/ /现在我们需要遍历每个波段
){ 为 ( $为I = 0 ; $字母i “ $ userRows ; $一+ + ) (
($bands)){ 如果 ( $行= mysql_fetch_assoc ( $乐队) ) (
/ /解带信息
提取物 ( $行) ;
/ /创建一个密码,并为这个乐队
$ realPassword = createRandomPassword ( ) ;
/ /我选择响应bandname和密码的一部分,我的调试,所以我可以看到的功能,因为它的作品
回声 ( “ <br/> $ bandName - $ realPassword ” ) ;
$ newBand = “ ” ;
/ /对于每个信乐队名字我们要看看,看它是否符合有效的字符为valid_chars 。 这不,我们要摆脱它和截断乐队名称
($bandName); $j ++ ){ 为 ( $ j = 0 ; $ j “ strlen ( $ bandName ) ; $ J + +的 ) (
($band[$j])); $气温= str_replace ( $ valid_chars , “ X ”号, 用strtolower ( $波段[ $ j ] ) ) ;
如果 ( $气温==的“ X ” )
$ newBand = $ newBand 。 $波段[ $ j ] ;
)
/ /我同意的新名称相同的原因,我回声旧名称和密码
回声 ( “ - $ newBand ” ) ;
/ /我们有新乐队的名字... 。 现在让我们先大厦的信息,我们需要插入分贝...
$ memberName = $ newBand ;
$实名= $ newBand ; / /我的真实姓名和会员的名字相同。 乐队可以改变,如果他们想
$电子邮件地址= $ bandEmail ;
$ websiteUrl = $ bandWebsite ; / /由于我带的网站也可能将它们输入
$ websiteTitle = $ newBand ;
$ is_activated = 1 ;
$ ID_POST_GROUP = 4 ;
($memberName).$realPassword); //Password must be encrypted $密码= sha1 ( 用strtolower ( $ memberName ) 。 $ realPassword ) ; / /密码必须加密
/ /确保他们不是会员具有相同名称的单模光纤数据库。 我们不希望任何人不小心输入两次
$查询= “选择*从smf_members在哪里memberName = ' $ memberName ' ” ;
("Config Error 2222343242b"); $结果= mysql_query ( $查询) 或死亡 ( “配置错误2222343242b ” ) ;
$ nrows = mysql_num_rows ( $结果) ;
/ /如果发现会员名称是什么也不做
如果 ( $ nrows “ 0 ) ( )
其他(
/ /如果用户是不是已经注册了论坛,这样做并发送电子邮件... 。
$查询= “插入smf_members ( memberName ,实名,电子邮件地址, is_activated , ID_POST_GROUP ,密码, websiteUrl , websiteTitle )值( ' $ memberName ' , ' $实名' , ' $电子邮件地址' , ' $ is_activated ' , ' $ ID_POST_GROUP ' , ' $密码' , ' $ websiteUrl ' , ' $ websiteTitle ' ) “ ;
("Config Error 2232 "); $结果= mysql_query ( $查询) 或死亡 ( “配置错误2232 ” ) ;
/ /现在我们需要发送的电子邮件乐队
$到= $电子邮件地址;
$主题= “您的论坛用户名和密码” ;
/ /从
$标题= “来自:我<me@mysite.com> ” ;
/ /您的邮件
$消息.= “您的登录名和密码,下面列出。您可以随时更改。如果你不想参加我们的论坛,这是没有问题的。从未登录,它就会像没有什么事。 \ r \ N “的;
$消息.= “用户名: $ memberName密码: $ realPassword \ r \ N ”的;
/ /发送电子邮件
邮件寄出= $ ( $到, $主题, $消息, $头) ;
如果 ( $寄出)
回声 ( “ -是的! ” ) ;
/ /这是最后一部分,我们的回声。 的“是! ” 将只印刷如果一封电子邮件被发送。 因此,充分打印的生产线将是这个样子:
/ /亚当争- 4s6vsxag - AdamStrife -是!
)
)
)