添加表单数据
下面来看一下将表单数据提交并写入数据表的例子。
创建表单
进入模板目录 TPLdefaultIndex(如果 Index 文件夹不存在,则创建一个)。Index 文件夹对应存放 Index 模块(IndexAction.class.php)的模板文件,不能随意命名。
在 Index 文件夹内创建一个名为 form.html 的文件,文件采用 UTF-8 编码,内容如下:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>表单数据测试</title> </head> <body> <form action="__URL__/insert2" method="post"> <p>用户名: <input type="text" name="username" /></p> <p>密 码: <input type="password" name="password" /></p> <p>电子邮箱: <input type="text" name="email" /></p> <p><input type="submit" value=" 提交 " /></p> </form> </body> </html>
__URL__ 是 ThinkPHP 模板中的特殊字符串,在输出模板之前系统会自动将其替换成当前模块的 URL 地址。此处是替换成 Myapp/index.php/Index ,具体参见《ThinkPHP 模板特殊字符串替换》,所以该例子中 action="__URL__/insert2" 表示向当前模块的 insert2 操作提交数据。
提示:由于只是简单的输出 form.html 页面而没有其他逻辑操作,因此不需要在 Index 模块内创建对应的操作。
访问该页面:http://127.0.0.1/html/Myapp/index.php/Index/form,可以看到刚才创建的表单。
创建写入数据操作
在 IndexAction 控制器(Lib/Action/IndexAction.class.php)里,添加 insert2() 操作:
public function insert2(){ header("Content-Type:text/html; charset=utf-8"); $Dao = M("User"); // 构建写入的数据数组 $data["username"] = $_POST["username"]; $data["password"] = md5($_POST["password"];); $data["email"] = $_POST["email"]; $data["regdate"] = time(); // 写入数据 if($lastInsId = $Dao->add($data)){ echo "插入数据 id 为:$lastInsId"; } else { $this->error('数据写入错误!'); } }
在表单页面填写数据并提交,ThinkPHP 中同样是通过 $_POST/$_GET 变量来接受表单发送的数据。
提示
对于提交的表单数据,ThinkPHP 在数据写入数据表之前,做了 addslashes() 操作,对特殊字符进行转义。如果不想将特殊字符做转义,可以在写入数据库之前 addslashes()。
参考阅读
- ThinkPHP 添加数据 add 方法
- ThinkPHP 表单数据智能写入 create 方法
- ThinkPHP 模板
- ThinkPHP 快捷方法之 M 方法:高效实例化一个数据模型。
- PHP 字符串转义 addslashes 与 stripslashes 函数