If anyone has read the book "Core PHP programming" you'll notice it has a BBS script near the end of the book. It's totally confusing me, here's what it looks like:
<HEAD>
<TITLE>Leon's BBS</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<?
/******************************************************
BBS v1.0
Code: PHP 3
Author: Leon Atkinson <leon.atkinson@clearink.com>
Simple BBS system using MySQL. Make the following
table:
CREATE TABLE bbsMessage
(
ID INT NOT NULL AUTO_INCREMENT,
Title VARCHAR(64),
Poster VARCHAR(64),
Created DATETIME,
Parent INT,
Body BLOB,
PRIMARY KEY(ID)
);
*******************************************************/
printf("<H1>Leon's BBS</H1>\n");
/* set up database */
mysql_pconnect("www.yoursever.com", "httpd");
$Database = "yourdb";
/****************************************************************
recursive function that spits out all descendent messages
****************************************************************/
function showMessages($parentID)
{
global $Database;
$dateToUse = Date("U");
echo "<UL>\n";
/* show all the wings */
$Query = "SELECT * FROM bbsMessage ";
$Query = $Query . "WHERE Parent=$parentID ";
$Query = $Query . "ORDER BY Created ";
$result = mysql($Database,$Query);
$numRows = mysql_NumRows($result);
$RowCount = 0;
while($RowCount < $numRows)
{
$messageID = mysql_result($result,$RowCount,"ID");
$messageTitle = mysql_result($result,$RowCount,"Title");
$messageCreated = mysql_result($result,$RowCount,"Created");
$messageParent = mysql_result($result,$RowCount,"Parent");
/* put a line telling what the wing is */
printf("<LI>($messageCreated) <A HREF=\"bbs.htma?messageID=$messageID\">$messageTitle</A><BR>\n");
!!! Assuming that ParentID was equal to 4, this would print the first result it finds in
!!! the query, correct? And the first one is the parent correct? What is parent supposed to equal anyway?
/* call getWingContents to get this branch */
showMessages($messageID);
!!! I'm lost here.. the $messageID is equal to the auto_incrementing ID in the database,
!!! right? And aren't you calling the same function that we are creating right now?
!!! I didn't know that was possible. I don't understand how using the auto_increment ID
!!! will show the children. Basically i'm totally confused, I would appreciate it if you
!!! could somehow explain how this works in detail, or in somewhat easier terms.
$RowCount++;
}
echo "</UL>\n";
}
/****************************************************************
print out a form for adding a message with parent id given
****************************************************************/
function postForm($parentID, $useTitle)
{
printf("<FORM ACTION=\"bbs.htma\" METHOD=\"post\">\n");
printf("<INPUT TYPE=\"hidden\" NAME=\"inputParent\" VALUE=\"$parentID\">");
printf("<INPUT TYPE=\"hidden\" NAME=\"ACTION\" VALUE=\"POST\">");
printf("<TABLE BORDER=\"1\" CELLSPACING=\"0\" CELLPADDING=\"5\" WIDTH=\"400\">\n");
printf("<TR><TD WIDTH=\"100\"><B>Title</B></TD>");
printf("<TD WIDTH=\"300\"><INPUT TYPE=\"text\" NAME=\"inputTitle\" SIZE=\"35\" MAXLENGTH\"64\" VALUE=\"$useTitle\"></TD></TR>\n");
printf("<TR><TD WIDTH=\"100\"><B>Poster</B></TD>");
printf("<TD WIDTH=\"300\"><INPUT TYPE=\"text\" NAME=\"inputPoster\" SIZE=\"35\" MAXLENGTH\"64\"></TD></TR>\n");
printf("<TR><TD COLSPAN=\"2\" WIDTH=\"400\">");
printf("<TEXTAREA NAME=\"inputBody\" COLS=\"45\" ROWS=\"5\"></TEXTAREA></TD></TR>\n");
printf("<TR><TD COLSPAN=\"2\" WIDTH=\"400\"><CENTER><INPUT TYPE=\"submit\" VALUE=\"Post\"></CENTER></TD></TR>\n");
printf("</TABLE>\n");
printf("</FORM>\n");
}
/******************************************************
perform actions
******************************************************/
if($ACTION != "")
{
if($ACTION == "POST")
{
$inputTitle = ereg_replace("'", "''", $inputTitle);
$inputBody = ereg_replace("'", "''", $inputBody);
$Query = "INSERT INTO bbsMessage ";
$Query .= "VALUES(0, '$inputTitle', ";
$Query .= "'$inputPoster', ";
$Query .= "now(), $inputParent, ";
$Query .= "'$inputBody')";
$result = mysql($Database,$Query);
}
}
/******************************************************
Show Message or show list of messages
******************************************************/
if($messageID > 0)
{
$Query = "SELECT * FROM bbsMessage ";
$Query = $Query . "WHERE ID=$messageID ";
$result = mysql($Database,$Query);
$numRows = mysql_NumRows($result);
$RowCount = 0;
if($RowCount < $numRows)
{
$messageID = mysql_result($result,$RowCount,"ID");
$messageTitle = mysql_result($result,$RowCount,"Title");
$messagePoster = mysql_result($result,$RowCount,"Poster");
$messageCreated = mysql_result($result,$RowCount,"Created");
$messageParent = mysql_result($result,$RowCount,"Parent");
$messageBody = mysql_result($result,$RowCount,"Body");
printf("<TABLE BORDER=\"1\" CELLSPACING=\"0\" CELLPADDING=\"5\" WIDTH=\"400\">\n");
printf("<TR><TD WIDTH=\"100\"><B>Title</B></TD><TD WIDTH=\"300\">$messageTitle</TD></TR>\n");
printf("<TR><TD WIDTH=\"100\"><B>Poster</B></TD><TD WIDTH=\"300\">$messagePoster</TD></TR>\n");
printf("<TR><TD WIDTH=\"100\"><B>Posted</B></TD><TD WIDTH=\"300\">$messageCreated</TD></TR>\n");
printf("<TR><TD COLSPAN=\"2\" WIDTH=\"400\">$messageBody</TD></TR>\n");
printf("</TABLE>\n");
postForm($messageID, "RE: $messageTitle");
}
echo "<A HREF=\"bbs.htma\">List of Messages</A><BR>";
}
else
{
printf("<H2>List of Messages</H2>\n");
/* call recursive function */
showMessages(0);
postForm(0, "");
}
?>
</BODY>