JavaScript Editor Javascript source editor     Web programming 

Team LiB
Previous Section Next Section

Creating the Input Forms and Scripts

Before you can add any posts, you must add a topic to the forum. It is common practice in forum creation to add the topic and the first post in that topic at the same time. From a user's point of view, it doesn't make much sense to add a topic and then go back, select the topic, and add a reply. You want the process to be as smooth as possible.

Listing 20.1 shows the form for a new topic creation, which includes a space for the first post in the topic.

Listing 20.1. Form for Adding a Topic
 1: <html>
 2: <head>
 3: <title>Add a Topic</title>
 4: </head>
 5: <body>
 6: <h1>Add a Topic</h1>
 7: <form method=post action="do_addtopic.php">
 8: <p><strong>Your E-Mail Address:</strong><br>
 9: <input type="text" name="topic_owner" size=40 maxlength=150>
10: <p><strong>Topic Title:</strong><br>
11: <input type="text" name="topic_title" size=40 maxlength=150>
12: <P><strong>Post Text:</strong><br>
13: <textarea name="post_text" rows=8 cols=40 wrap=virtual></textarea>
14: <P><input type="submit" name="submit" value="Add Topic"></p>
15: </form>
16: </body>
17: </html>

Seems simple enoughthe three fields shown in the form, which you can see in Figure 20.1, are all you need to complete both tables; your script and database can fill in the rest. Save Listing 20.1 as something like addtopic.html and put it in your Web server document root so that you can follow along.

Figure 20.1. The topic creation form.

To create the entry in the forum_topics table, you use the values from the $_POST[topic_title] and $_POST[topic_owner] variables from the input form. The topic_id and topic_create_time fields will be automatically incremented and added via the now() MySQL function, respectively.

Similarly, in the forum_posts table, you use the values of $_POST[post_text] and $_POST[topic_owner] from the input form, and the post_id, post_create_time, and the topic_id fields will be automatically incremented or otherwise supplied. Because you need a value for the topic_id field to be able to complete the entry in the forum_posts table, you know that query must happen after the query to insert the record in the forum_topics table.

Listing 20.2 creates the script to add these records to the table.

Listing 20.2. Script for Adding a Topic
 1: <?php
 2: //check for required fields from the form
 3: if ((!$_POST[topic_owner]) || (!$_POST[topic_title])
 4:     || (!$_POST[post_text])) {
 5:    header("Location: addtopic.html");
 6:    exit;
 7: }
 9: //connect to server and select database
10: $conn = mysql_connect("localhost", "joeuser", "somepass")
11:     or die(mysql_error());
12: mysql_select_db("testDB",$conn) or die(mysql_error());
14: //create and issue the first query
15: $add_topic = "insert into forum_topics values ('', '$_POST[topic_title]',
16:     now(), '$_POST[topic_owner]')";
17: mysql_query($add_topic,$conn) or die(mysql_error());
19: //get the id of the last query
20: $topic_id = mysql_insert_id();
22: //create and issue the second query
23: $add_post = "insert into forum_posts values ('', '$topic_id',
24:     '$_POST[post_text]', now(), '$_POST[topic_owner]')";
25: mysql_query($add_post,$conn) or die(mysql_error());
27: //create nice message for user
28: $display_block = "<P>The <strong>$topic_title</strong> topic has been created.</p>";
29: ?>
30: <html>
31: <head>
32: <title>New Topic Added</title>
33: </head>
34: <body>
35: <h1>New Topic Added</h1>
36: <?php echo $display_block; ?>
37: </body>
38: </html>

Lines 37 check for the three required fields we need to complete both tablesthe topic owner, a topic title, and some text for the post. If either one of these fields is not present, the user is redirected to the original form.

Lines 1012 form the database connection, which should be familiar to you by now. Lines 1517 create and insert the first query, which adds the topic to the forum_topics table. Note that the first field is left blank, so the automatically incrementing value is added by the system per the original table definition. The MySQL now() function is used to time stamp the record with the current time, at insertion. The other fields in the record are completed using values from the form. Line 20 shows the use of a very handy function: mysql_insert_id(). This function retrieves the primary key ID of the last record inserted into the database by this script. In this case, mysql_insert_id() gets the id value from the forum_topics table, which will become the entry for the topic_id field in the forum_posts table.

Lines 2325 create and insert the second query, again using a mixture of information known and supplied by the system. The second query adds the text of the user's post to the forum_posts table. Line 28 simply creates a display string for the user, and the rest of the script rounds out the display.

Save this listing as do_addtopic.phpthe name of the action in the previous scriptand place it in the document root of your Web server. Complete the form and then submit it, and you should see the New Topic Added message. Figures 20.2 and 20.3 show the sequence of events.

Figure 20.2. Adding a topic and first post.

Figure 20.3. Successful addition of a topic and first post.

In the next section, you'll put together two more pieces of the puzzle: displaying the topics and posts, and replying to a topic.

    Team LiB
    Previous Section Next Section

    JavaScript Editor Javascript source editor     Web programming