Como inserir a man un usuario nun foro SMF Utilizando PHP

Posta en SMF (Simple Machine Foro) , php por ShortLikeAFox o 28 de xullo de 2008

Este exemplo específico para SMF 1.1.5. Non podo garantir que ha funcionar con calquera outra versión.

Entón corre Simple Machine Foro de Software e pretende introducir a man un usuario? Sen problemas. Sei que este problema parece ser moi específico, pero as ideas aquí expostas pode ser adaptado para outros tipos de foros e outros paquetes de software de base de datos orientado como o WordPress. Antes de entrarmos exactamente como facelo, imos dar un ollo a como Simple Machine Foros mantén rexistro de usuarios. Na base de datos SMF existe unha táboa chamada smf_members. O smf_members estrutura parecida con esta:

Campo Tipo Nulo

Clave Omisión Extra
ID_MEMBER MEDIUMINT (8) unsigned NO PRI NULL auto_increment
memberName varchar (80) NO MUL
dateRegistered int (10) unsigned NO MUL 0
artigos MEDIUMINT (8) unsigned NO MUL 0
ID_GROUP smallint (5) unsigned NO MUL 0
lngfile TINYTEXT NO MUL
lastlogin int (10) unsigned NO MUL 0
realname TINYTEXT NO
instantMessages smallint (5) NO 0
Unreadmessages smallint (5) NO 0
buddy_list texto NO
pm_ignore_list texto NO
messageLabels texto NO
passwd varchar (64) NO
emailAddress TINYTEXT NO
personalText TINYTEXT NO
xénero tinyint (4) unsigned NO 0
data de nacemento data NO MUL 0001-01-01
websiteTitle TINYTEXT NO
WebSiteUrl TINYTEXT NO
localización TINYTEXT NO
ICQ TINYTEXT NO
AIM varchar (16) NO
YIM varchar (32) NO
MSN TINYTEXT NO
hideEmail tinyint (4) NO 0
showOnline tinyint (4) NO 1
timeformat varchar (80) NO
sinatura texto NO
timeOffset flutuar NO 0
avatar TINYTEXT NO
pm_email_notify tinyint (4) NO 0
karmaBad smallint (5) unsigned NO 0
karmaGood smallint (5) unsigned NO 0
usertitle TINYTEXT NO
notifyAnnouncements tinyint (4) NO 1
notifyOnce tinyint (4) NO 1
notifySendBody tinyint (4) NO 0
notifyTypes tinyint (4) NO 2
memberIP TINYTEXT NO
memberIP2 TINYTEXT NO
secretQuestion TINYTEXT NO
secretAnswer varchar (64) NO
ID_THEME tinyint (4) unsigned NO 0
is_activated tinyint (3) unsigned NO 1
validation_code varchar (10) NO
ID_MSG_LAST_VISIT int (10) unsigned NO 0
additionalGroups TINYTEXT NO
smileySet varchar (48) NO
ID_POST_GROUP smallint (5) unsigned NO MUL 0
totalTimeLoggedIn int (10) unsigned NO 0
passwordSalt varchar (5) NO

Fields é preciso prestar atención:

  • memberName - auto-explicativas.
  • dateRegistered - non é necesario, pero se non é cuberto a data rexistrada exhibe como 31 decembro de 1969. A data é gardada como un timestamp época. Non sei como calcular timestamps na súa cabeza? Sen problemas. Eu uso o xerador de libres atopados aquí .
  • realname - deben ser inseridos. Cando non estou seguro de que simplemente repetir memberName aquí.
  • emailAddress - auto-explicativas.
  • is_activated - Debe ser definido como xa que estamos a activar manualmente un membro.
  • ID_POST_GROUP - Eu non vou mentir. Non estou seguro que é iso, pero ela parece ser sempre axustado para 4. Entón .... Eu sempre define-la a 4. Non é a mellor forma de programa, pero o que podes facer?
  • passwd - O contrasinal que quere dar ao novo usuario. É imposible descubrir como entrar sen ollar a documentación do SMF. O código axeitado para o cifrado o contrasinal da base de datos SMF coma este:

($memberName).$password) $ Passwd = sha1 (strtolower ($ memberName). $ Contrasinal)

Na liña de código anterior, $ contrasinal é o contrasinal real do usuario.

Como facer:

/ / Primeiro, ligue para a base de datos SMF

$ Host = hostname "" / / nome do host
$ Username = "username" / / username MySQL
minhasenha = $ contrasinal "; / contrasinal MySQL
db_name $ username = "" / / nome da base de datos

("cannot connect to server"); mysql_connect ("$ host", $ nome de usuario "," $ minhasenha ") or die (" Non se pode conectar ao servidor ");
("cannot select DB"); mysql_select_db ("$ db_name") or die ("Non se pode seleccionar a DB");

memberName ironman $ = "";
realname $ = "Tony Stark";
emailAddress ironMan@ironMan.com $ = "";
$ Is_activated = 1;
$ ID_POST_GROUP = 4;

$ Contrasinal = "Tony1234";

($memberName).$password); $ Contrasinal = sha1 (strtolower ($ memberName). $ Contrasinal);

$ DateRegistered = 1216951200 / / 2008/07/25 02:00

$ Query = "insert into smf_members (memberName, realname, emailAddress, is_activated, ID_POST_GROUP, passwd, dateRegistered) value ('$ memberName', '$ realname', '$ emailAddress', '$ is_activated', '$ ID_POST_GROUP', ' $ contrasinal ',' $ dateRegistered ') ";
("SMF Error 101.234 "); $ Resultado = mysql_query ($ query) or die ("Erro SMF 101,234);

Isto é todo o que existe para ela!