您好,登錄后才能下訂單哦!
(一)首先是準備工作下載thinkPHP框架最新版本,解壓縮到你將要開發(fā)的項目位置。操作演示如圖:
其中index.php是入口文件,即所有的請求都要經(jīng)過此文件才能夠完成。Application 是應用目錄,在開發(fā)過程中,我們手動要操作的文件都在這個文件夾中。Public是資源文件目錄thinkPHP是框架目錄
1,index.php入口文件
2,何為入口文件,,即所有的功能操作都要經(jīng)過此文件才能夠完成。
代碼如下:
<?php
// 檢測PHP環(huán)境
if(version_compare(PHP_VERSION,'5.3.0','<')) die('require PHP > 5.3.0 !');
// 開啟調試模式 建議開發(fā)階段開啟 部署階段注釋或者設為false
define('APP_DEBUG',True);
// 定義應用目錄
define('APP_PATH','./Application/');
// 引入ThinkPHP入口文件
require 'D:/Dev Apps/xampp/htdocs/sunyan2015/017/ThinkPHP/ThinkPHP.php';
// 親^_^ 后面不需要任何代碼了 就是如此簡單
1,從上述代碼中 可以看出入口文件主要完成:
2,載入thinkPHP框架入口文件
3,定義系統(tǒng)相關常量
4,定義項目路徑
5,定義調試模式和應用模式在第一次訪問入口文件之前,application文件夾沒有任何模塊,如圖:
現(xiàn)在我們訪問入口文件,在瀏覽器中效果如下
此時,application文件夾就自動生成了相應模塊如圖
進入Home模塊,如圖
其中標記的conf,controller,model,view是我們要操作的四個文件夾
1,Conf文件夾,其中有config.Php是配置文件用來添加或修改一些配置參數(shù)2. Controller,model,view三個模塊體現(xiàn)了mvc開發(fā)模式,view模塊只負責呈現(xiàn)視圖效果,即用戶看到的網(wǎng)頁效果,model模塊就相當于是一個數(shù)據(jù)庫,通過實例化model對象,我們可以隨意對數(shù)據(jù)庫進行操作,controller控制器是模型和視圖之間連接的橋梁,從model中取出數(shù)據(jù)進行操作,然后將結果傳遞給視圖。1模型實例化,我把她理解為鏈接數(shù)據(jù)庫中具體的某個表。如,在TODOlist中,我建立了兩個表,usermessage和listmessage,所以我建立了兩個模型類。userMessageModel和listmessageModel,代碼如下:
<?php
namespace Home\Model;
use Think\Model;
class usermessageModel extends Model{
protected $connection=array(
'DB_TYPE'=>'mysql',
'DB_USER'=>'root',
'DB_PWD'=>'123456',
'DB_HOST'=>'localhost',
'DB_PORT'=>'3306',
'DB_NAME'=>'todolist',
'DB_CHARSET'=>'utf8',
'DB_PREFIX'=>' ',
);
protected $tablePrefix='';
}
?>
<?php
namespace Home\Model;
use Think\Model;
class listmessageModel extends Model{
protected $connection=array(
'DB_TYPE'=>'mysql',
'DB_USER'=>'root',
'DB_PWD'=>'123456',
'DB_HOST'=>'localhost',
'DB_PORT'=>'3306',
'DB_NAME'=>'todolist',
'DB_CHARSET'=>'utf8',
'DB_PREFIX'=>' ',
);
protected $tablePrefix='';
}
?>
其中$connection數(shù)組定義的是數(shù)據(jù)庫鏈接信息,$tablePrefix定義的是標的前綴為空。
3. 控制器,其實就是一個類,由方法組成。如TODOlist我定義了五個方法。方法中具體代碼省略,主要先看一下架構:
<?php
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller {
public function index(){
}
public function register(){
}
public function login(){
}
public function logout(){
}
public function planlist(){
}
}
?>
在view模塊中,一個控制器(一個類),對應一個文件夾,文件夾的名稱為類的名稱,此類的名稱為Index,則文件夾的名稱為Index,然后在此文件夾中,每個方法對應一個html文件,這是方法的模板文件。如index方法對應index.html模板文件。
4.
public function index(){
$title="歡迎頁面";
$bodytitle="歡迎訪問todolist";
$this->assign("bodytitle","$bodytitle");
$username=session("username");
if(empty($username)){
$login=U('Home/Index/login');
$register=U('Home/Index/register');
$this->assign("link1","<a href=\"$login\">登錄</a>");
$this->assign("link2","<a href=\"$register\">注冊</a>");
}else{
$logout=U('Home/Index/logout');
$changepassword=U('Home/Index/changepassword');
$planlist=U('Home/Index/planlist');
$this->assign("link1","<a href=\"$logout\">注銷</a>");
$this->assign("link2","<a href=\"$changepassword\">更改密碼</a>");
$this->assign("link3","<a href=\"$planlist\">你的列表</a>");
}
$this->display();
}
public function register(){
$user=D("usermessage");
$error=array();
if($_SERVER['REQUEST_METHOD']=='POST'){
if(!empty($_POST['username'])){
$data['name']=$_POST['username'];
}else{
$error[]="請輸入用戶名";
}
if(!empty($_POST['password'])){
$data['password']=$_POST['password'];
}else{
$error[]="請輸入密碼";
}
if(empty($error)){
$r=$user->where("name='{$data['name']}'")->select();
if(empty($r)){
$r1=$user->add($data);
if($r1){
$this->assign("error","恭喜你,注冊成功");
}else{
$this->assign("error","系統(tǒng)正忙,請重新注冊");
}
}else{
$this->assign("error","對不起,此用戶名已經(jīng)注冊");
}
}else{
foreach($error as $msg){
$this->assign("error","$msg");
}
}
}
$this->display();
}
public function login(){
$user=D("usermessage");
$user->create();
$error=array();
if($_SERVER['REQUEST_METHOD']=='POST'){
if(!empty($_POST['username'])){
$username=$_POST['username'];
}else{
$error[]="請輸入用戶名";
}
if(!empty($_POST['password'])){
$password=$_POST['password'];
}else{
$error[]="請輸入密碼";
}
if(empty($error)){
$r=$user->where("name='$username'")->select();
if(!empty($r)){
$r1=$user->where("name='$username' and password='$password'")->find();
if(!empty($r1)){
$this->assign("error","登錄成功");
$this->assign("error1","{$r1['user_id']}");
session("username","$username");
session('user_id',$r1['user_id']);
} else{
$this->assign("error","密碼錯誤,請重新輸入");
}
}else{
$this->assign("error","對不起,此用戶名并未注冊");
}
}else{
foreach($error as $msg){
$this->assign("error","$msg");
}
}
}
$this->display();
}
public function logout(){
$username=session('username');
if(!empty($username)){
session(null);
$username=session('username');
if(empty($username)){
$this->assign('logout','注銷成功');
}else{
$this->assign('logout','注銷失敗');
}
}else{
$this->assign('logout','您還沒有登錄');
}
$this->display(login);
}
public function changepassword(){
$error=array();
$user=D('usermessage');
$username=session('username');
$user_id=session('user_id');
if(!empty($username)){
if($_SERVER['REQUEST_METHOD']=='POST'){
if(!empty($_POST['newpassword'])){
$data['password']=$_POST['newpassword'];
//$user->password==$_POST['newpassword'];
}else{
$error[]="請輸入密碼";
}
if(empty($error)){
$r=$user->where("user_id='$user_id'")->save($data);
$this->assign("error2","$r");
if($r){
$this->assign("error","恭喜你,密碼更改成功");
}else{
$this->assign("error","系統(tǒng)正忙,請重新更改密碼");
}
}else{
foreach($error as $msg){
$this->assign("error","$msg");
}
}
}
}else{
$this->assign('error','請先登錄');
}
$this->display();
}
public function planlist(){
$username=session('username');
$user_id=session("user_id");
$this->assign("username","$username");
//$user=D("usermessage");
$list=D("listmessage");
$list->create();
if($_SERVER['REQUEST_METHOD']=='POST'){
if($_POST['orderhidden']=='a'){
if(!empty($_POST['content'])){
$data['content']=$_POST['content'];
$data['user_id']=$user_id;
$r=$list->add($data);
if($r){
$this->assign("message","添加成功");
}else{
$this->assign("message","添加失敗");
}
}else{
$this->assign("message","請輸入內容");
}
}
if($_POST['orderhidden']=='b'){
$list_id=$_POST['listhidden'];
$r=$list->where("list_id='$list_id'")->delete();
if($r){
$this->assign("message","刪除成功");
}else{
$this->assign("message","請重新點擊刪除");
}
}
}
$r=$list->field("content,list_id")->where("user_id='$user_id'")->select();
/*if(!empty($r)){
$num++;
}
$this->assign("num",$num);*/
$this->assign("select",$r);
$this->display();
}
他的模板文件index.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>{$title}</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<h2>{$bodytitle}</h2>
<!--<a href="{:U('Home/Index/login')}" >登錄</a>-->
</br>
<!--<a href="{:U('Home/Index/register')}" >注冊</a>-->
{$link2}
</br>
{$link3}
</br>
</body>
</html>
Register.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>登錄頁面</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="deion" content="布爾教育 http://www.itbool.com" />
</head>
<body>
<form action="register" method="POST">
用戶名:<br />
<input type="text" name="username" />
<br />
密碼:<br />
<input type="password" name="password" />
請由字母數(shù)字或下劃線組成,長度為5-21
<br />
<input type="submit" value="注冊" />
<input type="reset" value="重置">
</form>
<a href="{:U('Home/Index/index')}">返回首頁</a>
<br/>
<a href="{:U('Home/Index/login')}">登錄</a>
</br>
</br>
{$error}
</br>
</body>
</html>
Login.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>登錄頁面</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="deion" content="布爾教育 http://www.itbool.com" />
</head>
<body>
<form action="login" method="POST">
用戶名:<br />
<input type="text" name="username" />
<br />
密碼:<br />
<input type="password" name="password" />
<br />
<input type="submit" value="登錄" />
</br>
<input type="reset" value="重置">
</form>
<a href="{:U('Home/Index/changepassword')}">更改密碼</a>
<br />
<a href="{:U('Home/Index/index')}">返回首頁</a>
</br>
<a href="{:U('Home/Index/logout')}">注銷</a>
</br>
{$error}
{$logout}
{$error1}
</html>
Changepassword.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>更改密碼頁面</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="deion" content="布爾教育 http://www.itbool.com" />
</head>
<body>
<form action="changepassword" method="POST">
新密碼:<input type="password" name="newpassword" />
<br />
<input type="submit" value="確定更改" />
<input type="reset" value="重置" />
</form>
<a href="{:U('Index/login')}">登錄</a>
<br />
<a href="{:U('Index/index')}">返回首頁</a>
</br>
{$error}
</br>
{$error1}
</br>
{$error2}
</body>
</html>
Planlist.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>計劃列表</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="deion" content="布爾教育 http://www.itbool.com" />
</head>
<body>
<h3>{$username}歡迎來到你的計劃列表</h3>
{$message}
<table border=3>
<foreach name="select" item="list">
<tr>
<td>
{$list.content}
<form action="planlist" method="POST">
<input type="hidden" name="listhidden" value="{$list.list_id}" />
<input type="hidden" name="orderhidden" value="b" />
<input type="submit" value="刪除" />
</form>
</td>
</tr>
</foreach>
<tr>
<td>
<form action="planlist" method="POST">
內容:<textarea name="content" cols="30" rows="3"></textarea>
<br />
<input type="submit" value="添加" />
<input type="hidden" name="orderhidden" value="a" />
</form>
</td>
</tr>
</table>
</br>
<a href="{:U('Home/Index/changepassword')}">更改密碼</a>
<br />
<a href="{:U('Home/Index/index')}">返回首頁</a>
</br>
<a href="{:U('Home/Index/logout')}">注銷</a>
</br>
</body>
</html>
5.下面就以上代碼中的知識點進行講解1) URL的動態(tài)生成:利用thinkPHP內置的U方法。當我點擊不同鏈接的時候,各個模塊位置在發(fā)生變化,因此固定的路徑是不可行的,路徑必須是可以變化的。在控制器中,U方法用法如下:
$planlist=U('Home/Index/planlist');
$this->assign("link3","<a href=\"$planlist\">你的列表</a>");
在模板文件中,U方法用法如下
<a href="{:U('Home/Index/logout')}">注銷</a>
1,概括一下為U(模塊/控制器/方法),若省略模塊名,則默認為當前模塊名稱
2,實例化模型類:用D方法或者M方法
$user=D("usermessage");
$list=D("listmessage");
3)CURD操作和連貫操作方法
(1 )create方法:用于創(chuàng)建數(shù)據(jù)對象,最典型的應用就是自動根據(jù)表單數(shù)據(jù)創(chuàng)建數(shù)據(jù)對象,但數(shù)據(jù)對象是保存在內存中的,并沒有實際寫入到數(shù)據(jù)庫中,知道使用add或save方法
(2)save方法:
$user->where("user_id='$user_id'")->save($data);
返回值是影響的記錄行數(shù)
返回值是自動增長的主鍵,即一個整型數(shù)據(jù)
(3)select方法:用于數(shù)據(jù)讀取,即獲取數(shù)據(jù)表中的多行記錄,
$user->where("name='{$data['name']}'")->select();
若查詢出錯,返回值是false,若查詢結果為空,則返回null,否則返回二維數(shù)組
(4)delete方法:用于數(shù)據(jù)刪除
$list->where("list_id='$list_id'")->delete();
返回值是刪除的記錄行數(shù)
這四個操作稱為CURD操作,是對數(shù)據(jù)庫的基本操作
(5)data方法:用于設置當前要操作的數(shù)據(jù)對象的值
$data['password']=$_POST['password'];
(6)add方法用于數(shù)據(jù)寫入
$user->add($data);
(7)where方法,主要用于添加數(shù)據(jù)庫操作的限制條件
$user->where("user_id='$user_id'")->save($data);
$r1=$user->where("name='$username' and password='$password'")->find();
(8)field方法:選擇要返回或操作的字段
$list->field("content,list_id")->where("user_id='$user_id'")->select();
4) session的設置與刪除
session("username","$username");
session('user_id',$r1['user_id']);
session(null);
5)模板文件:thinkphp內置了一個基于XML的模板引擎thinktemplate,,在變量輸出和制定模板文件時,與smarty模板引擎相同
$this->assign()
$this->display()
我還用到了一個循環(huán)標簽foreach ,用于計劃列表的輸出
方法中的變量輸出:$this->assign("select",$r);
模板文件中的循環(huán)輸出
<foreach name="select" item="list">
<tr>
<td>
{$list.content}
<form action="planlist" method="POST">
<input type="hidden" name="listhidden" value="{$list.list_id}" />
<input type="hidden" name="orderhidden" value="b" />
<input type="submit" value="刪除" />
</form>
</td>
</tr>
程序員杭州軟件測試杭州APP開發(fā)杭州PHP工程師
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。