目标

使用 CodeIgniter 创建一个简单的 Web 站点。该站点将有一个主页,显示一些宣传文本和一个表单,该表单将发布到数据库表中。

按照 CodeIgniter 的术语,可将这些需求转换为以下内容:

  • 一个控制器,仅包含少数功能(可使用默认的 Welcome 控制器)
  • 一个模型(以及一个数据库表),用于存储联系人信息
  • 一个主视图,包含一些支持


NO1、创建数据库表和模型

  从模型入手可帮助理解底层数据库表,之后再开始布设功能和 UI。如果对表将存储哪些内容认识不深,设计与表交互的表单将十分困难。

  对于这个示例应用程序而言,希望存储的是来自表单的联系人信息。那么需要的是哪些类型的联系人信息?目前而言,仅存储基本信息,要求提供姓名、电子邮件地址、电话号码和简短备注。还可能希望在后台存储时间戳和 IP 地址。

1、数据库基本操作:

 1 连接数据库:mysql -h主机地址 -u用户名-p用户密码
2 数据库的提示符:mysql>
3 退出数据库:exit(回车)
4 显示数据库:show databases;
5 建立数据库:create database 库名;
6 选择数据库:use 数据库名;
7 显示数据库中的表:show tables;
8 显示数据表的结构:describe 表名;
9 建表:create table 表名 (字段设定列表); 注:auto_increment 自增 primary key 主键
10 显示表中记录:SELECT * FROM 表名;
11 增加记录: insert into name(uname,gender,birthday) values('张三','男','1971-10-01');
12 修改记录:update name set birthday='1971-01-10' where uname='张三';
13 删除记录:delete from name where uname='张三';
14 删除表:drop table 表名;
15 删除库:drop database 库名;
16 备份数据库:mysqldump -u root -p --opt 数据库名>备份名; //进入到库目录
17 恢复数据库:mysql -u root -p 数据库名<备份名; //恢复时数据库必须存在,可以为空数据库
18 授权数据库:格式:grant select on 数据库.* to 用户名@登录主机 identified by "密码";

2、本项目中建立一个mw的数据库和一个contacts的数据表:

 create database mw;
use mw;
CREATE TABLE `contacts` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(128) NOT NULL,
`email` varchar(255) NOT NULL,
`notes` text NOT NULL,
`stamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
`ipaddress` varchar(32) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM;

3、配置信息:

application 文件夹中最重要的文件夹就是 config。该文件夹内有两个需要关注的文件:config.php 和 database.php。

config.php 文件包含设置 CodeIgniter 所需的基本参数和自变量。database.php 文件包含连接数据库所需的基本参数和自变量。

 对于 config.php 文件,这里只需设置 base_url 参数,例如设置为 http://localhost/。
$config['base_url'] = 'http://localhost/'
下面打开 database.php 文件,为数据库服务器设置 connection 参数:
$db['default']['hostname'] = "your-db-host";
$db['default']['username'] = "your-username";
$db['default']['password'] = "your-password";
$db['default']['database'] = "your-db-name";
$db['default']['dbdriver'] = "mysql";
修改为:
$db['default']['hostname'] = "localhost";
$db['default']['username'] = "root";
$db['default']['password'] = "root";
$db['default']['database'] = "mw";
$db['default']['dbdriver'] = "mysql"; 

4、创建模型:

在 application/models 文件夹内,创建一个 contacts_model.php 文件。代码如下:

 <?php
class Contacts_model extends CI_Model{
function __construct()
{
parent::__construct ();
}
public function add_contact()
{
date_default_timezone_set('UTC');
$now = date("Y-m-d H:i:s"); $data = array(
'name' => $this->input->post('name'),
'email' => $this->input->post('email'),
'notes' => $this->input->post('notes'),
'ipaddress' => $this->input->ip_address(),
'stamp' => $now
); $this->db->insert('contacts', $data);
}
}
/* End of file contacts_model.php */
/* Location: ./application/controllers/contacts_model.php */


NO2、初始化控制器:

在 CodeIgniter 中,控制器用于组织项目。设想每个函数都是站点或应用程序的一个页面或目标。如果使用主页,就需要一个 index() 函数。如果有一个 About us 页面,就需要 about() 或 about_us() 函数 —— 具体取决于您希望怎样构造 URL。

进入application/controllers/ 文件夹,新建一个contacts.php文件。代码如下:

 <?php
/**
* Contacts Class
*/
class Contacts extends CI_Controller{ function __construct()
{
parent::__construct();
} function index()
{
$this->load->helper('form');
$data['title'] = "Welcome to our Site";
$data['headline'] = "Welcome!";
$data['include'] = 'contacts_home';
$this->load->vars($data);
$this->load->view('contacts_view');
}
};
/* End of file contacts.php */
/* Location: ./application/controllers/contacts.php */

设置可在视图内部使用的多个变量——通过这种方法,即可更好地组织应用程序。例如,可能希望在控制器中设置标题和标题栏。如果要这样做,就必须将变量载入视图。所载入的变量之一就是所包含视图的名称。通过这种方法,即可设置包含所有外观的主视图,以及包含内容的各包含项。

上面代码中$data 数组被传入到一个视图中(contacts_view)。数组内的信息可使用键名访问,如果希望输出标题栏,通过 $headline 访问它即可。

接下来,将创建视图,并完成控制器。



NO3、创建视图

在application/views 中的创建一个名为contacts_view.php的文件。代码如下:

 <!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title><?php echo $title;?></title>
<style>label { display:block;}</style>
</head>
<body>
<h1><?php echo $headline;?></h1>
<?php $this->load->view($include);?>
</body>
</html>

上面代码传入了三个变量:$title$headline 和 $include(一个包含项的名称)。

在前两条php语句中,将分别显示在 $data['title'] 和 $data['headline'] 中找到的数据。随后使用 $data['include'] 的值载入第二个视图。在本例中为一个名为 contacts_home的视图(添加了少许 CSS 代码)。其中包含一个文本块和一个从站点访问者处收集信息的表单:

contacts_home.php代码如下:

 <p>This is random text for the CodeIgniter article.
There's nothing to see here folks, just move along!</p>
<h2>Contact Us</h2>
<?php
echo form_open('contacts/contactus');
echo form_label('your name','name');
$ndata = array('name' => 'name', 'id' => 'id', 'size' => '25');
echo form_input($ndata); echo form_label('your email','email');
$edata = array('name' => 'email', 'id' => 'email', 'size' => '25');
echo form_input($edata); echo form_label('how can you help you?','notes');
$cdata = array('name' => 'notes', 'id' => 'notes', 'cols' => '40', 'rows' => '5');
echo form_textarea($cdata); echo form_submit('submit','send us a note');
echo form_close();
?>

这里使用的是 Form 帮助程序,将其载入控制器。form_open() 函数允许打开表单—— 它具有必要的自变量,即表单发布的目标位置。接下来,将返回控制器并添加 contact() 函数来处理表单发布数据。在表单中,使用了 form_label() 来创建可访问的标签,使用 form_input() 和 form_textarea() 来构建表单字段和文本区,使用 form_submit() 来构建输入按钮。这里,通过 form_input() 和 form_textarea()(以及其他表单函数),就可以传入一个信息数组,帮助跟踪字段名称、id、大小和其他信息。最后,使用 form_close() 关闭表单。

再创建一个视图文件contacts_thanks.php。代码如下:

 <p>Thanks so much for contacting us. Someone will be in contact with you soon.</p>


NO4、完成控制器

现在已经有了两个视图,因而需要重新回到控制器contacts.php,为其添加两个函数。

①处理主页上的表单传入的 POST 的 contactus() 函数。

thankyou() 函数,它将用作该表单的最终确认页面。

contactus() 函数非常简单。载入 contacts_model 模型,运行该模型内的 add_contact() 函数,然后将用户转向 thanks 页面。请注意,要使用 redirect() 函数,必须载入 URL 帮助程序。

函数代码如下所示:

 function contactus()
{
$this->load->helper('url');$this->load->model('contacts_model','',TRUE);
$this->contacts_model->add_contact();
redirect('contacts/thankyou','refresh');
} function thankyou()
{
$data['title'] = "Thank You!";
$data['headline'] = "Thanks!";
$data['include'] = 'contacts_thanks';
$this->load->vars($data);
$this->load->view('contacts_view');
}


NO5、添加安全性

在控制器的 contactus() 函数中,有着在数据库中创建多条空记录的风险—— 这会导致某人连续将联系人目标载入其浏览器或使用某种类型的机器人。要避免此类情况发生,最简单的方法就是在控制器中添加简单的测试。如果存在 POST 数据,则载入模型和函数。如果没有,则将其返回主页。

修改后的函数如下所示:

 function contactus()
{
$this->load->helper('url');
if ($this->input->post('email'))
{
$this->load->model('contacts_model','',TRUE);
$this->contacts_model->add_contact();
redirect('contacts/thankyou','refresh');
}
else
{
redirect('contacts/index','refresh');
}
}


NO6、结束语

至此,就创建了一个包含主页、将信息添加到数据库的表单和 thanks页面的 Web 站点。



NO7、效果展示——已解决

提交表单前

提交表单后

提交表单后数据库的变化(1为提交前一条记录,2为提交后两条记录)



CodeIgniter框架——创建一个简单的Web站点(include MySQL基本操作)的更多相关文章

  1. 使用 CodeIgniter 创建一个简单的 Web 站点

    原文:使用 CodeIgniter 创建一个简单的 Web 站点 参考源自: http://www.ibm.com/developerworks/cn/web/wa-codeigniter/index ...

  2. django创建一个简单的web站点

    一.新建project 使用Pycharm,File->New Project…,选择Django,给project命名 (project不能用test命名)   新建的project目录如下: ...

  3. IntelliJ IDEA 15 部署Tomcat及创建一个简单的Web工程

    一.部署Tomcat 二.创建一个简单的Web工程 2.1创建一个新工程 创建一个新工程 设置JDK及选择Web Application (创建的是Web工程) 点击Next,选择工作空间,起个工程名 ...

  4. Symfony2之创建一个简单的web应用

    Symfony2——创建bundle       bundle就像插件或者一个功能齐全的应用,我们在应用层上开发的应用的所有代码,包括:PHP文件.配置文件.图片.css文件.js文件等都会包含在bu ...

  5. SharePoint 创建一个简单的Web Part 部分

    SharePoint 创建一个简单的Web Part 部分 标准Web零件有时会很强大,运行多个功能的能力. 本文介绍了如何使用Visual Studio 创建一个简单的Web部分. 1. 打开VS, ...

  6. Symfony2之创建一个简单的web应用 Symfony2——创建bundle

    bundle就像插件或者一个功能齐全的应用,我们在应用层上开发的应用的所有代码,包括:PHP文件.配置文件.图片.css文件.js文件等都会包含在bunde系统中.          可以通过两种方法 ...

  7. 用 Eclipse 创建一个简单的web项目

    Eclipse neon 汉化版 ; 1;右击新建 -->  选择 动态Web项目 2:  填写 项目名 项目位置 ; 选择 Dynamic web module version 和 tomca ...

  8. node创建一个简单的web服务

    本文将如何用node创建一个简单的web服务,过程也很简单呢~ 开始之前要先安装node.js 1.创建一个最简单的服务 // server.js const http = require('http ...

  9. Docker容器技术-创建一个简单的Web应用

    一.创建一个简单的Web应用 1.identicon 基于某个值而自动产生的图像,这个值是IP地址或用户名的散列值. 用途: 通过计算用户名或IP地址的散列值,在网站上提供用于识别用户的图像,以及自动 ...

随机推荐

  1. 微信小程序 - 表单验证插件WxValidate(自定义警告信息形式)

    弹出的形式对于用户来说,总是不太友好的 可能会出现层级问题(只需要设置一下提示的层级即可) WxValidate内置规则 以下代码拷贝即可使用~ wxml <form bindsubmit='s ...

  2. C++高级进阶 第四季:const具体解释(二) 常量折叠

    一.文章来由 const具体解释之二 二.const 取代 #define const最初动机就是取代 #define. const 优于 #define: (1) #define没有类型检查,con ...

  3. Jersey 1.18 API文档

    Jersey 1.18 API文档 我自己制作了Jersey 1.18 API CHM文档, 下载地址见: http://download.csdn.net/detail/chszs/7334869 ...

  4. 【BIEE】14_开发流程介绍

    以上是BIEE开发的流程图,通过流程图我们可以看出在BIEE中存在以下主要内容: 仪表盘 仪表盘页 分析 仪表盘提示 主题区域 Catalog RPD 以下是一些文件以及资料库存储路径 资料库存储路径 ...

  5. Docker -CentOS 6.5上安装

    开始安装daoker之旅: 1. [root@localhost ~]# uname -r -.el6.x86_64 2. [root@localhost ~]# cat /etc/issue Cen ...

  6. oracle备份还原数据库

    首先到对应bin目录下打开cmd(windows),linux用相应终端链接:eg:D:\app\sun\product\11.2.0\dbhome_1\BIN 用户备份:exp u_tdms/p_t ...

  7. iBatis 使用总结

    http://blog.csdn.net/caihaijiang/article/details/6438633 --日期格式化 date_format(createtime,'%Y-%m-%d') ...

  8. Aurora学习笔记连载一:仿真平台搭建

    由于公司项目需要,需要学习Aurora协议,才有了这样的连载学习笔记,也算是对自己学习的一份记录吧. 对于Aurora是什么,大家自行百度. 当然,Kevin也在此先提醒大家,本套学习笔记不是你想学就 ...

  9. 转:关于安卓多线程while(true)方法占用CPU高的原因及其解决方法

    由于项目需要用到安卓多线程操作,结果开了四条线程,下载到平板一直很卡,CPU占用率暴涨.于是开始查找原因,发现是线程run()方法里的while(true)导致的, 下图是为解决时开启一条while( ...

  10. Spring的AOP配置

    Spring的AOP配置 1.先写一个普通类: package com.spring.aop; public class Common {  public void execute(String us ...