5.9 Building the message body

首先贴上到这一节所完成的代码:

form.php:

 1 <?php
 2 $errors = array();
 3 $missing = array();
 4 if (isset($_POST[‘send‘])) {
 5     $to = ‘[email protected]‘;
 6     $subject = ‘Feedback from contact form‘;
 7     $expected = array(‘name‘, ‘email‘, ‘comments‘);
 8     $required = array(‘name‘, ‘email‘, ‘comments‘);
 9     $headers = "From: [email protected]\r\n";
10     $headers .= "Content-type: text/plain; charset=utf-8";
11     require ‘./includes/mail_process.php‘;
12 }
13 ?>
14 <!DOCTYPE HTML>
15 <html>
16 <head>
17 <meta charset="utf-8">
18 <title>Contact Us</title>
19 <link href="../styles.css" rel="stylesheet" type="text/css">
20 </head>
21
22 <body>
23 <h1>Contact Us</h1>
24 <?php if ($_POST && $suspect) { ?>
25 <p class="warning">Sorry your mail could not be be sent.</p>
26 <?php } elseif ($errors || $missing) { ?>
27 <p class="warning">Please fix the item(s) indicated.</p>
28 <?php }?>
29 <form name="contact" method="post" action="<?php echo $_SERVER[‘PHP_SELF‘]; ?>">
30     <p>
31         <label for="name">Name:
32         <?php if ($missing && in_array(‘name‘, $missing)) { ?>
33         <span class="warning">Please enter your name</span>
34         <?php } ?>
35         </label>
36         <input type="text" name="name" id="name"
37         <?php
38         if ($errors || $missing) {
39             echo ‘value="‘ . htmlentities($name, ENT_COMPAT, ‘utf-8‘) . ‘"‘;
40         }
41         ?>
42         >
43     </p>
44     <p>
45         <label for="email">Email:
46         <?php if ($missing && in_array(‘email‘, $missing)) { ?>
47         <span class="warning">Please enter your email address</span>
48         <?php } elseif (isset($errors[‘email‘])) { ?>
49         <span class="warning">Invalid email address</span>
50         <?php } ?>
51         </label>
52         <input type="text" name="email" id="email"
53         <?php
54         if ($errors || $missing) {
55             echo ‘value="‘ . htmlentities($email, ENT_COMPAT, ‘utf-8‘) . ‘"‘;
56         }
57         ?>
58         >
59     </p>
60     <p>
61         <label for="comments">Comments:
62         <?php if ($missing && in_array(‘comments‘, $missing)) { ?>
63         <span class="warning">You forgot to add your comments</span>
64         <?php } ?>
65         </label>
66         <textarea name="comments" id="comments"><?php
67         if ($errors || $missing) {
68             echo htmlentities($comments, ENT_COMPAT, ‘utf-8‘);
69         }
70         ?></textarea>
71     </p>
72     <p>
73         <input type="submit" name="send" id="send" value="Send Comments">
74     </p>
75 </form>
76 <pre>
77 <?php
78 if ($_POST && $mailSent) {
79     echo htmlentities($message, ENT_COMPAT, ‘utf-8‘);
80     echo ‘Headers: ‘ . htmlentities($headers, ENT_COMPAT, ‘utf-8‘);
81 }
82 ?>
83 </pre>
84 </body>
85 </html>

email_process.php

 1 <?php
 2 $suspect = false;
 3 $pattern = ‘/Content-Type:|Bcc:|Cc:/i‘;
 4
 5 function isSuspect($val, $pattern, &$suspect) {
 6     if (is_array($val)) {
 7         foreach ($val as $item) {
 8             isSuspect($item, $pattern, $suspect);
 9         }
10     } else {
11         if (preg_match($pattern, $val)) {
12             $suspect = true;
13         }
14     }
15 }
16
17 isSuspect($_POST, $pattern, $suspect);
18
19 if (!$suspect) {
20     foreach ($_POST as $key => $value) {
21         $temp = is_array($value) ? $value : trim($value);
22         if (empty($temp) && in_array($key, $required)) {
23             $missing[] = $key;
24             $$key = ‘‘;
25         } elseif(in_array($key, $expected)) {
26             $$key = $temp;
27         }
28     }
29 }
30
31 if (!$suspect && !empty($email)) {
32     $validemail = filter_input(INPUT_POST, ‘email‘, FILTER_VALIDATE_EMAIL);
33     if ($validemail) {
34         $headers .= "\r\nReply-to: $validemail";
35     } else {
36         $errors[‘email‘] = true;
37     }
38 }
39
40 if (!$suspect && !$missing && !$errors) {
41     $message = ‘‘;
42     foreach ($expected as $item) {
43         if (isset($$item) && !empty($$item)) {
44             $val = $$item;
45         } else {
46             $val = ‘Not selected‘;
47         }
48         if (is_array($val)) {
49             $val = implode(‘, ‘, $val);
50         }
51         $item = str_replace(array(‘_‘, ‘-‘), ‘ ‘, $item);
52         $message .= ucfirst($item) . ": $val\r\n\r\n";
53     }
54     $message = wordwrap($message, 70);
55
56     $mailSent = true;
57 }

知识点1:PHP中如何声明变量?

很简单的知识,只是我刚好忘记了,这个时候再复习一下吧。

主要资料:PHP.NET/MANUAL:http://php.net/manual/zh/language.variables.basics.php(请仔细阅读,虽然简单,但也有很多小的知识)。

关于变量的初始化,有两个例子:

例子1:

1 <?php
2 $test;
3 if($test){
4     echo ‘$test is set‘;
5 }else{
6     echo ‘$test is not set yet‘;
7 };
8 ?>

以上代码输出:

Notice: Undefined variable: test in H:\xampp\htdocs\test\test.php on line 3

$test is not set yet

例子2:

1 <?php
2 $test;
3 if(isset($test)){
4     echo ‘$test is set‘;
5 }else{
6     echo ‘$test is not set yet‘;
7 };
8 ?>

以上代码输出(E文不好,也许set用在此处不对,但是能明白意思就行~~):

$test is not set yet

知识点2:foreach语句;

从这一章的例子来看,这个语句非常常用,首先看看几个比较权威的参考文档:

首先,关于数组的知识,请看另一篇随笔:http://www.cnblogs.com/huaziking/p/4067487.html

PHP.net/manual:http://cn2.php.net/manual/zh/control-structures.foreach.php

我以前对遍历的概念有误解,现在说一下自己的基本理解:foreach不是创造一个新数组,也不是将数组分割成一对一对的值,而是这个数组本来就存在,foreach是告诉机器:请把这个数组给我找出来,然后按照{}里面的语句进行一些操作。

foreach的内容比较多,可以看看另一篇单独介绍它的文章:http://www.cnblogs.com/huaziking/p/4068340.html

知识点3:in_array

参考资料:PHP手册:http://cn2.php.net/manual/zh/function.in-array.php

in_array是个很简单的函数,意思是:在数组中搜索给定的值。

基本形式是:

bool in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] )

首先,整个语句的返回值是boolean,如果找到了就是true,如果没有找到就是false。

parameter1:$needle  待搜索的值,可以是任意类型的值。

1> 如果$needle是字符串的话,匹配是区分大小写的。(思考:如果我不想区分大小写,就想用模糊匹配该怎么去做呢?)

1 <?php
2 $os = array("Mac", "NT", "Irix", "Linux");
3 if (in_array("Irix", $os)) {
4     echo "Got Irix";
5 }
6 if (in_array("mac", $os)) {
7     echo "Got mac";
8 }
9 ?>

因为in_array是区分大小写的,in_array("mac",$os) == false; 所以以上代码会输出:

Got Irix

2>在 PHP 版本 4.2.0 之前,needle 不允许是一个数组(但是之后的版本是允许其是一个数组的)。

 1 <?php
 2 $a = array(array(‘p‘, ‘h‘), array(‘p‘, ‘r‘), ‘o‘);
 3
 4 if (in_array(array(‘p‘, ‘h‘), $a)) {
 5     echo "‘ph‘ was found\n";
 6 }
 7
 8 if (in_array(array(‘f‘, ‘i‘), $a)) {
 9     echo "‘fi‘ was found\n";
10 }
11
12 if (in_array(‘o‘, $a)) {
13     echo "‘o‘ was found\n";
14 }
15 ?>

以上代码会输出:

‘ph‘ was found ‘o‘ was found

parameter2:$haystack:定义我们要在哪个数组中进行搜索。

parameter3:$strict,boolean值,定义是否严格匹配我们要搜索的数据类型和数组中的数据类型。默认值是false。如果设置为true则 ‘1‘和1是不相等的,因为两个的数据类型是不一样的。

 1 <?php
 2 $a = array(‘1.10‘, 12.4, 1.13);
 3
 4 if (in_array(‘12.4‘, $a, true)) {
 5     echo "‘12.4‘ found with strict check\n";
 6 }
 7
 8 if (in_array(1.13, $a, true)) {
 9     echo "1.13 found with strict check\n";
10 }
11 ?>

以上代码会输出:(说明这个时候数据类型也是要求完全匹配的。)

1.13 found with strict check

知识点4:$$key(请回头看之前的课程);

具体到某一个实例,在数组中,key对应value,如果$key == ‘name‘;,则$$key == $name,但是$name依然是一个key,而不是一个value,它有一个对应的value,可以是David,或者Kobe.

知识点5:inplode

implode() 函数和explode()函数都是很简单的函数,参考阅读:

1、http://www.w3cschool.cn/func_string_implode.html

2、http://www.w3school.com.cn/php/func_string_explode.asp

知识点6:str_replace;

这也是一个简单的函数,参考阅读:

1、http://cn2.php.net/str_replace

知识点7:\r\n\r\n

\r\n 一般一起用,用来表示键盘上的回车键,也可只用 \n。

知识点8:wordwrap

打断字符串为指定数量的字串。

http://php.net/manual/zh/function.wordwrap.php

知识点9:htmlentitles;

htmlentities() 函数把字符转换为 HTML 实体。

语法结构:

htmlentities(string,quotestyle,character-set)

参数 描述
string 必需。规定要转换的字符串。
quotestyle
可选。规定如何编码单引号和双引号。

  • ENT_COMPAT - 默认。仅编码双引号。
  • ENT_QUOTES - 编码双引号和单引号。
  • ENT_NOQUOTES - 不编码任何引号。
character-set
可选。字符串值,规定要使用的字符集。

  • ISO-8859-1 - 默认。西欧。
  • ISO-8859-15 - 西欧(增加 Euro 符号以及法语、芬兰语字母)。
  • UTF-8 - ASCII 兼容多字节 8 比特 Unicode
  • cp866 - DOS 专用 Cyrillic 字符集
  • cp1251 - Windows 专用 Cyrillic 字符集
  • cp1252 - Windows 专用西欧字符集
  • KOI8-R - 俄语
  • GB2312 - 简体中文,国家标准字符集
  • BIG5 - 繁体中文
  • BIG5-HKSCS - Big5 香港扩展
  • Shift_JIS - 日语
  • EUC-JP - 日语

《完》

时间: 2024-10-07 22:45:33

5.9 Building the message body的相关文章

ISP Lab Multicast

ISP Lab Multicast 1- IGMP 1-1 IGMP基本配置 R3(config)#int f0/0 R3(config-if)#ip ospf 110 a 0 R3(config)#ip multicast-routing R3(config)#int f0/0 R3(config-if)#ip pim sparse-mode \\使得路由器可以接受client的igmp信息 R3#sh ip igmp interface f 0/0 FastEthernet0/0 is up

Android选择/拍照 剪裁 base64/16进制/byte上传图片+PHP接收图片

转载请注明出处:http://blog.csdn.net/iwanghang/article/details/65633129觉得博文有用,请点赞,请评论,请关注,谢谢!~ 老规矩,先上GIF动态图,看个效果,如果符合你的项目或者确定你要了解的内容,再往下看吧: 完整项目下载地址:http://download.csdn.net/detail/iwanghang/9792768 贴代码: 1.PHP: <?php namespace app\index\controller; class Upl

《深入理解Android2》读书笔记(五)

接上篇<深入理解Android2>读书笔记(四) startActivity Am void run() throws RemoteException { try { printMessageForState(); mAm.setActivityController(this); mState = STATE_NORMAL; InputStreamReader converter = new InputStreamReader(System.in); BufferedReader in = n

转一篇如何用protobuf-csharp-port

先存下,省的麻烦: Pre-requisites Rather than reproduce all the documentation of the main Google Protocol Buffers project page, I'll just reference it - so please read at least the language guide before going any further. The rest of the wiki assumes you alre

CMake初步(1)

转自:<你所不知的OSG>第一章:CMake初步(1)http://bbs.osgchina.org/forum.php?mod=viewthread&tid=1189&fromuid=3434 本章的主要目的并非介绍OpenSceneGraph的常用类和功能,而是介绍它的一个重要伙伴,抑或说,是一个被愈来愈多的开源软件所青睐的强劲的辅助开发工具——CMake. CMake的定义是:一个跨平台.开源.可扩展的软件编译生成系统,如果您熟悉与之同类的QMake(开源开发库Qt的自动

Eclipse OSBP 设置 配置

My first app Contents [hide] 1 General information 1.1 Abstract 1.2 License information 1.3 Requirements 2 How to generate My1App 3 How to start My1App 3.1 Launch Eclipse Application 3.2 Starting My1App in a Browser 4 How to configure My1App 4.1 Sele

Building Python 2.7.10 with Visual Studio 2010 or 2015 - Google Chrome

您的浏览器(Chrome 33) 需要更新.该浏览器有诸多安全漏洞,无法显示本网站的所有功能.?了解如何更新浏览器 × p-nand-q.com C++? Python? Programming? Languages? Humor? Tools? Misc? Building Python 2.7.10 with Visual Studio 2010 or 2015 7th revision, August 7, 2015.A document history can be found at t

GSM Sniffing入门之软件篇:GSMTAP抓取与SMS(Short Message Service)还原

重点介绍如何利用50元左右的设备,抓包并还原SMS短信内容: ps:研究GSM Sniffing纯属个人兴趣,能抓SMS报文只是捡了个明文传输的漏子,切勿用于非法用途.就像sylvain说的,osmocomBB并不是为抓包而实现的,如果没有足够的GSM相关知识,想实现还原语音通话内容根本就无从下手. ---------------------------------------------------------------------------------------------------

Building Your First App

http://www.cnblogs.com/gcg0036/p/4321246.html Building a Simple User Interface: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"