成都創(chuàng)新互聯(lián)公司成都網(wǎng)站建設(shè)按需規(guī)劃網(wǎng)站,是成都網(wǎng)站建設(shè)公司,為成都PVC花箱提供網(wǎng)站建設(shè)服務(wù),有成熟的網(wǎng)站定制合作流程,提供網(wǎng)站定制設(shè)計(jì)服務(wù):原型圖制作、網(wǎng)站創(chuàng)意設(shè)計(jì)、前端HTML5制作、后臺(tái)程序開(kāi)發(fā)等。成都網(wǎng)站設(shè)計(jì)熱線(xiàn):18982081108
(一)首先是準(zhǔn)備工作下載thinkPHP框架最新版本,解壓縮到你將要開(kāi)發(fā)的項(xiàng)目位置。操作演示如圖:
其中index.php是入口文件,即所有的請(qǐng)求都要經(jīng)過(guò)此文件才能夠完成。Application 是應(yīng)用目錄,在開(kāi)發(fā)過(guò)程中,我們手動(dòng)要操作的文件都在這個(gè)文件夾中。Public是資源文件目錄thinkPHP是框架目錄
1,index.php入口文件
2,何為入口文件,,即所有的功能操作都要經(jīng)過(guò)此文件才能夠完成。
代碼如下:
// 檢測(cè)PHP環(huán)境
if(version_compare(PHP_VERSION,'5.3.0','<')) die('require PHP > 5.3.0 !');
// 開(kāi)啟調(diào)試模式 建議開(kāi)發(fā)階段開(kāi)啟 部署階段注釋或者設(shè)為false
define('APP_DEBUG',True);
// 定義應(yīng)用目錄
define('APP_PATH','./Application/');
// 引入ThinkPHP入口文件
require 'D:/Dev Apps/xampp/htdocs/sunyan2015/017/ThinkPHP/ThinkPHP.php';
// 親^_^ 后面不需要任何代碼了 就是如此簡(jiǎn)單
1,從上述代碼中 可以看出入口文件主要完成:
2,載入thinkPHP框架入口文件
3,定義系統(tǒng)相關(guān)常量
4,定義項(xiàng)目路徑
5,定義調(diào)試模式和應(yīng)用模式在第一次訪(fǎng)問(wèn)入口文件之前,application文件夾沒(méi)有任何模塊,如圖:
現(xiàn)在我們?cè)L問(wèn)入口文件,在瀏覽器中效果如下
此時(shí),application文件夾就自動(dòng)生成了相應(yīng)模塊如圖
進(jìn)入Home模塊,如圖
其中標(biāo)記的conf,controller,model,view是我們要操作的四個(gè)文件夾
1,Conf文件夾,其中有config.Php是配置文件用來(lái)添加或修改一些配置參數(shù)2. Controller,model,view三個(gè)模塊體現(xiàn)了mvc開(kāi)發(fā)模式,view模塊只負(fù)責(zé)呈現(xiàn)視圖效果,即用戶(hù)看到的網(wǎng)頁(yè)效果,model模塊就相當(dāng)于是一個(gè)數(shù)據(jù)庫(kù),通過(guò)實(shí)例化model對(duì)象,我們可以隨意對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作,controller控制器是模型和視圖之間連接的橋梁,從model中取出數(shù)據(jù)進(jìn)行操作,然后將結(jié)果傳遞給視圖。1模型實(shí)例化,我把她理解為鏈接數(shù)據(jù)庫(kù)中具體的某個(gè)表。如,在TODOlist中,我建立了兩個(gè)表,usermessage和listmessage,所以我建立了兩個(gè)模型類(lèi)。userMessageModel和listmessageModel,代碼如下:
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='';
}
?>
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ù)庫(kù)鏈接信息,$tablePrefix定義的是標(biāo)的前綴為空。
3. 控制器,其實(shí)就是一個(gè)類(lèi),由方法組成。如TODOlist我定義了五個(gè)方法。方法中具體代碼省略,主要先看一下架構(gòu):
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模塊中,一個(gè)控制器(一個(gè)類(lèi)),對(duì)應(yīng)一個(gè)文件夾,文件夾的名稱(chēng)為類(lèi)的名稱(chēng),此類(lèi)的名稱(chēng)為Index,則文件夾的名稱(chēng)為Index,然后在此文件夾中,每個(gè)方法對(duì)應(yīng)一個(gè)html文件,這是方法的模板文件。如index方法對(duì)應(yīng)index.html模板文件。
4.
public function index(){
$title="歡迎頁(yè)面";
$bodytitle="歡迎訪(fǎng)問(wèn)todolist";
$this->assign("bodytitle","$bodytitle");
$username=session("username");
if(empty($username)){
$login=U('Home/Index/login');
$register=U('Home/Index/register');
$this->assign("link1","登錄");
$this->assign("link2","注冊(cè)");
}else{
$logout=U('Home/Index/logout');
$changepassword=U('Home/Index/changepassword');
$planlist=U('Home/Index/planlist');
$this->assign("link1","注銷(xiāo)");
$this->assign("link2","更改密碼");
$this->assign("link3","你的列表");
}
$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[]="請(qǐng)輸入用戶(hù)名";
}
if(!empty($_POST['password'])){
$data['password']=$_POST['password'];
}else{
$error[]="請(qǐng)輸入密碼";
}
if(empty($error)){
$r=$user->where("name='{$data['name']}'")->select();
if(empty($r)){
$r1=$user->add($data);
if($r1){
$this->assign("error","恭喜你,注冊(cè)成功");
}else{
$this->assign("error","系統(tǒng)正忙,請(qǐng)重新注冊(cè)");
}
}else{
$this->assign("error","對(duì)不起,此用戶(hù)名已經(jīng)注冊(cè)");
}
}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[]="請(qǐng)輸入用戶(hù)名";
}
if(!empty($_POST['password'])){
$password=$_POST['password'];
}else{
$error[]="請(qǐng)輸入密碼";
}
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","密碼錯(cuò)誤,請(qǐng)重新輸入");
}
}else{
$this->assign("error","對(duì)不起,此用戶(hù)名并未注冊(cè)");
}
}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','注銷(xiāo)成功');
}else{
$this->assign('logout','注銷(xiāo)失敗');
}
}else{
$this->assign('logout','您還沒(méi)有登錄');
}
$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[]="請(qǐng)輸入密碼";
}
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)正忙,請(qǐng)重新更改密碼");
}
}else{
foreach($error as $msg){
$this->assign("error","$msg");
}
}
}
}else{
$this->assign('error','請(qǐng)先登錄');
}
$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","請(qǐng)輸入內(nèi)容");
}
}
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","請(qǐng)重新點(diǎn)擊刪除");
}
}
}
$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
{$link2}
{$link3}
Register.html
{$error}
Login.html
{$error}
{$logout}
{$error1}
Changepassword.html
{$error}
{$error1}
{$error2}
Planlist.html
{$message}
{$list.content} |
5.下面就以上代碼中的知識(shí)點(diǎn)進(jìn)行講解1) URL的動(dòng)態(tài)生成:利用thinkPHP內(nèi)置的U方法。當(dāng)我點(diǎn)擊不同鏈接的時(shí)候,各個(gè)模塊位置在發(fā)生變化,因此固定的路徑是不可行的,路徑必須是可以變化的。在控制器中,U方法用法如下:
$planlist=U('Home/Index/planlist');
$this->assign("link3","你的列表");
在模板文件中,U方法用法如下
1,概括一下為U(模塊/控制器/方法),若省略模塊名,則默認(rèn)為當(dāng)前模塊名稱(chēng)
2,實(shí)例化模型類(lèi):用D方法或者M(jìn)方法
$user=D("usermessage");
$list=D("listmessage");
3)CURD操作和連貫操作方法
(1 )create方法:用于創(chuàng)建數(shù)據(jù)對(duì)象,最典型的應(yīng)用就是自動(dòng)根據(jù)表單數(shù)據(jù)創(chuàng)建數(shù)據(jù)對(duì)象,但數(shù)據(jù)對(duì)象是保存在內(nèi)存中的,并沒(méi)有實(shí)際寫(xiě)入到數(shù)據(jù)庫(kù)中,知道使用add或save方法
(2)save方法:
$user->where("user_id='$user_id'")->save($data);
返回值是影響的記錄行數(shù)
返回值是自動(dòng)增長(zhǎng)的主鍵,即一個(gè)整型數(shù)據(jù)
(3)select方法:用于數(shù)據(jù)讀取,即獲取數(shù)據(jù)表中的多行記錄,
$user->where("name='{$data['name']}'")->select();
若查詢(xún)出錯(cuò),返回值是false,若查詢(xún)結(jié)果為空,則返回null,否則返回二維數(shù)組
(4)delete方法:用于數(shù)據(jù)刪除
$list->where("list_id='$list_id'")->delete();
返回值是刪除的記錄行數(shù)
這四個(gè)操作稱(chēng)為CURD操作,是對(duì)數(shù)據(jù)庫(kù)的基本操作
(5)data方法:用于設(shè)置當(dāng)前要操作的數(shù)據(jù)對(duì)象的值
$data['password']=$_POST['password'];
(6)add方法用于數(shù)據(jù)寫(xiě)入
$user->add($data);
(7)where方法,主要用于添加數(shù)據(jù)庫(kù)操作的限制條件
$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的設(shè)置與刪除
session("username","$username");
session('user_id',$r1['user_id']);
session(null);
5)模板文件:thinkphp內(nèi)置了一個(gè)基于XML的模板引擎thinktemplate,,在變量輸出和制定模板文件時(shí),與smarty模板引擎相同
$this->assign()
$this->display()
我還用到了一個(gè)循環(huán)標(biāo)簽foreach ,用于計(jì)劃列表的輸出
方法中的變量輸出:$this->assign("select",$r);
模板文件中的循環(huán)輸出
{$list.content}
程序員杭州軟件測(cè)試杭州APP開(kāi)發(fā)杭州PHP工程師