**One hour of work; perfect for RAC newbies!** This project simply reads and writes values from three tiny database tables, so that we can very quickly prototype a special wiki project. Everything is specified here; you'll be done in an hour. Can't get much easier than that! :-)
Use a **[url removed, login to view]** file which contains the directory name (without a trailing slash) where commonly used files can be found. This then points to **[url removed, login to view]**, which contains the server's **hostname**, e.g., [url removed, login to view] (for cookies), **baseURL**, e.g., [url removed, login to view], **dbHostname**, **dbName**, **dbUsername**, and **dbPassword**. This will also be the location of **[url removed, login to view]** which will contain common functions such as **isLoggedIn()** (which should probably return MemberID or 0 if not logged in).
The database schema is as follows:
CREATE TABLE `Members` (
`MemberID` INT( 4 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`Nickname` VARCHAR( 31 ) NOT NULL ,
`Password` VARCHAR( 31 ) NOT NULL ,
`Status` CHAR( 1 ) NOT NULL DEFAULT 'U',
# U = Unconfirmed, S = Subscribed, X = Unsubscribed
`Name` VARCHAR( 63 ) NOT NULL ,
`Email` VARCHAR( 255 ) NOT NULL ,
`Joined` TIMESTAMP NULL ,
UNIQUE ( `Nickname` )
) TYPE = MYISAM ;
CREATE TABLE `Tags` (
`TagID` INT( 4 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`Tag` VARCHAR( 63 ) NOT NULL ,
`Created` TIMESTAMP NULL ,
UNIQUE ( `Tag` )
) TYPE = MYISAM ;
CREATE TABLE `Posts` (
`PostID` INT( 4 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`Post` VARCHAR( 255 ) NOT NULL ,
`TagID` INT( 4 ) UNSIGNED NOT NULL ,
`MemberID` INT( 4 ) UNSIGNED NOT NULL ,
`Created` TIMESTAMP NULL
) TYPE = MYISAM ;
If **[url removed, login to view]** does not receive a Nickname, then it should display a form requesting Nickname, Password, Name and Email, which then posts back to itself. Otherwise, it should attempt to insert a new row into Members with the Nickname, Password, Name and Email. Display any error (typically duplicate Nickname) or offer a link to login.php.
If **[url removed, login to view]** does not receive a Nickname, then it should display a form requesting Nickname and Password, which then posts back to itself. Otherwise, it should check that the Password is correct, and set two cookies for the Nickname and Password.
**[url removed, login to view]** should delete those cookies.
If **[url removed, login to view]** does not receive a Post with at least one character, then it should display a form requesting one, which then posts back to itself. Otherwise, it should ensure that the member isLoggedIn() (displaying an error if they are not) and then follows this logic:
Isolate the Tag, which is a string of the first one or more characters from the Post containing *only* letters (upper or lower case), numbers, and hyphens. Fold uppercase into lowercase before the next step! Attempt to insert this Tag into the Tags table, but an error is ok (as it may already be there). Whether or not this succeeded, determine the TagID. Insert a new row into Posts, with the Post, TagID, and MemberID (from isLoggedIn()).
If **[url removed, login to view]** does not receive a Tag, then it should output all of them (ordered by Tag), linking to each one. (e.g., "[a href=./?tag=computers]computers[/a]") Otherwise, it should output a list of all Posts, Nicknames, and Created date/times, ordered by Created, for that given Tag.
* * *I'm pretty flexible and easy to work with. I tried to make sure that this job is as completely specified as humanly possible.
If you have **any** questions, *please* ask them! I have found that it is far better to risk a bit of embarrassment than to spend time working on an assumption which later proves to be wrong. Do not worry that a question may seem silly; just *let me know* and I will be very happy to answer you!
We've been a Buyer here since July '05, with a rating of 9.91 ("Excellent") out of 10, with over 70 ratings, and we've now paid on over 90 jobs. We've completed both security verifications, we have a non-action ratio under 5% ("very good"), and we've lost 0 out of 8 mediations / arbitrations.
| ! | PGP is **not** required for this project. |
| ! | An NDA is **not** required for this project. |
We will retain full legal rights to the code and/or data upon completion. All code and/or data is and becomes *our* intellectual property! You will *not* have any rights to the code and/or data in any fashion.
**Thank you for your consideration and for bidding through RentACoder!**
* * *Copyright © 2007, RentACoder Buyer
[notecom]. **All Rights Reserved.** Reproduction without permission is strictly prohibited.
* * *
1) Complete and fully-functional working program(s) in executable form as well as complete source code of all work done.
2) Deliverables must be in ready-to-run condition, as follows (depending on the nature of the deliverables):
a) For web sites or other server-side deliverables intended to only ever exist in one place in the Buyer's environment--Deliverables must be installed by the Seller in ready-to-run condition in the Buyer's environment.
b) For all others including desktop software or software the buyer intends to distribute: A software installation package that will install the software in ready-to-run condition on the platform(s) specified in this bid request.
3) All deliverables will be considered "work made for hire" under U.S. Copyright law. Buyer will receive exclusive and complete copyrights to all work purchased. (No GPL, GNU, 3rd party components, etc. unless all copyright ramifications are explained AND AGREED TO by the buyer on the site per the coder's Seller Legal Agreement).
Linux, MySQL, PHP