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 21.1 shows the form for a new topic creation, which includes a space for the first post in the topic.

Listing 21.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"/></p> 10: <p><strong>Topic Title:</strong><br/> 11: <input type="text" name="topic_title" size="40" maxlength="150"/></p> 12: <p><strong>Post Text:</strong><br/> 13: <textarea name="post_text" rows="8" cols="40" wrap="virtual"></textarea></p> 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 21.1, are all you need to complete both tables; your script and database can fill in the rest. Save Listing 21.1 as something like addtopic.html and put it in your web server document root so that you can follow along.

Figure 21.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 21.2 creates the script to add these records to the table.

Listing 21.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"); 5:      exit; 6:  } 7: 8:  //connect to server 9:  $mysqli = mysqli_connect("localhost", "joeuser", "somepass", "testDB"); 10: 11: //create and issue the first query 12: $add_topic = "INSERT INTO forum_topics (topic_title, topic_create_ 13:              time, topic_owner) VALUES ('".$_POST["topic_title"]."',now(), 14:               '".$_POST["topic_owner"]."')"; 15: $add_topic_res = mysqli_query($mysqli, $add_topic_sql) 16:                  or die(mysqli_error($mysqli)); 17: 18: //get the id of the last query 19: $topic_id = mysqli_insert_id($mysqli); 20: 21: //create and issue the second query 22: $add_post_sql = "INSERT INTO forum_posts (topic_id,post_text, 23:                  post_create_time, post_owner) VALUES ('".$topic_id."', 24:                 '".$_POST["post_text"]."', now(), 25:                 '".$_POST["topic_owner"]."')"; 26: $add_post_res = mysqli_query($mysqli, $add_post_sql) 27:                 or die(mysqli_error($mysqli)); 28: 29:  //close connection to MySQL 30: mysqli_close($mysqli); 31: 32: //create nice message for user 33: $display_block = "<P>The <strong>".$_POST["topic_title"]."</strong> 34: topic has been created.</p>"; 35: ?> 36: <html> 37: <head> 38: <title>New Topic Added</title> 39: </head> 40: <body> 41: <h1>New Topic Added</h1> 42: <?php echo $display_block; ?> 43: </body> 44: </html>

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

Line 9 contains the database connection, which should be familiar to you by now. Lines 1216 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 19 shows the use of a handy function: mysqli_insert_id(). This function retrieves the primary key ID of the last record inserted into the database by this script. In this case, mysqli_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 2227 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. Lines 3334 simply create 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 21.2 and 21.3 show the sequence of events.

Figure 21.2. Adding a topic and first post.


Figure 21.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.




Sams Teach Yourself PHP, MySQL And Apache All in One
Sams Teach Yourself PHP, MySQL and Apache All in One (3rd Edition)
ISBN: 0672328739
EAN: 2147483647
Year: 2004
Pages: 327

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net