यह Tutorial आप अपने पद से परिचित हैं ग्रहण: कैसे मैन्युअल डालें एक प्रयोक्ता के लिए एक SMF फोरम PHP का प्रयोग में.
मैं हाल ही में 800 या तो हिल की चुनौती का सामना करना पड़ा एक SMF फोरम में एक डेटाबेस से बैंड. मैं समस्याओं जब इस कदम है कि मैं पहली पोस्ट में कवर नहीं किया बनाने की एक जोड़ी का सामना करना पड़ा:
- इस बैंड के नाम चरित्र कदम से एक चरित्र के लिए SMF डेटाबेस में सुरक्षित होने की गारंटी नहीं थे. तो नाम किसी तरह का समारोह संशोधित नियुक्त किया था.
- इस बैंड पासवर्ड नहीं है. तो पासवर्ड की पीढ़ी के कुछ प्रकार की जरूरत है नियोजित किया जाना है.
मैं इस बारे में सभी फोरम में बैंड के पंजीकरण की गई यह कदम इस तरह एक छोटे से चला गया:
ओपन के बैंड डाटाबेस
प्रत्येक (बैंड के लिए) (
उत्पन्न पासवर्ड
नाम बदलें बैंड "सुरक्षित" नाम के साथ
पकड़ो और उत्पन्न जानकारी उपयोगकर्ता डालने की जरूरत
डालें बैंड में smf_members
बैंड के पासवर्ड के साथ एक ईमेल भेजें
)
मुझे लगता है कि सूचना शामिल उपयोगी था बैंड डेटाबेस: से उपलब्ध था, bandEmail, bandName और bandWebsite
यहाँ मैं करता था कूटशब्द पीढ़ी समारोह है (blatently totallyphp.co.uk से) उठाए:
समारोह createRandomPassword () (
$ chars = "abcdefghijkmnopqrstuvwxyz023456789";
() * 1000000); srand (() microtime डबल () * 1000000);
$ i = 0;
$ = "पास;
($ जब मैं <= 7) (
33; $ NUM = रैंड ()% 33;
$ tmp = substr ($ chars, $ NUM, 1);
$ पास = $ पास. $ tmp;
$ i + +;
)
$ वापस पास;
)
कूटशब्द यहाँ अपेक्षाकृत कमजोर बनाया है, लेकिन यह काफी अपने उद्देश्यों के लिए अच्छा था. कोई पासवर्ड पीढ़ी समारोह यहां ठीक काम करेगा. अगर वे इसे बदलने के लिए नहीं चुना के लिए सदस्यों को याद करने की है क्योंकि यह आसान होगा मैं यह एक चुना.
कैसे करना है:
/ / पहले बैंड डेटाबेस से कनेक्ट
$ उपयोगकर्ता नाम = "bandUsername";
$ मेजबान = "bandHost";
$ mypassword = "bandPassword";
$ db_name = "bandDatabase";
("cannot connect to server"); "मेजबान (" $ mysql_connect, "$ उपयोगकर्ता नाम", "$ mypassword") या मर ( "सर्वर से") कनेक्ट नहीं कर सकते हैं;
("cannot select DB"); mysql_select_db ( "$ db_name") या मर ( "") DB का चयन नहीं कर सकते हैं;
/ / अब डेटाबेस से सभी बैंड के हड़पने
$ क्वेरी = "चुनें * से allBands";
$ बैंड = mysql_query ($ क्वेरी) या मर ( "Config त्रुटि 2222b");
$ userRows = mysql_num_rows ($ बैंड);
/ / अब smf DB से कनेक्ट करने देता है
$ मेजबान = "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 = 0 ($ के लिए; $ i <$ userRows, $ i + +) (
($bands)){ ($ यदि पंक्ति = mysql_fetch_assoc ($ बैंड)) (
/ / Extract बैंड जानकारी
उद्धरण ($ पंक्ति);
/ / बैंड के लिए एक पासवर्ड बनाएँ
$ realPassword = createRandomPassword ();
/ / मैं अपनी Debugging के हिस्से के रूप में और bandname और पासवर्ड गूंज के रूप में काम करता है तो मैं इस समारोह देख सकते हैं का चुनाव
गूंज ( "<br/> $ bandName - $ realPassword");
$ newBand = "";
बैंड नाम पर हम अगर डॉलर से valid_chars एक वैध चरित्र मैच देखने के लिए देखने के लिए जा रहे हैं एक पत्र / / के लिए. ऐसा लगता है कि हम इसे से मुक्त करने के लिए जा रहे हैं नहीं है और बैंड नाम truncate
($bandName); $j ++ ){ ($ j = 0; $ j <strlen ($ bandName); $ j + +) (के लिए
($band[$j])); $ Temp = str_replace ($ valid_chars, "एक्स", strtolower ($ बैंड [$ j]));
($ अगर temp == "एक्स")
$ = $ newBand newBand. $ बैंड [$ j];
)
/ / मैं मैं पुराने नाम और पासवर्ड की गूंज एक ही कारण के लिए नया नाम गूंज
( "- $ newBand") गूंज;
/ / हम नए बैंड का नाम है .... अब हम इस डाटाबेस में डालने के लिए की जरूरत को जानकारी buliding शुरू करते हैं ...
$ = $ newBand memberName;
$ = $ newBand realName; / / मैं असली नाम और सदस्य के नाम एक ही निर्धारित किया है. अगर वे चाहते हैं यह बैंड इसे बदल सकते हैं
$ emailAddress = $ bandEmail;
$ websiteUrl = $ bandWebsite; / / जब से मैं भी उन्हें दर्ज कर सकते हैं इस बैंड 'वेबसाइटों है
$ = $ newBand websiteTitle;
$ = 1 is_activated;
$ ID_POST_GROUP = 4;
($memberName).$realPassword); //Password must be encrypted $ कूटशब्द = sha1 (strtolower ($ memberName). $ realPassword); / / पासवर्ड एन्क्रिप्टेड किया जाना चाहिए
/ / इस SMF डेटाबेस में एक ही नाम के साथ यकीन है कि उनके isn'ta सदस्य बनाओ. हम दो बार गलती से किसी को भी प्रवेश नहीं करना चाहता हूँ
$ क्वेरी = "चुनें * से" memberName कहाँ memberName = '$ smf_members;
("Config Error 2222343242b"); $ परिणाम = mysql_query ($ क्वेरी) या मर ( "Config त्रुटि 2222343242b");
$ nrows = mysql_num_rows ($ परिणाम);
यदि सदस्य का नाम मिला है / / कुछ नहीं कर
($ nrows> 0) () अगर
और (
/ / यदि उपयोगकर्ता को पहले ही मंच के लिए साइन अप नहीं है तो करते हैं और एक ईमेल भेज ....
$ क्वेरी = "घुसाएँ को smf_members (, emailAddress, ID_POST_GROUP, websiteUrl passwd, websiteTitle) मान ( '$ is_activated realName memberName memberName', '$' realName, '$' emailAddress, '$' is_activated, '$ ID_POST_GROUP' , '$ कूटशब्द', '$' websiteUrl, '$ websiteTitle') ";
("Config Error 2232 "); $ परिणाम = mysql_query ($ क्वेरी) या मर ( "Config त्रुटि 2232");
/ / अब हम बैंड को एक ईमेल भेज करने की आवश्यकता है
$ करने के लिए = $ emailAddress;
$ विषय = "आपका फोरम उपयोगकर्ता नाम और पासवर्ड";
/ / से
$ हेडर = "से: मुझे <me@mysite.com>";
/ / आपका संदेश
$ संदेश .= "आपका लॉगिन और कूटशब्द नीचे सूचीबद्ध हैं. आप या तो किसी भी समय बदल सकते हैं. यदि आप हमारे मंच में भाग लेने के लिए नहीं चाहता, कि कोई समस्या नहीं है. बस में प्रवेश नहीं है और यह कभी भी कुछ नहीं हुआ जैसा होगा . \ r \ n ";
$ संदेश .= "प्रयोक्ता नाम: $ memberName पासवर्ड: $ realPassword \ r \ n";
/ / ईमेल भेजने
$ sentmail = मेल ($, $ विषय, $ संदेश, $ हेडर) करने के लिए;
($ sentmail) यदि
गूंज ( "- हाँ!");
/ / यह हमारी गूंज के अंतिम हिस्सा है. इस "हाँ!" अगर एक ईमेल भेजा है ही मुद्रित किया जाएगा. तो एक पूरा प्रिंटआउट रेखा से कुछ इस तरह दिखेगा:
/ / एडम संघर्ष - 4s6vsxag - AdamStrife - हाँ!
)
)
)