30.7.2 上载新的新闻信件
最后,我们再来看看该应用程序的关键部分:上载并发送新闻信件到邮件列表。
当管理员点击"Create Mail"按钮时,将触发create-mail动作,如下所示:
case'create-mail':
display_mail_form(get_email());
break;
管理员将看到如图30-12所示的表单。
图 30-12 "Create Mail"选项提供了可供管理员上载新闻信件文件的界面
请记住,对于该程序,我们假设管理员已经在脱机环境中创建了HTML格式和文本格式的新闻信件,而且在发送该新闻信件之前,需要上载这两个版本的文件。我们选择用这种实现方法是为了让管理员可以使用他们最喜欢的软件创建新闻信件。这使得该程序更容易使用。
该表单有几处地方需要由管理员填写。在表单的最上方是一个下拉列表框,可供管理员选择邮件列表。管理员还必须填写新闻信件的主题——这就是最终邮件的主题行。
所有其他的表单域都是文件上载域,可以通过它们右边的"Browse"按钮分辨出来。要发送新闻信件,管理员必须给出该邮件的文本和HTML两种版本(可以根据需要进行修改)。此外,表单中还有很多可选的图像域,在这里,管理员可以上载任何嵌入到HTML的图像。这些文件必须明确指定并分别上载。
该表单与普通的上载表单相似,只是在这个例子中,我们使用它来上载多个文件。这就必然使得在表单语法与我们在另一端处理上载文件的方法上会存在一些差异。
display_mail_form()函数的代码如程序清单30-15所示。
在这里,需要注意的是我们要在一系列文本输入框中输入上载文件的名称,以及相应的文件类型。这些文件名称在程序中的命名为userfile[0]到userfile[n]。事实上,我们使用与处理复选框一样的方法来处理这些表单域,并使用数组命名惯例对其命名。
程序清单30-15 output_fns.php函数库中的display_mail_form()函数——该函数将显示文件上载表单
function display_mail_form($email,$listid=0){
//display html form for uploading a new message
global$table_width;
$list=get_all_lists();
$lists=sizeof($list);
?>
<table cellpadding="4"cellspacing="0"border="0"
width="<?php echo$table_width;?>">
<form enctype="multipart/form-data"action="upload.php"method="post">
<tr>
<td bgcolor="#cccccc">List:</td>
<td bgcolor="#cccccc">
<select name="list">
<?php
for($i=0;$i<$lists;$i++){
echo"<option value=\"".$list[$i][0]."\"";
if($listid==$list[$i][0]){
echo"selected";
}
echo">".$list[$i][1]."</option>\n";
}
?>
</select>
</td>
</tr>
<tr>
<td bgcolor="#cccccc">Subject:</td>
<td bgcolor="#cccccc">
<input type="text"name="subject"
value="<?php echo$subject;?>"
size="60"/></td>
</tr>
<tr>
<td bgcolor="#cccccc">Text Version:</td>
<td bgcolor="#cccccc">
<input type="file"name="userfile[0]"size="60"/></td>
</tr>
<tr><td bgcolor="#cccccc">HTML Version:</td>
<td bgcolor="#cccccc">
<input type="file"name="userfile[1]"size="60"/></td>
</tr>
<tr><td bgcolor="#cccccc"colspan="2">Images:(optional)
<?php
$max_images=10;
for($i=0;$i<10;$i++){
echo"<tr><td bgcolor=\"#cccccc\">Image".($i+1)."</td>
<td bgcolor=\"#cccccc\"><input type=\"file\"
name=\"userfile[".($i+2)."]\"size=\"60\"/></td>
</tr>";
}
?>
<tr><td colspan="2"bgcolor="#cccccc"align="center">
<input type="hidden"name="max_images"
value="<?php echo$max_images;?>">
<input type="hidden"name="listid"
value="<?php echo$listid;?>">
<?php display_form_button('upload-files');?>
</td>
</form>
</tr>
</table>
<?php
}
如果想通过PHP脚本上载多个文件并且以数组方式轻松地处理它们,必须遵循这个命名惯例。
在处理该表单的脚本中,我们实际上以3个数组结束。下面,让我们来看一下这个脚本。