このチュートリアルは私の投稿に慣れていると仮定: どのように手動で挿入するためのSMFのユーザーフォーラムのPHPを使用しています。
私は最近、 800ほどの移動の挑戦に直面するSMFのフォーラムには、データベースからのバンド。 私の問題を移動するときに、私の最初の記事でカバーしていないことをいくつかに直面:
- バンド名の文字を移動して文字のためのSMFのデータベースに安全であることが保証されていない。 だから名の一部を変更するような機能を採用しなければならなかった。
- バンドのパスワードを持っていない。 そこでパスワード生成のいくつかのタイプのニーズを採用する。
私のすべてのフォーラムでは、バンドの登録を行ったの手順は次のように少し行った:
オープンは、バンドのデータベース
各 (バンド) (
パスワード生成
バンドの名前を変更する"安全"という名前で
グラブを生成するために必要な情報は、ユーザーを挿入
挿入バンドにsmf_members
バンドは、パスワードを記載したメールを送信
)
私は、有用な情報が含まれていたバンドデータベース:から入手したが、 bandEmail 、 bandNameとbandWebsite
ここに私を使ってパスワード生成機能です( blatently totallyphp.co.ukから) :
関数 createRandomPassword ( ) (
$文字= " abcdefghijkmnopqrstuvwxyz023456789 " ;
() * 1000000); srand ( ( ) microtimeダブル ( ) * 1000000 ) ;
$私= 0 ;
$ = "を渡す;
( $ ながら私は< = 7 ) (
33; $ numが= ランド ( ) % 33 ;
$ tmpに= substr ( $文字、 $ numが、 1 ) ;
$パス= $渡します。 $ tmpの;
$私+ + ;
)
$ リターンパス;
)
パスワードをここには比較的弱いが作成されますが、十分に私の目的のために良かった。 任意のパスワード生成機能をここにうまくいくと思います。 それを変更しないことを選択した場合は、メンバーを覚えて簡単になるので、私はこの1つを選んだ。
その方法を:
/ /まず、バンドのデータベースに接続
$ユーザ名= " bandUsername " ;
$ホスト= " bandHost " ;
$ mypassword = " bandPassword " ;
$ db_name = " bandDatabase " ;
("cannot connect to server"); "ホスト( " $ mysql_connect 、 " $ユーザ名" 、 " $ mypassword "は) または死ぬ ( "サーバーに" )を接続することはできません。
("cannot select DB"); mysql_select_db ( " $ db_name " ) または死ぬ ( " " ) DBを選択することはできません。
/ /これは、データベースからすべてのバンドをつかむ
$クエリ= "のSELECT * allBands " ;
$バンド=するmysql_query ( $クエリ)または死ぬ( "設定エラー2222b " ) ;
$ userRows = mysql_num_rows ( $バンド) ;
/ /これで、 SMFのデータベースに接続することができます
$ホスト= " smfhost " ; / /ホスト名
$ユーザ名= " smfuser ; / / MySQLユーザ名
$ mypassword = " smfpassword " ; / / mysqlのパスワード
$ db_name = " smfdatabase " ; / /データベース名
("cannot connect to server"); "ホスト( " $ mysql_connect 、 " $ユーザ名" 、 " $ mypassword "は) または死ぬ ( "サーバーに" )を接続することはできません。
("cannot select DB"); mysql_select_db ( " $ db_name " ) または死ぬ ( " " ) DBを選択することはできません。
/ / $ vaild_charsのユーザー名で許可文字の配列になるだろう。 私は文字と数字だけを許可することを決めた。 それは、問題が発生しないと使用される可能性があるその他の文字だが、スタイル上の理由で私は文字と数字だけで行くことにした
$ valid_chars = " abcdefghijklmnopqrstu vwxyz 0 1 2 3 4 5 6 7 8 9 " ;
$ valid_chars 爆発 = ( " " 、 $ valid_chars ) ;
/ /これでループに各バンドを通じて必要がある
){私= 0 ( $ ; $私< $ userRows ; $私+ + ) (
($bands)){ ( $ 場合、行= mysql_fetch_assoc ( $バンド) ) (
/ /抽出は、バンドの情報を
抽出 ( $行) ;
/ /そのバンドのためのパスワードを作成します
$ realPassword = createRandomPassword ( ) ;
/ /私は、デバッグの一環として、 bandnameとパスワードをエコーには、作品を見ることができるので、機能を選択する
エコー ( "中<br/> bandName $ -$ r ealPassword" ) ;
$ newBand = " " ;
私たちは、 バンド名の場合は、 $ valid_charsは有効な文字と一致するかをよくチェックしている各文字/ /ください。 それは私たちを排除しよう進んでいることはありませんし、バンド名を切り捨てる
($bandName); $j ++ ){ ( $ジェイ= 0 ; $ジェイ< strlen ( $ bandName ) ; $ジェイ+ + ) (用
($band[$j])); $気温= str_replace ( $ valid_chars 、 " X "が、 strtolower ( $バンド[ $ジェイ] ) ) ;
( $ 場合、気温==の" X " )
$ = $ newBand newBand 。 $バンド[ $ジェイ] ;
)
/ /私は、古い名前とパスワードをエコー同じ理由のための新しい名前をエコー
( " -$ n ewBand" )エコー;
/ /我々は、新しいバンド名が... 。 今の私たちは、 DBに挿入するために必要な情報buliding開始させてください...
$ = $ newBand memberName ;
$ = $ newBand realnameの; / /私は、本当の名前とメンバー名と同じに設定します。 場合は、希望のバンドに変更することができます
$メールアドレス= $ bandEmail ;
$ websiteUrl = $ bandWebsite ; / /以来私も、これらを入力してくださいかもしれないバンドのウェブサイトがある
$ = $ newBand websiteTitle ;
$ = 1 is_activated ;
$ ID_POST_GROUP = 4 ;
($memberName).$realPassword); //Password must be encrypted $パスワード= SHA1を ( strtolower ( $ memberName ) 。 $ realPassword ) ; / /パスワードを暗号化する必要があります
/ / SMFのデータベース内の同じ名前の確認はないメンバを作成します。 誤って2度入力してください私たちは誰もしたくない
$クエリ= "のSELECT *から" memberName 'のWHERE memberName = ' $ smf_members ;
("Config Error 2222343242b"); $結果= するmysql_query ( $クエリ) または死ぬ ( "設定エラー2222343242b " ) ;
$ nrows = mysql_num_rows ( $結果) ;
メンバー名が検出された場合は、 / /何もしない
( $ nrows > 0 ) ( )の場合
他(
/ /場合は、フォーラムのユーザーは既に、署名されていませんこれを行うとしてメールを送信... 。
$クエリ= "挿入smf_members ( 、 、メールアドレス、 ID_POST_GROUP 、 websiteUrl passwdのは、 websiteTitle )の値( ' $ is_activated realnameのmemberName memberName ' 、 ' $ ' realnameを、 ' $ 'メールアドレス、 ' $ ' is_activated 、 ' $ ID_POST_GROUP ' 、 ' $パスワード' 、 ' $ ' websiteUrl 、 ' $ websiteTitle ' ) " ;
("Config Error 2232 "); $結果= するmysql_query ( $クエリ) または死ぬ ( "設定エラー2232 " ) ;
/ /これでは、バンドのメールを送信する必要がある
$ 〜 = $メールアドレス;
$件名= "あなたのフォーラムのユーザー名とパスワード" ;
/ /投稿者
$ヘッダー= "投稿者:ミー<me@mysite.com> " ;
/ /あなたのメッセージ
$メッセージ.= "あなたのログイン名とパスワードを次のとおりです。のいずれかをいつでも変更することができます。もし我々のフォーラムへの参加を望んでいないことに問題はない。ログインするだけで、それは何も今まで起こったことがないようにされる\研究です\ n " ;
$メッセージ.= "ユーザ名: $ memberNameパスワード: $ realPassword \研究です\ n " ;
/ /メールを送信
$送信済み= メール ( $ 、 $件名、メッセージ$ 、 $ヘッダー) ;
( $送信済み)の場合
エコー ( " -はい! " ) ;
/ /これが私たちのエコーの最後の部分です。 は、 "はい! " メールを送信される場合にのみ印刷されます。 つまり、完全な印刷ライン以下のようになります:
/ /アダムスト-4 s6vsxag- Ad amStrife-はい!
)
)
)