このチュートリアルは:前提として私に精通してあなたが投稿する方法フォーラムに手動で挿入ユーザーへSMFのPHPを使用します。
私は最近、データベースからのSMFにバンドを800以上もの移動への挑戦に直面した。 私は問題が私が最初の記事でカバーしなかったの動きを作るのカップルに直面して:
- バンド名は、安全な文字単位での移動SMFのデータベースにすることが保証されていない。 名のある種の機能を変更したために採用する。
- バンドは、パスワードを持っていない。 パスワード生成のいくつかのタイプが必要だから採用する。
手順は、私はすべてのフォーラムのバンドの登録に行ってこのような少し行った:
バンドデータベースを開く
各 (バンド)(
生成パスワード
名前を変更するバンド"安全"という名前の
グラブや情報を挿入するユーザーに必要な生成
挿入バンドはにsmf_members
送信バンドパスワードをEメール
)
情報は、私が便利に含まれてバンドデータベース: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に。
$ iが+ +;
)
戻り値は、$を渡す。
)
パスワードはここで作成した比較的弱いですが、それは十分に私の目的のためによかった。 任意のパスワード生成機能は動作しますここ結構です。 私はこの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;
/ /ここで私たちがバンドに必要な各ループ
){ ($ iが<$ userRows; $ iは+ の ($ iは= 0; +)
($bands)){ (バンド)) するif($行= するmysql_fetch_assoc($
/ /抽出バンド情報
)を解凍します ($行;
パスワードのバンドを作成します/ /
$ realPassword = createRandomPassword();
/ /私はそれをデバッグパスワードを一部としてのbandnameエコーを選択するおよびよう関数を見ることができる私が動作する
エコー )(172-32-1176"$ bandName - $ realPassword";
$ newBand ="";
から$ valid_chars有効な文字を、それぞれ/ /は文字と一致することはかどうかを見てのに私たちが行くバンド名。 それは名前をバンドは切り捨てとしている我々は取得し、取り除くのに
($bandName); $j ++ ){ 0($ jが=; $ jは< は、strlen($ bandName); $ jは+ +)(
($band[$j])); $ tempは= str_replaceの ($)valid_chars、"X"は、 であるstrtolowerは ($ jのバンド[ドル]);
== するif($一時の"X")
$ newBand = $ newBand。$バンドは$ j]と[;
)
/ /私はパスワードを、古い名前と理由私はエコーと同じ新しい名前のために
" エコー ( - $ newBand");
/ /我々は、名前を持つ新しいバンド...。 現在の聞かせてデータベースに挿入で起動する5323必要情報を私たちは...
$ memberNameに= $ newBand;
$実名= $はnewBand / /私は、同じ設定の本当の名前とメンバー名。 変更するには必要は場合することができますバンドが
$ EmailAddressの= $ bandEmail;
$ websiteUrl = $ bandWebsite / /以来、私はそれらをかもしれないとしても入力してウェブサイトを持って'バンド
$ websiteTitle = $ newBand;
$ is_activated = 1;
$ = 4のID_POST_GROUP;
($memberName).$realPassword); //Password must be encrypted $パスワードは= sha1の ( であるstrtolower($ memberNameに)$ realPassword); / /パスワードは、暗号化する必要があります
/ /データベースを確認のSMF名と同じメンバを確認のisn'taの。 我々は2人を入力して誤ってしたくない
$クエリ="します。SELECT * FROMはのWHERE ='$ memberNameに"をメンバー名smf_members;
("Config Error 2222343242b"); $結果= するmysql_query($クエリ) または死ぬ ("構成エラー2222343242b");
$ nrows = はmysql_num_rows($結果);
/ /場合は、メンバ名は、何もしない発見さ
) するif($ nrows> 0)(
他(
/ /場合は、ユーザーではない、すでにフォーラムの署名を電子メールを行うので、送信...。
$ queryは="のINSERT INTO(実名、EmailAddressの、ID_POST_GROUPは、passwd、websiteUrl、websiteTitle is_activatedメンバー名)のVALUES('$ memberNameに'、'$'EmailAddressの'、'、'$をis_activated'$を実名を'smf_members ID_POST_GROUP' 、'$パスワード'、'$ websiteUrl'、'$ websiteTitle')";
("Config Error 2232 "); $結果= するmysql_query($クエリ) または死ぬ ("構成エラー2232");
/ /ここで我々は電子メールのバンドを送信する必要に
$に= $ EmailAddressの;
$件名="あなたのフォーラムのユーザー名とパスワード";
/ /投稿者
ドルからヘッダー=":私は<me@mysite.com>";
/ /あなたのメッセージ
$メッセージ.="あなたのログイン名とパスワードは以下のとおりです。あなたはいつでもどちらかで変更することができます。あなたは私たちのフォーラムに参加したくない場合は、問題はありませんよ。ログインするだけではない、それは何のように今まで起こったことがされます。\ r \ nを";
$メッセージ.="ユーザー名:$ memberNameにパスワード:$ realPassword \ r \ nを";
/ /メールを送信
$送信済みメール= メール ($は、$件名、$ messageは、$ヘッダー);
場合 )($送信済みメール
" エコー ( -はい!");
/ /これはエコー部の我々の最後です。 "-はい!" 送信されるメールは場合にのみ印刷されます。 このためフルプリントアウトのようなものになります行は:
/ /アダムストライフ- 4s6vsxag - AdamStrife -はい!
)
)
)