이 입문서는 당신이 내 게시물에 익숙한 : 수동으로 삽입하는 방법 PHP를 사용하여 사용자에게 SMF 포럼.
최근 800 또는 정말 감동적의 도전에 직면 한 SMF 포럼에 데이터베이스에서 밴드. 문제가 움직일 때 그 첫 번째 게시물에 커버하지 않았어 만드는 몇 직면 :
- 밴드 이름은 캐릭터를 이동하여 문자에 대한 SMF 데이터베이스에 안전하게 보장되지 않았다. 그래서 이름이 일종의 함수를 수정 고용해야했다.
- 밴드의 비밀 번호가 필요하지 않습니다. 그래서 비밀 번호 세대의 일부 유형을 필요로 채용된다.
나는 모든 포럼에 들어간 밴드의 등록이 같은 약간 갔었 단계 :
밴드 데이터베이스 열기
각 (밴드) (
생성 비밀 번호
밴드 이름 바꾸기 "안전한"이름을 가진
사용자 삽입하는 데 필요한 정보를 잡아 생성
삽입 밴드로 smf_members
밴드 비밀 번호가 포함된 이메일을 보내기
)
유용한 정보가 포함되어 있던 밴드가 데이터베이스 :에서 제공했다, bandEmail, bandName과 bandWebsite
여기서 내가 사용한 비밀 번호를 생성 함수입니다 (blatently totallyphp.co.uk에서) :
함수 createRandomPassword () (
$ 문자 = "abcdefghijkmnopqrstuvwxyz023456789";
() * 1000000); srand (() microtime 두 번 () * 1000000);
$ i가 = 0;
$ = "패스;
($ 동안 <= 7) (
33; $ NUM 개의 = 랜드 () % 33;
$ tmp를 = substr ($ 문자, $ num과, 1);
$ 통과 = $ 패스. $ tmp를;
$ i가 + +;
)
$ 리턴 패스;
)
비밀 번호를 여기에 상대적으로 약한 만들어지만, 내 목적을 위해 충분히 좋다. 어떤 비밀 번호가 생성 기능을 여기서 잘 작동했다. 만약 그들이 그것을 변경하지 않기로에 대한 기억하고 있기 때문에 쉽게 그릴 수있을 것이다 회원이 하나를 선택했다.
어떻게해야 할지를 :
/ / 처음에는 밴드가 데이터베이스에 연결
$ 사용자 = "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);
/ / 이제 우리는 루프를 통해 각 밴드가 필요
){ 전 = 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") 에코;
/ / 우리는 새로운 밴드 이름이 .... 지금 우리가 DB에 삽입하는 데 필요한 정보를 buliding 시작하자 ...
$ = $ newBand 이용자;
$ = $ newBand realname; / / 내가 진짜 이름과 회원 이름 같은 설정합니다. 만약 그들이 원하는 대역을 변경할 수있습니다
$ emailAddress = $ bandEmail;
$ websiteUrl = $ bandWebsite; / / 이후로 난 그들을 입력할 수도있습니다뿐만 아니라 밴드의 '웹사이트가
$ = $ newBand websiteTitle;
$ = 1 is_activated;
$ ID_POST_GROUP = 4;
($memberName).$realPassword); //Password must be encrypted $ 비밀 번호 = sha1 (strtolower ($ 이용자). $ realPassword); / / 비밀 번호는 암호화되어야합니다
/ / SMF 데이터베이스에 동일한 이름을 가진 확신을 못하므로 회원 확인합니다. 우리가 실수로 사람을 두 번 입력하고 싶지 않아
$ 쿼리 = "선택 *에서"이용자의 '어디로 이용자 ='$ smf_members;
("Config Error 2222343242b"); $ 결과 = mysql_query ($ 쿼리) 또는 죽을 ( "구성 오류 2222343242b");
$ nrows = mysql_num_rows ($ 결과);
회원의 이름을 찾을 수있다면 / / 아무것도하지
($ nrows> 0) ()
다른 (
/ / 만약 사용자가 이미 포럼에 대한이므로 가입하지 않으면 이메일을 보내주십시오 ....
$ 쿼리 = "삽입 INTO를 smf_members (,, emailAddress, ID_POST_GROUP, websiteUrl passwd, websiteTitle) 값 ( '$ is_activated realname 이용자의 이용자', '$'realname, '$'emailAddress, '$'is_activated, '$ ID_POST_GROUP' , '$ 비밀 번호', '$'websiteUrl, '$ websiteTitle') ";
("Config Error 2232 "); $ 결과 = mysql_query ($ 쿼리) 또는 죽을 ( "구성 오류 2232");
/ / 이제 우리는 이메일을 보낼 필요 밴드
달러 = $ emailAddress;
$ 주제 = "당신의 포럼에 사용자 이름과 비밀 번호";
/ /부터
$ 헤더 = "에서 : 나와 <me@mysite.com>";
/ / 귀하의 메시지
$ 메시지 .= "귀하의 로그인 및 비밀 번호를 아래에 나열되어있습니다. 당신도 언제든지 변경할 수있습니다. 만약 여러분이 포럼에 참여하고 싶지 않아, 아무 문제 없어요. 그냥 로그 인한 적이 그리고 아무 일도 일어나지 않은 것처럼 될 것입니다 .에 \ r \ n ";
$ 메시지 .= "아이디 : $ 이용자의 비밀 번호 : $ realPassword에 \ r \ n";
/ / 이메일을 보내
$ 보냄 = 메일 ($, $ 제목, $ 메시지, $ 헤더);
($ 보냄)
에코 ( "- 네!");
/ / 이것이 우리 에코의 마지막 부분입니다. "- 예!" 이메일을 보낸 경우에만 인쇄됩니다. 그래서 전체 출력물 라인을 이런식으로 생겼을 것이다 :
/ / 아담 증오 - 4s6vsxag - AdamStrife - 그래!
)
)
)