이 튜토리얼 : 나의 가정을 잘 알고있는 당신은 게시 하는 방법 포럼에 수동으로 삽입 사용자 속으로 SMF PHP 사용하기 .
나는 최근에 데이터베이스에서 SMF 포럼에 밴드를 800 정도 이동의 도전에 직면했다. 나는 문제가 처음 게시물에 커버하지 않았어 움직이고 몇 직면 :
- 밴드 이름은 안전한 문자로 문자 이동 SMF 데이터베이스로 수 보장되지 않았습니다. 이름은 일종의 함수를 수정했습니다 그래서이 고용되어 있어야합니다.
- 밴드 암호를 필요가 없습니다. 비밀 번호 세대의 몇 가지 유형이 필요 그래서이 고용되어 있어야합니다.
단계는 내가 모든 포럼에서 밴드의 등록에 가서 이런 였을 :
밴드 데이터베이스를 엽니다
각 (밴드) (
생성 비밀 번호
밴드 이름 바꾸기 "안전"이름을 가진
잡아와 정보를 삽입하기 위해 필요한 사용자 생성
삽입 밴드로 smf_members
보내기 밴드 비밀 번호 이메일
)
정보는 내가 도움이 포함된 데이터베이스 밴드 : bandName, bandEmail에서 사용할 수 있었는데 bandWebsite
여기에서 사용되는 (blatently 함락되는 순간 나는 비밀 번호 기능 생성 totallyphp.co.uk ) :
기능 createRandomPassword () (
$ 문자 = "abcdefghijkmnopqrstuvwxyz023456789";
() * 1000000); srand ((더블) microtime () * 1000000);
$ 전 = 0;
$는 = "패스;
(동안 ($ 나는 <= 7)
33; $ 인분 포함 = 랜드 () % 33;
$ tmp를 = substr ($ 문자, $ 인분 포함, 1);
$ = $ 패스는 패스. $ tmp를;
$ 나 + +;
)
반환 달러 패스;
)
비밀 번호가 여기에 만들어 상대적으로 약하지만, 충분히 내 목적을 위해 좋다. 어떤 비밀 번호 생성 기능이 작동 것이다 여기 괜찮아요. 난이 하나가 회원을위한 쉬운 그들은 그것을 변경할 수 없습니다 선택한 경우 기억하는 것입니다 있기 때문에 선택했습니다.
그것을 어떻게하는 :
/ / 첫번째 데이터베이스 밴드 연결
$ 사용자 이름 = "bandUsername";
$ 호스트 = "bandHost";
$ mypassword = "bandPassword";
$ DB_NAME = "bandDatabase";
("cannot connect to server"); ) mysql_connect ( "$ 호스트", "$ username"을, "$ mypassword"또는 죽을 ( "서버에 연결할 수 없습니다");
("cannot select DB"); mysql_select_db ( "$ DB_NAME") 또는 죽을 ( ""DB를 선택할 수 없습니다);
/ / 이제 데이터베이스 밴드부터 잡아 다
$ 쿼리 = "선택 *의 보낸 사람 allBands";
$ 밴드 = mysql_query ($ 쿼리) 또는 죽을 ( "구성 오류 2222b");
$ userRows = mysql_num_rows ($ 밴드);
/ / 이제 SMF에 연결할 수 있습니다 dB
$ 호스트 = "smfhost"; / / 호스트 이름
$ 사용자 이름 = "smfuser; / / mysql을 사용자 이름
$ mypassword = "smfpassword"; / / mysql을 비밀 번호
$ DB_NAME = "smfdatabase"; / / 데이터베이스 이름
("cannot connect to server"); ) mysql_connect ( "$ 호스트", "$ username"을, "$ 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;
/ / 이제 우리는 밴드에 필요한 각 루프를 통해
){ ($ 나는 <$ userRows; $ 나 + 용 ($ 전 = 0; +)
($bands)){ (밴드))하면 ($ 행 = mysql_fetch_assoc ($
/ / 압축을 풉니다 밴드 정보
) 추출 ($ 행;
비밀 번호 밴드 만들기 / /
$ realPassword = createRandomPassword ();
/ / 내가 내 비밀 번호를 디버깅 같은 부분 bandname 메아리 선택하고 그래서 같은 기능을 볼 수 있습니다 내 작품
) 에코 ( "신청 <br/> bandName $ - $ realPassword";
$ newBand = "";
달러 valid_chars을 유효한 문자가 각각 / / 들어 문자를 일치가 있는지보고에 우리가가는 밴드의 이름. 그것은 그것의 이름을 밴드 않습니다 잘라야가는 우리가 안 와서 그걸 없애
($bandName); $j ++ ){ 0 ($ j를 =; $ j를 <나 strlen ($ bandName); $ j를 + +) (
($band[$j])); $ 온도 = str_replace ($) valid_chars, "X"는, strtolower가 ($ j를 밴드 [달러]);
== 경우 ($ 임시직에서 "X")
$ newBand = $ newBand. $ 밴드 달러를 일본] [;
)
/ / 나는 비밀 번호를 옛 이름과 이유를 나는 에코 에코와 같은 새 이름을위한
"에코 (- $ newBand");
/ / 우리는 이름을 가진 새로운 밴드 .... 지금 가자 dB 삽입에 시작 buliding 필요한 정보를 우리가 ...
$ memberName = $ newBand;
$ realName = $은 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 이름으로 동일한 회원이 반드시 그들의이 아닙니다. 우리는 두 사람이 실수를 입력하고 싶지 않아
$ 쿼리 = "선택 * 제품부터 어디 = '$ memberName'"을 memberName smf_members;
("Config Error 2222343242b"); $ 결과 = mysql_query ($ 쿼리) 또는 죽을 ( "구성 오류 2222343242b");
$ nRows = mysql_num_rows ($ 결과);
/ / 경우 회원 이름은 아무것도하지 않고 발견
)면 ($ nRows> 0) (
또 (
/ / 경우 사용자가 아니 이미 포럼에 서명까지 이메일을 보낼 수 있도록하고 ....
$ 쿼리 = "삽입 속으로 (realName, emailAddress, ID_POST_GROUP, passwd, websiteUrl, websiteTitle is_activated memberName) 가치 ( '$ memberName', '$', emailAddress ',', '$ 달러를 is_activated'달러 realName '을 smf_members ID_POST_GROUP' , '$ 암호', '$ websiteUrl', '$ websiteTitle') ";
("Config Error 2232 "); $ 결과 = mysql_query ($ 쿼리) 또는 죽을 ( "구성 오류 2232");
/ / 이제 우리는 밴드 이메일을 보낼 필요
$에 = $ emailAddress;
$ 제목 = "당신의 포럼 이름과 비밀 번호";
/ /에서
달러에서 헤더 = ": 저요 <me@mysite.com>";
/ / 귀하의 메시지
$ 메시지가 .= "귀하의 로그인 및 비밀 번호는 아래와 같습니다. 언제든지 중 하나에서 변경할 수 있습니다. 당신은 우리의 포럼에 참여하지 않으려면, 그건 아무 문제 없어. 그냥 로그 결코 그것은 다신 이런 일 없었됩니다. \를 r에 \ 안내 n ";
$ 메시지가 .= "사용자 이름 : $ memberName 비밀 번호 : $ realPassword \ r에 \ n";
/ / 이메일을 보낼
$ 보냄 = 메일을 ($로, $ 제목, $ 메시지, $ 헤더);
) 만약 ($ 보냄
"에코 (- 예!");
/ / 이것은 에코 부분 우리의 마지막입니다. "- 네!" 발송됩니다 이메일을 경우에만 인쇄됩니다. 이 그래서 전체 인쇄물의 같은 모양 라인 :
/ / 아담과 증오 - 4s6vsxag - AdamStrife - 그래!
)
)
)