Αυτό το σεμινάριο υποθέτει είστε εξοικειωμένοι με τη θέση μου: Πώς να Τοποθετήστε το χέρι έναν χρήστη σε ένα SMF Forum Χρησιμοποιώντας την PHP .
Που αντιμετώπισα πρόσφατα την πρόκληση της μεταφοράς 800 περίπου ταινίες από μια βάση δεδομένων σε ένα φόρουμ SMF. Αντιμετώπισα κάποια προβλήματα κατά την υποβολή της κίνηση που δεν είχα καλύψει το πρώτο post:
- Τα ονόματα μπάντα δεν ήταν εγγυημένα για να είναι ασφαλής για έναν χαρακτήρα από το χαρακτήρα, κινούνται στη βάση δεδομένων του SMF. Έτσι, κάποιο είδος του ονόματος που τροποποιεί τη λειτουργία έπρεπε να απασχολούνται.
- Τα συγκροτήματα δεν έχουν τους κωδικούς πρόσβασης. Έτσι, κάποιο είδος γενεάς κωδικό πρόσβασης, πρέπει να χρησιμοποιούνται.
Τα βήματα που πήγα για να εγγραφούν όλα τα συγκροτήματα στο φόρουμ πήγε λίγο σαν αυτό:
Ανοίξτε τη βάση δεδομένων Band
για κάθε μία (Band) (
Δημιουργήστε κωδικό πρόσβασης
Μετονομασία Band με το "ασφαλές" όνομα
Πιάσε και παράγουν πληροφορίες που απαιτούνται για την εισαγωγή του χρήστη
Τοποθετήστε Band σε smf_members
Αποστολή Band ένα email με τον κωδικό πρόσβασης
)
Πληροφορίες που μου είχε στη διάθεσή της από τη βάση δεδομένων μπάντα που ήταν χρήσιμη περιλαμβάνονται: bandName, bandEmail, και bandWebsite
Εδώ είναι η λειτουργία γενιά μυστικό κωδικό που χρησιμοποιείται (blatently λαμβάνονται από totallyphp.co.uk ):
λειτουργία createRandomPassword () (
$ Χαρακτήρες = "abcdefghijkmnopqrstuvwxyz023456789"?
() * 1000000); srand ((double) microtime () * 1000000)?
$ I = 0?
$ Pass = "?
while ($ i <= 7) (
33; $ Num = rand ()% 33?
$ Tmp = substr ($ χαρακτήρες, $ num, 1)?
$ Pass = $ pass. $ Tmp?
$ I + +?
)
επιστροφή $ pass?
)
Ο κωδικός πρόσβασης που δημιουργήθηκε εδώ είναι σχετικά μικρή, αλλά ήταν αρκετά καλό για τους σκοπούς μου. Οποιαδήποτε λειτουργία γενιά password θα δουλεύουν μια χαρά εδώ. Επέλεξα αυτό διότι θα ήταν εύκολο για να το θυμηθούν, αν δεν επέλεξε να την αλλάξουμε.
Πώς να το κάνουμε:
/ / Πρώτα σύνδεση με τη βάση δεδομένων μπάντα
$ Username = "bandUsername"?
$ Υποδοχής = "bandHost"?
$ Mypassword = "bandPassword"?
$ Db_name = "bandDatabase"?
("cannot connect to server"); mysql_connect ("$" υποδοχής "$ username", "$ mypassword") ή να πεθάνουν ("δεν μπορεί να συνδεθεί με τον διακομιστή")?
("cannot select DB"); mysql_select_db ("$ db_name") ή να πεθάνουν ("Δεν μπορείτε να επιλέξετε DB")?
/ / Τώρα αρπάξει όλα τα συγκροτήματα από τη βάση δεδομένων
$ Query = "SELECT * FROM allBands"?
$ Συγκροτήματα = mysql_query ($ query) ή να πεθάνουν ("Ρυθμ Σφάλμα 2222b")?
$ UserRows = mysql_num_rows ($ ζώνες)?
/ / Τώρα αφήνει να συνδεθεί με το SMF db
$ Υποδοχής = "smfhost"? / / Όνομα Host
$ Username = "smfuser? / / Username Mysql
$ Mypassword = "smfpassword"? / / Password Mysql
$ Db_name = "smfdatabase"? / / Το όνομα Database
("cannot connect to server"); mysql_connect ("$" υποδοχής "$ username", "$ mypassword") ή να πεθάνουν ("δεν μπορεί να συνδεθεί με τον διακομιστή")?
("cannot select DB"); mysql_select_db ("$ db_name") ή να πεθάνουν ("Δεν μπορείτε να επιλέξετε DB")?
/ / $ Vaild_chars πρόκειται να είναι η σειρά των επιτρεπόμενων χαρακτήρων για ονόματα χρηστών. Αποφάσισα να επιτρέπει μόνο γράμματα και αριθμούς. Υπάρχουν και άλλοι χαρακτήρες που θα μπορούσαν να χρησιμοποιηθούν ότι δεν θα προκαλέσει κάποιο πρόβλημα, αλλά για το ύφος λόγους που αποφάσισε να πάει με only γράμματα και οι αριθμοί
$ Valid_chars = "abcdefghijklmnopqrstu vwxyz 0 1 2 3 4 5 6 7 8 9"?
$ Valid_chars = explode ("", $ valid_chars)?
/ / Τώρα πρέπει να βρόχο μέσα από κάθε μπάντα
){ για ($ i = 0? $ i <$ userRows? $ i + +) (
($bands)){ if ($ γραμμή = mysql_fetch_assoc ($ ζώνες)) (
/ / Εξαγωγή μπάντα πληροφορίες, η
εκχύλισμα ($ γραμμή)?
/ / Δημιουργήστε έναν κωδικό πρόσβασης για το συγκρότημα
$ RealPassword = createRandomPassword ()?
/ / Θα επιλέξετε να επαναλάβω τα bandname και τον κωδικό πρόσβασης ως μέρος της διόρθωσης μου και έτσι μπορώ να δω τη λειτουργία, δεδομένου ότι τα έργα
echo ("<br/> $ bandName - $ realPassword")?
$ NewBand = ""?
/ / Για κάθε γράμμα του ονόματος της μπάντας πρόκειται να κοιτάξουμε να δούμε αν ταιριάζει με έγκυρο χαρακτήρα από $ valid_chars. Αυτό δεν πρόκειται να απαλλαγούμε από αυτό και περικόψτε το όνομα του συγκροτήματός
($bandName); $j ++ ){ για ($ j = 0? $ j <strlen ($ bandName)? $ j + +) (
($band[$j])); $ Temp = str_replace ($ valid_chars, "X", strtolower ($ μπάντας [$ j]))?
if ($ temp == "X")
$ NewBand = $ newBand. $ Μπάντα [$ j]?
)
/ / Θα επαναλάβω το νέο όνομα για τον ίδιο λόγο, επαναλαμβάνω το παλιό όνομα και τον κωδικό πρόσβασης
echo ("- $ newBand")?
/ / Έχουμε το νέο όνομα Band .... Τώρα ας αρχίσουμε buliding τις πληροφορίες που χρειαζόμαστε για να εισάγετε στο db ...
$ MemberName = $ newBand?
$ Πραγματικό όνομα = $ newBand? / / Ορίζω το πραγματικό του όνομα και τα ονόματα των μελών της ίδιας. Οι ζώνες μπορεί να αλλάξει εάν θέλουν
$ Το email = $ bandEmail?
$ WebsiteUrl = $ bandWebsite? / / Από το έχω ζώνες »ιστοσελίδες του θα μπορούσε κάλλιστα να τεθεί
$ WebsiteTitle = $ newBand?
$ Is_activated = 1?
$ ID_POST_GROUP = 4?
($memberName).$realPassword); //Password must be encrypted $ Password = sha1 (strtolower ($ memberName). $ RealPassword)? / / Ο κωδικός πρόσβασης πρέπει να είναι κρυπτογραφημένα
/ / Σιγουρευτείτε μέλος isn'ta τους με το ίδιο όνομα στη βάση δεδομένων του SMF. Δεν θέλουμε να τεθεί κατά λάθος κάποιος δυο φορές
$ Query = "SELECT * FROM smf_members WHERE memberName" $ memberName = '?
("Config Error 2222343242b"); $ Result = mysql_query ($ query) ή να πεθάνουν ("Ρυθμ Σφάλμα 2222343242b")?
$ Nrows = mysql_num_rows ($ αποτέλεσμα)?
/ / Αν το όνομα του μέλους βρεθεί δεν κάνουν τίποτα
if ($ nrows> 0) ()
else (
/ / Αν ο χρήστης δεν έχει ήδη εγγραφεί για το φόρουμ, να το πράξουν και να στείλετε ένα email ....
$ Query = "INSERT INTO smf_members (memberName, πραγματικό όνομα, Το email, is_activated, ID_POST_GROUP, passwd, websiteUrl, websiteTitle) VALUES ('$ memberName', '$ πραγματικό όνομα', '$ Το email', '$ is_activated', '$ ID_POST_GROUP» , '$ password "," $ websiteUrl', '$ websiteTitle') "?
("Config Error 2232 "); $ Result = mysql_query ($ query) ή να πεθάνουν ("Ρυθμ Error 2232")?
/ / Τώρα πρέπει να στείλετε το συγκρότημα ένα e-mail
$ To = $ Το email?
$ Subject = "όνομα χρήστη και κωδικό πρόσβασης forum σας"?
/ / Από την
$ Header = "από: Me <me@mysite.com>"?
/ / Το μήνυμα σας
$ Μήνυμα .= "όνομα χρήστη και κωδικός πρόσβασής σας αναφέρονται παρακάτω. Μπορείτε να αλλάξετε είτε σε οποιαδήποτε στιγμή. Εάν δεν θέλετε να συμμετάσχουν στο φόρουμ μας, ότι δεν υπάρχει πρόβλημα. Απλά συνδεθείτε ποτέ και θα είναι σαν τίποτα δεν συνέβη ποτέ. \ r \ n "?
$ Μήνυμα .= "Όνομα Χρήστη: $ memberName Password: $ realPassword \ r \ n"?
/ / Αποστολή email
$ Απεσταλμένα = mail ($ να, με την επιφύλαξη $, $ μήνυμα, $ header)?
if ($ απεσταλμένα)
echo ("- ΝΑΙ!")?
/ / Αυτό είναι το τελευταίο μέρος της ηχώ μας. Το "-ΝΑΙ!" μόνο θα τυπωθεί εάν ένα ηλεκτρονικό ταχυδρομείο έχει σταλεί. Έτσι, μια πλήρης γραμμή εκτύπωση θα είναι κάπως έτσι:
/ / Διαμάχη Αδάμ - 4s6vsxag - AdamStrife - ΝΑΙ!
)
)
)