新建主题的实现文件是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'> "; 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> "; echo "E-mail地址:<input type='text' name='email' size='20' value=$email>"; echo " 个人主页:<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 = 完成,提交> "; 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($fp, MAX_READ_BYTES);
fgets($fp, MAX_READ_BYTES);
fwrite($newfp, $new_total_theme);
fwrite($newfp, "\n");
fwrite($newfp, $totalnotes + 1); fwrite($newfp, "\n");
while(!feof($fp))
{
fwrite($newfp, fgets($fp, MAX_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($fp, MAX_READ_BYTES);
if($try != "")
$rows = $try; }
fclose($fp);
$id = intval(strtok($rows, "\t")) + 1;
return $id; }
?>
下次将介绍回复主题部分。(未完待续)
|
|