具有树状结构的文本论坛(六)——新建主题

    新建主题的实现文件是addnew.php,其实现代码如下:
<?    
  
if($submit == '完成,提交')
  {
    if(
$theme != "" && $content != "")
    {
      if(
$username != "" && $password != "")//在这里检测登录状态
      
{
        if(
checkuser($username$password) == true)
        {
          
session_register("username");
          
addnew($theme$username$face$oicq$email$homepage$content$REMOTE_ADDR);
          echo 
"<meta http-equiv='Refresh' content='0; url=forum.php?action=themelist'>";
          exit;
        }
        else
        {
          include(
"loginerr.php");//输出登录错误信息
        
}
      }
      else if(!
session_is_registered("username"))
      {
        echo 
"<h3><font color=#FF0000>您还没有登录,必须输入名字和密码</font></h3>";
      }
      else
      {
        
addnew($theme$username$face$oicq$email$homepage$content$REMOTE_ADDR);
        echo 
"<meta http-equiv='Refresh' content='0; url=forum.php?action=themelist'>";
        exit;
      }
    }
    else
    {
      echo 
"<h3><font color=#FF0000>您的输入不完整,主题和内容是必须填的</font></h3>";
    }
  }
      
  echo 
"<body bgcolor='#DDDDFF'>";
  echo 
"<div style='position:absolute; left:5%' ><div align='center'><h2><font color='#0000FF'>";
  echo 
"加新主题";
  echo 
"</font></h2></div>";
  echo 
"<form name='input' method='post'";  
  if(
session_is_registered("username"))
  {
    echo  
" action='forum.php?action=addnew&username=$username'>";
    echo 
"名字:".$username."<br><br>";
  }
  else
  {  
    echo 
">名字:";
    echo 
"<input type='text' name='username' maxlength='16' size='15'>&nbsp;";
    echo 
"密码:";
    echo 
"<input type='password' name='password' maxlength='16' size='15'>(必填)<br><br>";
  }
   
  echo 
"OICQ:<input type='text' name='oicq' size='8' maxlength=10 value=$oicq>&nbsp;";
  echo 
"E-mail地址:<input type='text' name='email' size='20' value=$email>";
  echo 
"&nbsp;个人主页:<input type='text' name='homepage' size='22' value=$homepage>(可不填)<br><br>";
  echo 
"新的主题:<input type='text' name='theme' size='78' maxlength=MAX_TITLE_WIDTH value=$theme>(必填)<br><br>";
           
  for(
$i 1$i <= 66$i ++)
  {
    
$str strval($i);
    if(
$i 10)
    
$str "0".$str;
    
$str "img/face".$str.".png";
    echo 
"<img src=$str width=20>";
    if(
$i != 1)
      echo 
"<input type='radio' name='face' value=$i>";
    else
      echo 
"<input type='radio' name='face' value=$i checked>";
    if(
$i%17 == 0)
      echo 
"<br>";
  }
      
  echo 
"<textarea name='content' cols=95 rows=5>$content</textarea>";
     
  echo 
"<div align=center><br><input type='submit' name='submit' value = 完成,提交>&nbsp;";  
  echo 
"<input type='reset' name='reset' value = 重新填写></div><br>";   
?>
    如果在此之前没有登录,则在加新主题的时候也可以登录,只要输入正确的用户名字和密码就可以了。
    登录成功后就调用addnew()函数来实现加新主题,这个函数在funcdef.php文件中定义如下:
<?
  
//将新增主题写入文件
  
function addnew($title$maker$face$oicq$email$homepage$content ,$ip)
  {
    
$id get_theme_id();
    
$new_total_theme get_total_theme()+ 1;
    
$totalnotes get_total_note();
    
    
//改写temelist文件
    
if(!file_exists("rec/themelist"))
    {
       
$fp fopen("rec/themelist""w+");
       
fwrite($fp"0\n0\n");
       
fclose($fp);
    }
    
$fp fopen("rec/themelist""r");
    
$newfp fopen("rec/themelist.bak""w+");
    
    
fgets($fpMAX_READ_BYTES);
    
fgets($fpMAX_READ_BYTES);
    
fwrite($newfp$new_total_theme);
    
fwrite($newfp"\n");
    
fwrite($newfp$totalnotes 1);
    
fwrite($newfp"\n");
    while(!
feof($fp))
    {
      
fwrite($newfpfgets($fpMAX_READ_BYTES));
    }
    
fwrite($newfp$id."\t");
    
fwrite($newfp$title."\t");
    
fwrite($newfp$maker."\t");
    
$timestr date("Y.m.d,H:i");
    
fwrite($newfp$timestr."\t");
    
fwrite($newfp"1\n");
    
    
fclose($newfp);
    
fclose($fp);
    
copy("rec/themelist.bak""rec/themelist");
    
unlink("rec/themelist.bak");
    
    
//创建新主题对应的文件
    
$fp fopen("rec/".$id"w+");
    
fwrite($fp"0.\t");
    
fwrite($fp"$title\t");
    
fwrite($fp"$face\t");
    
fwrite($fp"$maker\t");    
    
fwrite($fp"$timestr\t");
    
fwrite($fp"$ip\t");
    
fwrite($fp"$oicq\t");    
    
fwrite($fp"$email\t");
    
fwrite($fp"$homepage\t");
    
$content ascii2html($content);
    
fwrite($fp"$content\n");  
    
fclose($fp);
  }
?>
   而这个函数中还用了一个get_theme_id()函数来获取新主题的ID,这个ID不一定等于总主题数的,因为有些主题会被删除。下面是该函数的定义:
<?
  
//获取新建主题的ID
  
function get_theme_id()
  {
    if(!
file_exists("rec/themelist"))
    {
       
$fp fopen("rec/themelist""w+");
       
fwrite($fp"0\n0\n");
       
fclose($fp);
    }
    
$fp fopen("rec/themelist""r");
    while(!
feof($fp))
    {
      
$try fgets($fpMAX_READ_BYTES);
      if(
$try != "")
        
$rows $try;
    }
    
fclose($fp);
    
$id intval(strtok($rows"\t")) + 1;
    return 
$id;
  }
?>
    下次将介绍回复主题部分。(未完待续)