इस ट्यूटोरियल ग्रहण आप पोस्ट के साथ अपने परिचित हैं: SMF फोरम कैसे एक के लिए मैन्युअल डालें एक प्रयोक्ता में PHP का उपयोग करना .
मैं हाल ही में 800 या तो एक SMF फोरम में बैंड के चलते एक डेटाबेस से की चुनौती का सामना करना पड़ा. मैं समस्याओं जब इस कदम है कि मैं पहली पोस्ट में कवर नहीं किया बनाने की एक जोड़ी का सामना करना पड़ा:
- बैंड नाम के चरित्र से एक चरित्र के लिए सुरक्षित SMF डेटाबेस में स्थानांतरित नहीं किया जा गारंटी थे. नाम किसी तरह का समारोह संशोधित तो किया था नियोजित किया जाना है.
- बैंड के पासवर्ड के लिए नहीं है. पासवर्ड पीढ़ी के कुछ प्रकार की जरूरत है तो नियोजित किया जाना है.
कदम मैं फोरम में बैंड के सभी रजिस्टर बारे में चला गया इस तरह एक छोटे से चला गया:
ओपन के बैंड डाटाबेस
के लिए प्रत्येक (बैंड) (
उत्पन्न पासवर्ड
"सुरक्षित" नाम के साथ बैंड का नाम बदलें
पकड़ो और सम्मिलित करने के लिए उपयोगकर्ता आवश्यक जानकारी उत्पन्न
डालें बैंड में smf_members
भेजें पासवर्ड के साथ एक ईमेल बैंड
)
सूचना मैं बैंड डेटाबेस है कि उपयोगी था शामिल: bandName, bandEmail से उपलब्ध था, और bandWebsite
यहाँ से पासवर्ड पीढ़ी समारोह मैं का उपयोग किया (लिया blatently totallyphp.co.uk ):
createRandomPassword समारोह () (
= $ Chars abcdefghijkmnopqrstuvwxyz023456789 ";
() * 1000000); (Srand (डबल) microtime () 1000000 *);
मैं $ = 0;
= $ पारित ";
जबकि ($ i <= 7) (
33; $ Num = रैंड () 33%;
$ Substr tmp = ($ 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");
Mysql_num_rows = $ ($ बैंड) userRows;
/ / अब 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 (),
/ मैं चुन लिए काम करता है डिबगिंग के रूप में भाग के मेरे पासवर्ड और bandname गूंज और इसलिए मैं यह के रूप में कार्य देख सकते हैं /
गूंज ("<br/> bandName - $ realPassword");
newBand $ "=";
/ / Valid_chars बैंड में प्रत्येक पत्र नाम के लिए $ से हम चरित्र जा रहे हैं देखने के लिए वैध है अगर यह मैच देखने के लिए एक. यह नहीं है कि हम बैंड नाम पाने के लिए जा रहे हैं छुटकारा truncate की है और
($bandName); $j ++ ){ 0 के लिए $ (= j; $ j <) strlen ($ bandName; $ j + +) (
($band[$j])); $ Temp = str_replace ($ valid_chars, "एक्स", $ strtolower (बैंड] [$ j));
अस्थायी अगर ($ == "") एक्स
newBand $ = $ newBand. बैंड $ j] [$;
)
/ / मैं पुराने नाम और पासवर्ड की गूंज नया नाम गूंज के लिए एक ही कारण है कि मैं
Echo "(- newBand") $;
/ / हम नाम है नए बैंड .... अब चलो DB buliding शुरू में डालने के लिए की जरूरत जानकारी हम ...
$ = $ NewBand memberName;
$ 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 नाम के साथ एक ही सदस्य यकीन है कि उनकी isn'ta. हम दो बार दर्ज करें किसी को भी नहीं चाहते हैं कि गलती से
$ क्वेरी = "चुनें * से जहां '=' $ memberName" memberName smf_members;
("Config Error 2222343242b"); $ परिणाम = मरने mysql_query ($ क्वेरी) या ("विन्यास त्रुटि 2222343242b");
$) Nrows mysql_num_rows = ($ परिणाम;
/ / यदि सदस्य का नाम कुछ भी नहीं पाया जाता है
) यदि ($ nrows> 0 ()
और (
/ / यदि उपयोगकर्ता नहीं है पहले से ही मंच के लिए साइन अप, ईमेल करते हैं तो एक और भेज ....
$ क्वेरी = "घुसाएँ में (memberName, realName, emailAddress, is_activated, ID_POST_GROUP, passwd, websiteUrl, websiteTitle) ($ 'मूल्यों' memberName, '$' realName smf_members $ ',' 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)
Echo "(-! हाँ");
/ / यह गूंज भाग के हमारे पिछले है. "-हाँ!" ईमेल भेजा है ही मुद्रित किया जाना एक हों. तो एक पूरा प्रिंटआउट रेखा से कुछ इस तरह दिखेगा:
/ / एडम संघर्ष - 4s6vsxag - AdamStrife हां -!
)
)
)