How to Manually Insert a User Into an SMF Forum Using PHP
This specific example is for SMF 1.1.5. I can’t guarantee it will work with any other version.
So you run Simple Machine Forum Software and want to manually enter a user? No problem. I know this problem seems very specific, but the ideas explained here can be adapted to other types of forums and other database driven software packages such as Wordpress. Before we get into exactly how to do this, let’s take a look at how Simple Machine Forums keeps track of users. In the SMF database there is a table called smf_members. The smf_members structure looks like this:
| Field | Type | Null | Key | Default | Extra |
|---|---|---|---|---|---|
| ID_MEMBER | mediumint(8) unsigned | NO | PRI | NULL | auto_increment |
| memberName | varchar(80) | NO | MUL | ||
| dateRegistered | int(10) unsigned | NO | MUL | 0 | |
| posts | 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 | text | NO | |||
| pm_ignore_list | text | NO | |||
| messageLabels | text | NO | |||
| passwd | varchar(64) | NO | |||
| emailAddress | tinytext | NO | |||
| personalText | tinytext | NO | |||
| gender | tinyint(4) unsigned | NO | 0 | ||
| birthdate | date | NO | MUL | 0001-01-01 | |
| websiteTitle | tinytext | NO | |||
| websiteUrl | tinytext | NO | |||
| location | 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 | |||
| signature | text | NO | |||
| timeOffset | float | 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 we need to pay attention to:
- memberName – Self Explanitory.
- dateRegistered – Isn’t neccessary, but if not filled out the date registered displays as December 31st 1969. The date is saved as an epoch timestamp. Don’t know how to calculate timestamps in your head? No problem. I use the free generator found here.
- realName – Should be inserted. When I’m not sure I just repeat memberName here.
- emailAddress – Self Explanitory.
- is_activated – Must be set to 1 since we are manually activating a member.
- ID_POST_GROUP – I won’t lie. I’m not sure what this is, but it always seems to be set to 4. So…. I always set it to 4. Not the best way to program, but what can you do?
- passwd – The password you want to give the new user. It is impossible to figure out how to enter without looking at the SMF documentation. The proper code to encrypt a SMF password for the database looks like this:
$passwd = sha1(strtolower($memberName).$password)
In the above line of code, $password is the user’s actual password.
How to Do It:
//First, connect to the SMF database
$host="hostname"; // Host name
$username="username"; // Mysql username
$mypassword="password"; // Mysql password
$db_name="username"; // Database name
mysql_connect("$host", "$username", "$mypassword")or die("cannot connect to server");
mysql_select_db("$db_name")or die("cannot select DB");
$memberName = "ironMan";
$realName = "Tony Stark";
$emailAddress = "ironMan@ironMan.com";
$is_activated = 1;
$ID_POST_GROUP = 4;
$password = “Tony1234″;
$password = sha1(strtolower($memberName).$password);
$dateRegistered = 1216951200; // 7-25-2008 2 AM
$query = "INSERT INTO smf_members(memberName, realName, emailAddress, is_activated, ID_POST_GROUP, passwd, dateRegistered) VALUES(’$memberName’, ‘$realName’, ‘$emailAddress’, ‘$is_activated’, ‘$ID_POST_GROUP’, ‘$password’, ‘$dateRegistered’)";
$result = mysql_query($query) or die ("SMF Error 101.234 ");
That’s all there is to it!








































