如何手动插入一组用户到单模光纤使用PHP论坛

张贴于单模光纤(简单机械论坛) , PHP的由ShortLikeAFox对08年七月30日

本教程假定您已熟悉我的帖子: 如何手动将用户的单模光纤用PHP论坛

我最近面临的挑战是移动800或带从数据库到单模光纤的论坛。 俺一对夫妇面临的问题时,搬迁,我并不包括在第一篇文章:

  1. 该乐队的名字不能保证是安全的一个字符的字符进入单模光纤数据库。 因此某种形式的名称修改功能已被雇用。
  2. 乐队没有密码。 因此,某些类型的密码生成需要就业。

这些步骤约我去登记的所有频段的论坛去有点像这样:

打开带数据库

每个 (带) (

生成密码

重命名带“安全”的名称

抓斗和创造必要的信息,插入用户

带插入到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 -$ r ealPassword” ) ;
$ newBand = “ ” ;
/ /对于每个信乐队的名字我们要看看,看看它是否符合有效的字符valid_chars美元。 这不,我们要摆脱它,并截断乐队名称
($bandName); $j ++ ){ ( $ j = 0 ; $ j “ strlen ( $ bandName ) ; $ J + +的) (

($band[$j])); $气温= str_replace ( $ valid_chars , “ X ”的, strtolower ( $乐队[ $ j ] ) ) ;
如果 ( $气温==的“ X ” )

$ newBand = $ newBand 。波段$ [ $ j ] ;


/ /我同意的新名称相同的原因,我回声旧名称和密码
回声 ( “ -$ n ewBand” ) ;
/ /我们有新的乐队的名字... 。 现在让我们开始buliding的信息,我们需要插入分贝...
$ memberName = $ newBand ;
$ realName = $ newBand ; / /我的真实姓名和成员的名字相同。 乐队可以改变,如果他们想
$电子邮件地址= $ bandEmail ;
$ websiteUrl = $ bandWebsite ; / /自从我的乐队的网站也可能将它们输入
$ websiteTitle = $ newBand ;
$ is_activated = 1 ;
$ ID_POST_GROUP = 4 ;
($memberName).$realPassword); //Password must be encrypted $密码= sha1strtolower ( $ memberName ) 。 $ realPassword ) ; / /密码必须加密

/ /请确保其成员国的不是同一名称的单模光纤的数据库。 我们不希望任何人不小心输入的两倍
$查询= “选择*从smf_members哪里memberName = ' $ memberName ' ” ;
("Config Error 2222343242b"); $结果= mysql_query ( $查询) 或死亡 ( “配置错误2222343242b ” ) ;
$ nrows = mysql_num_rows ( $结果) ;

/ /如果成员的名字是发现什么也不做
如果 ( $ nrows “ 0 ) ( )

其他(

/ /如果用户尚未注册的论坛,这样做,发送电子邮件... 。
$查询= “插入smf_members ( memberName , realName ,电子邮件地址, is_activated , ID_POST_GROUP ,密码, websiteUrl , websiteTitle )值( ' $ memberName ' , ' $ realName ' , ' $电子邮件地址' , ' $ is_activated ' , ' $ ID_POST_GROUP ' , ' $密码' , ' $ websiteUrl ' , ' $ websiteTitle ' ) “ ;

("Config Error 2232 "); $结果= mysql_query ( $查询) 或死亡 ( “配置错误2232 ” ) ;

/ /现在我们需要发送一封电子邮件乐队
$到= $电子邮件地址;
$主题= “您的论坛用户名和密码” ;

/ /从
$标题= “来自:我<me@mysite.com> ” ;

/ /您的邮件
$讯息.= “您的登录名和密码如下所列。您可以变更或者在任何时候。如果你不想参加我们的论坛,这是没有问题的。只要没有登录,它就会像没有什么事。 \ r \ ñ “ ;
$讯息.= “用户: $ memberName密码: $ realPassword \ r \ ñ ” ;

/ /发送电子邮件
= $寄出的邮件 ( $到, $议题, $讯息, $头) ;
如果 ( $寄出)

回声 ( “ -是的! ” ) ;
/ /这是最后的一部分,我们的回声。 该“是! ” 将只印刷,如果一封电子邮件被发送。 因此,充分打印线将看起来就像这样:
/ /亚当争-4 s6vsxag- Ad amStrife-是的!


|评论

如何手动插入一个用户到单模光纤使用PHP论坛

张贴于单模光纤(简单机械论坛) , PHP的由ShortLikeAFox对2008年7月28日

这个具体的例子是单模光纤1.1.5 。 我不能保证,将与任何其他版本。

所以,你简单的机器运行软件和论坛要手动输入用户? 没问题。 我知道这个问题似乎非常具体,但解释的想法在这里能够适应其他类型的论坛和其他数据库驱动软件,如WordPress的。 在我们进入究竟如何做到这一点,让我们来看看如何简单机械论坛跟踪用户。 在单模光纤的数据库有一个表称为smf_members 。 该smf_members结构看起来就像这样:

领域 类型

钥匙 默认
ID_MEMBER mediumint ( 8 )未签名 一氧化氮 革命制度党 auto_increment
memberName varchar ( 80 ) 一氧化氮 MUL
dateRegistered 整数( 10 )未签名 一氧化氮 MUL 0
职位 mediumint ( 8 )未签名 一氧化氮 MUL 0
ID_GROUP smallint ( 5 )未签名 一氧化氮 MUL 0
lngfile tinytext 一氧化氮 MUL
lastLogin 整数( 10 )未签名 一氧化氮 MUL 0
realName tinytext 一氧化氮
instantMessages smallint ( 5 ) 一氧化氮 0
unreadMessages smallint ( 5 ) 一氧化氮 0
buddy_list 文字 一氧化氮
pm_ignore_list 文字 一氧化氮
messageLabels 文字 一氧化氮
密码 varchar ( 64 ) 一氧化氮
电子邮件地址 tinytext 一氧化氮
personalText tinytext 一氧化氮
性别 tinyint ( 4 )未签名 一氧化氮 0
出生日期 日期 一氧化氮 MUL 0001-01-01
websiteTitle tinytext 一氧化氮
websiteUrl tinytext 一氧化氮
位置 tinytext 一氧化氮
聊天 tinytext 一氧化氮
目的 varchar ( 16 ) 一氧化氮
varchar ( 32 ) 一氧化氮
的MSN tinytext 一氧化氮
hideEmail tinyint ( 4 ) 一氧化氮 0
showOnline tinyint ( 4 ) 一氧化氮 1
timeFormat varchar ( 80 ) 一氧化氮
签字 文字 一氧化氮
timeOffset 浮动 一氧化氮 0
化身 tinytext 一氧化氮
pm_email_notify tinyint ( 4 ) 一氧化氮 0
karmaBad smallint ( 5 )未签名 一氧化氮 0
karmaGood smallint ( 5 )未签名 一氧化氮 0
usertitle tinytext 一氧化氮
notifyAnnouncements tinyint ( 4 ) 一氧化氮 1
notifyOnce tinyint ( 4 ) 一氧化氮 1
notifySendBody tinyint ( 4 ) 一氧化氮 0
notifyTypes tinyint ( 4 ) 一氧化氮
memberIP tinytext 一氧化氮
memberIP2 tinytext 一氧化氮
secretQuestion tinytext 一氧化氮
secretAnswer varchar ( 64 ) 一氧化氮
ID_THEME tinyint ( 4 )未签名 一氧化氮 0
is_activated tinyint ( 3 )未签名 一氧化氮 1
validation_code varchar ( 10 ) 一氧化氮
ID_MSG_LAST_VISIT 整数( 10 )未签名 一氧化氮 0
additionalGroups tinytext 一氧化氮
smileySet varchar ( 48 ) 一氧化氮
ID_POST_GROUP smallint ( 5 )未签名 一氧化氮 MUL 0
totalTimeLoggedIn 整数( 10 )未签名 一氧化氮 0
passwordSalt varchar ( 5 ) 一氧化氮

场,我们必须注意:

  • memberName -自E xplanitory。
  • dateRegistered -难道不是必要的,但如果不填写登记的日期显示为1 969年1 2月3 1日。 日期是保存为一个划时代的时间戳。 不知道如何计算时间戳记在你的脑袋? 没问题。 我用的是免费的发电机这里找到。
  • realName -应插入。 当我不知道我刚才重复memberName这里。
  • 电子邮件地址-自E xplanitory。
  • is_activated -必须设置为1 ,因为我们手动激活的一个成员。
  • ID_POST_GROUP -我不会撒谎。 我不知道这是什么,但它似乎总是被设定为4 。 所以... 。 我总是将其设置为4 。 不是最好的方式,但是你能做什么呢?
  • 密码-密码你想给新用户。 这是不可能弄清楚如何输入不看的单模光纤的文件。 正确的代码加密单模光纤密码的数据库看起来像这样:

($memberName).$password) $密码= sha1strtolower ( $ memberName ) 。 $密码)

在上面的代码行, $的密码是用户的实际密码。

怎么做:

/ /首先,连接到光纤数据库

$东道国= “主机” ; / /主机名称
$用户名= “用户名” ; / /数据库用户名
$ mypassword = “密码” ; / /数据库密码
$ db_name = “用户名” ; / /数据库名称

("cannot connect to server"); mysql_connect ( “ $主机” , “ $的用户名” , “ $ mypassword ” ) 死亡( “无法连接到服务器” ) ;
("cannot select DB"); mysql_select_db ( “ $ db_name ” ) 或死亡 ( “不能选择数据库” ) ;

$ memberName = “铁人三项” ;
$ realName = “托尼斯塔克” ;
$电子邮件地址= “ ironMan@ironMan.com ” ;
$ is_activated = 1 ;
$ ID_POST_GROUP = 4 ;

$密码= “ Tony1234 ” ;

($memberName).$password); $密码= sha1strtolower ( $ memberName ) 。 $的密码) ;

$ dateRegistered =一十二亿一千六百九十五万一千二; / / 08年7月25日凌晨2点

$查询= “插入smf_members ( memberName , realName ,电子邮件地址, is_activated , ID_POST_GROUP ,密码, dateRegistered )值( ' $ memberName ' , ' $ realName ' , ' $电子邮件地址' , ' $ is_activated ' , ' $ ID_POST_GROUP ' , ' $密码' , ' $ dateRegistered ' ) “ ;
("SMF Error 101.234 "); $结果= mysql_query ( $查询) 或死亡 ( “单模光纤错误101.234 ” ) ;

这就是这么简单!

|评论

如何使缩略图使用PHP

张贴在职能, PHP的由ShortLikeAFox对2008年7月22日

所以,你想创建一个缩略图从某一图片...这使得PHP的任务容易。 我第一次写下面的功能来处理图像上传的用户在一个网站要我帮忙管理。 上传图片到这个网站可以JPEG文件, pngs ,或图像,所以我不得不写一个函数来处理所有三种。 此代码是基于最初从一个函数发现webcheatsheet.com

怎么做:

功能 createThumbs ( $ pathToImages , $ fname , $ pathToThumbs , $ thumbWidth )

/ /解析路径的延伸

$信息= pathinfo ( $ pathToImages 。 $ fname ) ;
/ /继续只要这是一个JPEG图像
($info['extension']) == ‘jpeg’) )如果( ( strtolower ( $信息[ '延伸' ] ) == '图片' ) | | ( strtolower ( $信息[ '延伸' ] ) == '的jpeg ' ) )

/ /加载图像并获得图像尺寸
$ IMG公司= imagecreatefromjpeg ( “ ( $ pathToImages ) ( $ fname ) ” ) ;
$宽度= imagesx ( $ IMG公司) ;
$高度= imagesy ( $ IMG公司) ;

/ /计算缩略图大小
$ new_width = $ thumbWidth ;
$ new_height = 底薪 ( $高度* ( $ thumbWidth / $宽度) ) ;

/ /创建一个新的临时图像
$ tmp_img = imagecreatetruecolor ( $ new_width , $ new_height ) ;

/ /复制并调整旧的形象进入新形象
imagecopyresized ( $ tmp_img , $ IMG公司, 0 , 0 , 0 , 0 , $ new_width , $ new_height , $宽度,高度$ ) ;

/ /保存缩略图成一个文件
imagejpeg ( $ tmp_img , “ ( $ pathToThumbs ) ( $ fname ) ” ) ;

如果( strtolower ( $信息[ '延伸' ] ) == '图片' )

/ /加载图像并获得图像尺寸
$ IMG公司= imagecreatefromgif ( “ ( $ pathToImages ) ( $ fname ) ” ) ;
$宽度= imagesx ( $ IMG公司) ;
$高度= imagesy ( $ IMG公司) ;

/ /计算缩略图大小
$ new_width = $ thumbWidth ;
$ new_height = 底薪 ( $高度* ( $ thumbWidth / $宽度) ) ;

/ /创建一个新的临时图像
$ tmp_img = imagecreatetruecolor ( $ new_width , $ new_height ) ;

/ /复制并调整旧的形象进入新形象
imagecopyresized ( $ tmp_img , $ IMG公司, 0 , 0 , 0 , 0 , $ new_width , $ new_height , $宽度,高度$ ) ;

/ /保存缩略图成一个文件
imagegif ( $ tmp_img , “ ( $ pathToThumbs ) ( $ fname ) ” ) ;

如果( strtolower ( $信息[ '延伸' ] ) == '巴' )

/ /加载图像并获得图像尺寸
$ IMG公司= imagecreatefrompng ( “ ( $ pathToImages ) ( $ fname ) ” ) ;
$宽度= imagesx ( $ IMG公司) ;
$高度= imagesy ( $ IMG公司) ;

/ /计算缩略图大小
$ new_width = $ thumbWidth ;
$ new_height = 底薪 ( $高度* ( $ thumbWidth / $宽度) ) ;

/ /创建一个新的临时图像
$ tmp_img = imagecreatetruecolor ( $ new_width , $ new_height ) ;

/ /复制并调整旧的形象进入新形象
imagecopyresized ( $ tmp_img , $ IMG公司, 0 , 0 , 0 , 0 , $ new_width , $ new_height , $宽度,高度$ ) ;

/ /保存缩略图成一个文件
imagepng ( $ tmp_img , “ ( $ pathToThumbs ) ( $ fname ) ” ) ;

这一工程如何

功能createThumbs需要四个月的论点。

  • $ pathToImages -> “文件夹的路径图片档案是个它可能看起来就像这样: / 家庭/内容/用户名/的H TML/列表/上传/
  • $ fname -> “文件名: p ic1.gif, j ohnny.jpg等. ..
  • $ pathToThumbs -> “文件夹的路径你想的缩略图是个你想,这是同样的道路p athToImages美元,因为缩略图将有相同名称的原始图像。
  • $ thumbWidth -> “的宽度要缩略图将在像素。

一个重要的注意,我要在这里的是,这个功能无关的地方,以外的其他文件扩展名检查,以确保图像文件包含任何恶意。 由于档案createThumbs ( )与已上传假设该文件已被妥善关注。

第一件createThumbs ( )不就是要求pathinfo ( ) 。 pathinfo ( )打破了部分道路成一个数组。 这是对我们有用的,因为我们需要的文件扩展名,妥善创建缩略图。 下一步createThumbs ( )检查是否我们正在处理一个JPEG格式。 如果原始文件是一个JPEG createThumbs创建一个新的形象在原有基础上的形象imagecreatefromjpeg ( ) 。 下一步是要的宽度和高度的图像( imagesx ( ) , imagesy ( ) ) 。 用$ thumbWidth的比例原来的宽度和高度createThumbs ( )设置了新的宽度和高度的缩略图。 利用这些新的比率createThumbs ( )创建一个“空白”的形象将是相同的宽度和高度的缩图与imagecreatetruecolor ( ) 。 imagecopyresized ( )是用来调整图片的大小,并储存在“空白”刚刚创建的。 imagecopyresized ( )似乎是它需要很大的参数,但如果你看看文件真的不是复杂。 现在存在的缩略图作为一个真正的彩色图像createThumbs所有需要做的是转换档案成一个JPEG格式。 要做到这一点imagejpeg ( )被调用

这是如何工作的职能JPEG文件。 有起码的分歧。 pngs和。图像。

|评论

如何撰写特定浏览器的PHP代码

张贴 PHP的ShortLikeAFox关于2008年7月21日

因此,要编写代码只出现在某些浏览器...有许多理由要做到这一点。 我第一次亲自需要做到这一点时,我试图嵌入一个MP3就某一页。 出于某种原因我不能写的代码,使的mp3将发挥的浏览器我测试( IE浏览器, Firefox和歌剧) , 验证在同一时间。 如果我没有记错,它的Internet Explorer这是造成问题的原因。 该解决方案我来到了被使用很少的PHP找出当用户使用IE浏览器,然后嵌入的mp3在非有效的代码,如果是这种情况。

该解决方案导致了MP3播放总是正确的网页总是验证,因为W3C的校验从来没有确定自己作为IE浏览器。 这也许不是最道德的方式达到W3C的遵守,但它的作品。

还有一次我记得需要具体写的浏览器代码是当我有问题的IE 6不显示我的。 PNG图像正确的。 余googled左右,并发现了几个办法来解决这个问题,但他们两人最终搞乱的总体层的位置在我的网页。 相反的疑难排解这个问题,我去的迅速解决,并决定显示。图像当用户的IE 6了。 如果用户有另一个浏览器了。 png格式问题,我想这是太糟糕他。

如何做到这一点:

首先您需要写一些代码行,以找出您的浏览器的用户。 这里是如何去做,用PHP :

  • 'HTTP_USER_AGENT' ]; $ visitorsOS = 全局变量$ _SERVER [ ' HTTP_USER_AGENT ' ] ;

这里有三个例子$ visitorsOS什么可以像

  • Mozilla/4.0 (兼容; MSIE 6.0 ;的Windows NT 5.1 ; SV1 ; 。 NET中使用CLR 1.0.3705 ;的。 NET
  • Opera/9.51 ( Windows NT的5.1 ; ü ;特等)
  • Mozilla/5.0 (仅限Windows ; ü ;的Windows NT 5.1 ;恩美;病毒: 1.9 ) Gecko/2008052906火狐

首先用户的Internet Explorer 6 ,第二次歌剧院9.51 ,第三次的Firefox 。

现在,我们知道更多的信息比我们真正需要的访问者的电脑,我们需要把这些信息很好地利用。 说你想要写代码,只会出现如果用户运行任何版本的Internet Explorer 。 在这种情况下你会做出这样的事情:

(’MSIE’,$visitorsOS)){ 如果eregi ( ' MSIE ' , $ visitorsOS ) ) (

代码,只会出现,如果用户IE浏览器

其他

代码将出现在所有其他情况下

我用eregi ,一个区分大小写正则表达式匹配,而非额日格,一个大小写正则表达式匹配。 我不记得如果我这样做的妄想,或者如果我真的发现一个情况下, Internet Explorer的确定本身msie 。 在这两种情况下eregi不会伤害任何因此它是我使用。 要编写代码的特定版本的IE浏览器将只需要一个小的变化。 不是... ( eregi ( ' MSIE ' ... )我会用像( eregi ( ' MSIE 6.0 ' ... )如果我想要的代码,只有出现MSIE 6.0 。

|评论

下一步条目»