इस ट्यूटोरियल तुम मेरे पोस्ट के साथ परिचित हैं मान लिया गया: कैसे मैन्युअल डालें एक प्रयोक्ता के लिए एक SMF फोरम php का उपयोग में.
मैं हाल ही में 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, "$ उपयोगकर्ता नाम", "$ 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, "$ उपयोगकर्ता नाम", "$ 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, "X", strtolower ($ बैंड [$ j]));
($ अगर temp == "X")
$ = $ newBand newBand. $ बैंड [$ j];
)
/ / मैं मैं पुराने नाम और पासवर्ड प्रतिध्वनित एक ही कारण के लिए नया नाम प्रतिध्वनित
( "- $ newBand") प्रतिध्वनित;
/ / हम नए बैंड का नाम है .... अब के हम db में डालने के लिए आवश्यकता जानकारी 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 ($ क्वेरी) या मरने के ( "कॉन्फिग त्रुटि 2222343242b");
$ nrows = mysql_num_rows ($ परिणाम);
यदि सदस्य के नाम पाया जाता है / / कुछ नहीं कर
($ nrows> 0) () अगर
और (
/ / यदि उपयोगकर्ता पहले ही मंचों के लिए साइन अप नहीं है ऐसा करते हैं और एक ईमेल भेज ....
$ क्वेरी = "INSERT जांच 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 ($ क्वेरी) या मरने के ( "कॉन्फिग त्रुटि 2232");
/ / अब हम बैंड को एक ईमेल भेज करने की आवश्यकता है
$ करने के लिए = $ emailAddress;
$ विषय = "आपका मंच उपयोगकर्ता नाम और पासवर्ड";
/ / से
$ हैडर = "से: मैं <me@mysite.com>";
/ / आपका संदेश
$ संदेश .= "आपका लॉगिन और कूटशब्द नीचे सूचीबद्ध हैं. या तो आप किसी भी समय में परिवर्तन कर सकते हैं. यदि आप हमारे मंचों में भाग लेने के लिए नहीं चाहता, कि कोई समस्या नहीं है. बस में प्रवेश कभी नहीं और यह कभी भी कुछ भी नहीं हुआ जैसा हो जाएगा . \ r \ n ";
$ संदेश .= "उपयोगकर्ता नाम: $ memberName कूटशब्द: $ realPassword \ r \ n";
/ / ईमेल भेजें
$ sentmail = मेल ($ $ विषय, $ संदेश, $ हैडर) करने के लिए;
($ sentmail) अगर
प्रतिध्वनि ( "- हाँ!");
/ / यह हमारी प्रतिध्वनित के अंतिम हिस्सा है. The "हाँ!" अगर एक ईमेल भेजा है केवल मुद्रित किया जाएगा. तो एक पूरा प्रिंटआउट लाइन कुछ इस तरह दिखेगा:
/ / एडम संघर्ष - 4s6vsxag - AdamStrife - हाँ!
)
)
)