PHP学习杂记
┌????┐?????11.10日
??85講 ?HTTP 協(xié)議深講
1.??$_SERVER[‘XXXXXXX’] ?獲取想獲取的網(wǎng)絡(luò)資源
2.?print_r($_SERVER);打印出所有的網(wǎng)絡(luò)資源
3.?print_r 函數(shù),打印
4.?封殺IP訪問(wèn):if($_SERVER[‘REMOTE_ADDR’]==”XXXXXX”){
????進(jìn)行處理。。。。
Header(“Location: err.php”)}
5.?Get 和post 的區(qū)別:post 比get 安全 ;傳輸數(shù)據(jù)大小不一樣;
6.?防盜鏈例子:
a)?盜鏈網(wǎng)站<a href="localhost:8082/import.php">查看某一個(gè)網(wǎng)頁(yè)</a>
b)?正規(guī)網(wǎng)站<html><body>
c)???<a href="import.php">查看賬號(hào)</a>
d)?
e)??</body>
f)?</html>
g)?<?php ??劉送杰的私有領(lǐng)地 ???>
7.頁(yè)面跳轉(zhuǎn):a.php ---->header(“Location: b.php”)-->header(“Location: c.php”),一直跳轉(zhuǎn);還可以跳轉(zhuǎn)到外網(wǎng)去
a)?<?php
b)?header("Location: b.php");
c)?
d)??>
e)?<?php
f)?
g)? header("Location: http://www.baidu.com");
h)?
i)??>
8.Refresh:1;url=http://www.baidu.com ???間隔多少秒才刷新頁(yè)面或者跳轉(zhuǎn)頁(yè)面;
9.php程序打開(kāi)文件
a)?先打開(kāi)文件,判斷文件是否存在 $fp=fopen(“a.txt”,”r+”);
b)?操作文件
c)?關(guān)閉文件fclose($fp);
<?php
?
//.演示下載圖片先死去活來(lái)
$file_name="dl_033.gif";
//1.打開(kāi)文件。讀入圖片
if(!file_exists($file_name)){
echo "文件不存在";
return;
}
$fp=fopen($file_name,"r") ;
?
//獲取下載文件大小
$file_size=filesize($file_name);
echo"文件大小:$file_size";
?
?>
下載過(guò)程:
<?php
?
//.演示下載圖片先死去活來(lái)
$file_name="1.jpg";
//1.打開(kāi)文件。讀入圖片
if(!file_exists($file_name)){
echo "文件不存在";
return;
}
$fp=fopen($file_name,"r") ;
?
//獲取下載文件大小
$file_size=filesize($fp);
?
//返回文件
header("Content-type:application/octet-stream");
//按照字節(jié)大小返回
header("Accept-Range:byte");
//告訴文件大小
header("Accept-Length:$file_size");
//返回文件名。。中文需要轉(zhuǎn)碼
header("Content_Disposition:attachment;filename=".$file_name);
//向客戶端會(huì)送數(shù)據(jù)
$buffer="1024";
//判斷文件是否結(jié)束
while(!feof($fp)){
$file_data=fread($fp,$buffer);
echo $file_data;
?
}
fclose($fp);
?>
?
文件下載函數(shù)
<?php
//對(duì)函數(shù)說(shuō)明:文件名,下載文件夾路徑“/xxx/xxx/”。但是要在站點(diǎn)下面
?
function down_file($file_name,$file_sub_dir){
//.演示下載圖片先死去活來(lái)
$file_name="中文.jpg";
//中文亂碼問(wèn)題,對(duì)中文進(jìn)行處理,進(jìn)行轉(zhuǎn)碼成gb2312
$file_name=iconv("utf-8","gb2312",$file_name);
//更改路徑了,所有下載文件全部在一個(gè)下載文件夾下面
//相對(duì)路徑
//$file_path="./down/".$file_name;
//絕對(duì)路徑..會(huì)快一些
$file_path=$_SERVER['DOCUMENT_ROOT'].$file_sub_dir.$file_name;
//文件下載列表
?
?
//1.打開(kāi)文件。讀入圖片
if(!file_exists($file_path)){
echo "文件不存在";
return;
}
$fp=fopen($file_path,"r") ;
?
//獲取下載文件大小
$file_size=filesize($file_path);
if($file_size>30){
echo " <script language='javascript'>window.alert('文件太大')</script>";
return;
}
//返回文件
header("Content-type:application/octet-stream");
//按照字節(jié)大小返回
header("Accept-Range:byte");
//告訴文件大小
header("Accept-Length:$file_size");
//返回文件名。。中文需要轉(zhuǎn)碼
header("Content_Disposition:attachment;filename=".$file_name);
//向客戶端會(huì)送數(shù)據(jù)
$buffer="1024";
//為了下載的安全,我們最好做一個(gè)文件字節(jié)的讀取器
$file_count=0;
//判斷文件是否結(jié)束
while(!feof($fp)&&($file_size-$file_count>0)){
$file_data=fread($fp,$buffer);
//統(tǒng)計(jì)多了多少個(gè)字節(jié)
$file_count+=$bufffer;
echo $file_data;
?
}
fclose($fp);
}
?
//測(cè)試函數(shù)
down_file("中文.jpg","/down/");
?>
222
<?php
//對(duì)函數(shù)說(shuō)明
//參數(shù)說(shuō)明:$file_name 文件名
function down_file($file_name,$file_sub_path){
/*相對(duì)路徑方法代碼
$file_name="順明.jpg"'
//對(duì)中文進(jìn)行轉(zhuǎn)碼,由utf-8轉(zhuǎn)碼成gb2312
$file_name=iconv("utf-8","gb2312",$file_name);
//相對(duì)路徑
$file_path="./down/".$file_name;
if(!file_exists($file_path)){
echo "文件不存在";
return;
}
$fp=fopen($file_name,"r");
?
$file_size=filesize($file_path);
if()
//返回的文件
header("Content_type:application/octet-stream");
//按照字節(jié)大小返回
header("Accept-Ranges:bytes");
//返回文件大小
header("Accept-Length:$file_size");
//這里彈出對(duì)話框,對(duì)應(yīng)的文件名
header("Accept-Disposition:attachment;filename=".$file_name"");
?
//向客戶端返回?cái)?shù)據(jù)
$buffer=1024;
//為了下載安全,我們最好做一個(gè)文件字節(jié)計(jì)數(shù)器
$file_count=0;
while(!feof($fp)&&($file_size-file_count>0)){
$file_data=fread($fp,$buffer);
$file_count+=$buffer;
echo $file_data;
fclose($fp);
*/
?
//對(duì)中文進(jìn)行轉(zhuǎn)碼,由utf-8轉(zhuǎn)碼成gb2312
$file_name=iconv("utf-8","gb2312",$file_name);
//絕對(duì)路徑方法代碼
$file_path=$_SERVER['DOCUMENT_ROOT']."./down/".$file_name;
if(!file_exists($file_path)){
echo "文件不存在";
return;
}
$fp=fopen($file_name,"r");
//獲取下載文件的大小
$file_size=filesize($file_path);
if($file_size>1024){
echo"<script language='javascript'>window.alert('文件過(guò)大')</script>";
return;
}
//返回的文件
header("Content_type:application/octet-stream");
//按照字節(jié)大小返回
header("Accept-Ranges:bytes");
//返回文件大小
header("Accept-Length:$file_size");
//這里彈出對(duì)話框,對(duì)應(yīng)的文件名
header("Accept-Disposition:attachment;filename=".$file_name"");
?
//向客戶端返回?cái)?shù)據(jù)
$buffer=1024;
//為了下載安全,我們最好做一個(gè)文件字節(jié)計(jì)數(shù)器
$file_count=0;
while(!feof($fp)&&($file_size-file_count>0)){
$file_data=fread($fp,$buffer);
$file_count+=$buffer;
echo $file_data;
}
}
fclose($fp);
?>
?
FileDownlist.php
<meta http-type="content-type" content="text/html;charset=utf-8">
<?php
?
header("Content-type:text/html;charset=utf-8");
?>
<a href='filedownprocess.php?filename=dl_033.gif'>單擊下載</a><img src='dl_033.gif'><br><br>
<a href='filedownprocess.php?filename=dl_033.gif'>單擊下載</a><img src='dl_033.gif'><br><br>
<a href='filedownprocess.php?filename=dl_033.gif'>單擊下載</a><img src='dl_033.gif'><br><br>
<a href='filedownprocess.php?filename=dl_033.gif'>單擊下載</a><img src='dl_033.gif'><br><br>
<a href='filedownprocess.php?filename=dl_033.gif'>單擊下載</a><img src='dl_033.gif'><br><br>
<a href='filedownprocess.php?filename=dl_033.gif'>單擊下載</a><img src='dl_033.gif'><br><br>
?
filedownprocess.php
<?php
require "filedownService.php";
header("Content-type:text/html;charset=utf-8");
$file_name=$_REQUEST['filename'];
?
down_file($file_name,"/down/");
?>
filedownService.php
<?php
//對(duì)函數(shù)說(shuō)明:文件名,下載文件夾路徑“/xxx/xxx/”。但是要在站點(diǎn)下面
?
function down_file($file_name,$file_sub_dir){
//.演示下載圖片先死去活來(lái)
$file_name="中文.jpg";
//中文亂碼問(wèn)題,對(duì)中文進(jìn)行處理,進(jìn)行轉(zhuǎn)碼成gb2312
$file_name=iconv("utf-8","gb2312",$file_name);
//更改路徑了,所有下載文件全部在一個(gè)下載文件夾下面
//相對(duì)路徑
//$file_path="./down/".$file_name;
//絕對(duì)路徑..會(huì)快一些
$file_path=$_SERVER['DOCUMENT_ROOT'].$file_sub_dir.$file_name;
//文件下載列表
?
?
//1.打開(kāi)文件。讀入圖片
if(!file_exists($file_path)){
echo "文件不存在";
return;
}
$fp=fopen($file_path,"r") ;
?
//獲取下載文件大小
$file_size=filesize($file_path);
if($file_size>3081024*1024){
echo " <script language='javascript'>window.alert('文件太大')</script>";
return;
}
//返回文件
header("Content-type:application/octet-stream");
//按照字節(jié)大小返回
header("Accept-Range:byte");
//告訴文件大小
header("Accept-Length:$file_size");
//返回文件名。。中文需要轉(zhuǎn)碼
header("Content_Disposition:attachment;filename=".$file_name);
//向客戶端會(huì)送數(shù)據(jù)
$buffer="1024";
//為了下載的安全,我們最好做一個(gè)文件字節(jié)的讀取器
$file_count=0;
//判斷文件是否結(jié)束
while(!feof($fp)&&($file_size-$file_count>0)){
$file_data=fread($fp,$buffer);
//統(tǒng)計(jì)多了多少個(gè)字節(jié)
$file_count+=$bufffer;
echo $file_data;
}
fclose($fp);
}
//測(cè)試函數(shù)
//down_file("中文.jpg","/down/");
?>
?
?
?
11.10 晚上 ??數(shù)據(jù)庫(kù)編程 mysql ?mysqlli ?pdo
mysql擴(kuò)展庫(kù): 其實(shí)就是一套函數(shù)
mysql擴(kuò)展庫(kù) 與mysql 數(shù)據(jù)庫(kù)的區(qū)別:,一個(gè)是函數(shù)(操作),一個(gè)是數(shù)據(jù)
?
11.11日
1.啟動(dòng)數(shù)據(jù)庫(kù) net start mysql
2.連接數(shù)據(jù)庫(kù) mysql -h localhost -u root -p;(mysql -h IP地址 -u 賬戶 -p)
Enter password: 123456789;
3.查看數(shù)據(jù)庫(kù): show databases; 創(chuàng)建數(shù)據(jù)庫(kù): create databases test1;
4.選擇數(shù)據(jù)庫(kù): use test1;
5.查看數(shù)據(jù)庫(kù)里面的表 show tables;
6.創(chuàng)建表:create table user1; 刪除表: delete table user1;
7.插入數(shù)據(jù): insert into user1(name,passwd,email,age) values('zs',md5(123456),'123@sohu.com',23);
8.查看數(shù)據(jù):select * from user1;
9.Delete from user1 where id=5;
10.Php程序 操作數(shù)據(jù)庫(kù)
<?php
?
// php 去操作mysql
//步驟如下:
//1.建立連接
$conn=mysql_connect("127.0.0.1","root","123456789"); //IP地址服務(wù)器名稱,mysql賬戶,mysql密碼
if(!$conn){
die("連接數(shù)據(jù)庫(kù)失敗!".mysql_error());
}else {
echo "數(shù)據(jù)庫(kù)連接成功<br><br>";
}
?
//2. 選擇數(shù)據(jù)庫(kù)
mysql_select_db("test");
?
//3.設(shè)置操作編碼(可有可無(wú))
//4.發(fā)送操作指令:ddl,dml,dql,dt1 ?;
$sql="select * from user1";
//函數(shù),向數(shù)據(jù)庫(kù)發(fā)送一個(gè)語(yǔ)句,并且返回一個(gè)結(jié)果集$res ,就是一張表
$res=mysql_query($sql,$conn);
//var_dump($res);
//5.接收返回的結(jié)果集,并處理,(顯示)
//mysql_fetch_row函數(shù)會(huì)一次取出$res結(jié)果集的下一行數(shù)據(jù),賦值給$row;
//$row數(shù)組,隨便你怎么取數(shù);
while($row=mysql_fetch_row($res)){
//第一種取法:
//echo "<br> $row[0]--$row[1]--$row[2]";
//echo "<br>";
//var_dump($row);全部打印出來(lái)了,
//第二種取法:
foreach($row as $key=>$val){
echo"--$val";
}
echo "<br>";
}
?
/* array(5) { [0]=> string(1) "1" [1]=> string(2) "zs" [2]=> string(32) "e10adc3949ba59abbe56e057f20f883e" [3]=> string(12) "123@sohu.com" [4]=> string(2) "23" } ???*/
?
//6. 釋放資源內(nèi)存,必須釋放!!!關(guān)閉連接
mysql_free_result($res); //必須的
mysql_close($conn) ???//這個(gè)可有可無(wú),因?yàn)?/span>mysql會(huì)在沒(méi)有連接以后自動(dòng)關(guān)閉的
?>
?
11.從$res獲取行數(shù)據(jù)的時(shí)候,處理mysql_fetch_row($res) ,還有三種方法
A)mysql_fetch_row($res) ???索引數(shù)組
B)mysql_fetch_assoc($res) ??關(guān)聯(lián)數(shù)組
C)Mysql_fetch_ayyay($res) 返回索引數(shù)組和關(guān)聯(lián)數(shù)組(兩套同時(shí)存在)
D)Mysql_fetch_object($res) 把一行數(shù)據(jù)當(dāng)作一個(gè)對(duì)象
?
12.一個(gè)增刪改,查的例子
<?php
//演示對(duì)user1表進(jìn)行增、刪、改、查等操作;
$conn=mysql_connect("localhost","root","123456789");
if(!$conn){
die("數(shù)據(jù)庫(kù)連接失敗!".mysql_error());
}else{
echo "數(shù)據(jù)庫(kù)連接成功";
echo"<br>";
}
mysql_select_db("test",$conn) or die(mysql_error());
mysql_query("set names utf8");
//插入數(shù)據(jù)
//$sql="insert into user1(name,passwd,email,age) values('小明',md5(1234),'123456@qq.com',25)";
//刪除數(shù)據(jù)
//$sql="delete from user1 where id=6";
//修改數(shù)據(jù)
$sql="update user1 set age=1 where id=7";
?
?
//如果是dml操作,則返回bool值,true ?of false ;
$res=mysql_query($sql,$conn);
if(!$res){
die( "操作失敗!".mysql_error());
}
//看看有幾條數(shù)據(jù)
if(mysql_affected_rows($conn)>0){
echo "操作成功!";
}else{
echo "沒(méi)有影響到行數(shù)";
}
?
mysql_close($conn);
?
?>
?
13.把以上的操作封裝成一個(gè)mysqlhelp 類(lèi)
?
?
?
?
?
?
?
11.13日
獲取一個(gè)表的內(nèi)部信息
<?php
//獲取一個(gè)表名,然后獲取表的信息,打印出來(lái)
Function show_table_info($table_nam3){
//連接數(shù)據(jù)庫(kù)
$conn=connect(“l(fā)ocalhost”,”root”,”123456789”);
If(!$conn){
die(“連接數(shù)據(jù)庫(kù)失敗”.mysql_error());
}
//選擇數(shù)據(jù)庫(kù)
Mysql_select_db(“test”);
設(shè)置查詢出來(lái)的數(shù)據(jù)為utf8字符集
Mysql_query(“set names utf8”);
//查詢語(yǔ)句
$sql=”select * from $table_name”;
//根據(jù)函數(shù)輸入查詢語(yǔ)句,并且返回結(jié)果集
$res=mysql_query($sql);
?
//我要知道總共有多少行,多少列
$row=mysql_affected_rows($conn);
$colums=mysql_num_fields($res);
/*
$row=mysql_affected_rows($conn);
$cloums=mysql_num_fields($res);
$row=mysql_fetch_rows($res);
Echo “$row[$i]”; */
?
Echo “<table border=1><tr>”;
For($i=0;$i<$colums;$i++){
$field_name=mysql_field_name($res,$i);
Echo”<th>$field_name</th>”;
?
}
Echo “</tr>”;
While($row=mysql_fetch_rows($res)){
Echo “<tr>”;
For($i=0;$i<$colums;$i++){
Echo “<th>$row[$i]</th>”;
}
Echo”</tr>”;
}
Echo “</table>”;
?
}
show_tab_info("user1");
?>
?
11.14日,中英文字典同時(shí)實(shí)現(xiàn) ??第93講---》》實(shí)現(xiàn)變種+熟練
?
94講:
<?php
//先解決編碼問(wèn)題
Header(“content-type:text/html;charset=utf-8”);
//創(chuàng)建對(duì)象,
$mysqli=new mysqli(“l(fā)ocalhost”,”root”,”123456789”,”test”);
//判斷成功與否
If($mysql->connect_error){
Die(“連接失敗”.$mysqli->connect_error);
}
//操作數(shù)據(jù)庫(kù)
$sql=”select * from user1”;
$res=$mysqli->query($sql)
//顯示返回結(jié)果集
While($row=$res->fetch_row()){
Foreach($row as $key=>$val){
Echo “--$val”;
}
Echo”<br>”;
}
//關(guān)閉資源
$res->free();
Mysqli->close();
?
?>
?
95講
?
97講 ?mysqli 批量添加刪除
97講 mysqli 事物控制、事物處理
1.開(kāi)啟一個(gè)事物:start transaction
2.做一個(gè)保存點(diǎn): savepoint 保存點(diǎn)名稱
3.執(zhí)行操作
4.可以回滾/可以提交
4.1如果沒(méi)有問(wèn)題就提交
4.2如果有問(wèn)題則回滾
?
?
11.15晚上 ?mysqli 預(yù)處理技術(shù)stmt
<?php
//1.創(chuàng)建mysqli對(duì)象
$mysqli=new mysqli(“l(fā)ocalhost”,”root”,”123456789”,”test”);
//2.創(chuàng)建預(yù)編譯對(duì)象
$sql=”insert into user1(name,passwd,eamil,age) values(?,?,?,?)”;
$mysqli_stmt=$mysqli->prepare($sql);
//3.綁定參數(shù)
$name=”小倩”;
$passwd=”xiaoqian”;
$email=”xq@sohu.com”;
$age=”200”;
//4.將綁定的參數(shù)-> 給? 賦值,這里類(lèi)型和順序要對(duì)應(yīng)
$mysqli_stmt->bind_param(“sssi”,$name,$passwd,$eamil,$age);
//5.執(zhí)行
$b=$mysqli_stmt->execute();
[3-5是可以重復(fù)的,所以實(shí)現(xiàn)預(yù)編譯,多次發(fā)送數(shù)據(jù)
//3.綁定參數(shù)
$name=”老妖”;
$passwd=”laoyao”;
$email=”xly@sohu.com”;
$age=”250”;
//4.將綁定的參數(shù)-> 給? 賦值,這里類(lèi)型和順序要對(duì)應(yīng)
$mysqli_stmt->bind_param(“sssi”,$name,$passwd,$eamil,$age);
//5.執(zhí)行
$b=$mysqli_stmt->execute();
?
]
//6.判斷
If(!$b){
Die(“執(zhí)行失敗”.$mysqli_stmt->error);
}else{
Echo “執(zhí)行成功”;
}
//7.釋放
$mysqli->close();
?
?
?>
?
11.16超全局?jǐn)?shù)組
1.$_GET ?用于傳送超鏈接內(nèi)容或者表單
test.php
<?php
echo "<a href='a.php?city=北京好&name=xiaoming'>傳送數(shù)據(jù)</a>";
?>
a.php
<?php
echo "<pre>";
echo print_r($_GET);
echo "</pre>";
?
//如果想取出具體哪個(gè),則去具體名字
echo $_GET['name'];
?>
2.$_POST 傳送表單內(nèi)容 通過(guò)http POST 方法傳遞的數(shù)據(jù)被封裝在$_POST超全局中
注意表單的有些細(xì)節(jié)
3.$_REQUST
$_REQUST中可以包括:$_GET,$_POST.$_COOKIE數(shù)組的信息,可以理解為二維的
?
102講
1.?$_SERVER 包含 hhtp協(xié)議(客戶端)瀏覽器帶來(lái)的信息,還有一個(gè)服務(wù)器本身的信息
2.$_ENV 獲取環(huán)境變量
?
11.17日 ?103講 雇員管理系統(tǒng)
培養(yǎng)項(xiàng)目的感覺(jué),
認(rèn)識(shí)MVC模式
規(guī)劃項(xiàng)目
融合知識(shí)點(diǎn),php基礎(chǔ)、html,數(shù)據(jù)庫(kù),開(kāi)發(fā)模式,cookie
?
開(kāi)發(fā):使用原型開(kāi)發(fā)
需求分析--->>>設(shè)計(jì)階段-->>編碼階段--->>>測(cè)試階段--->>發(fā)布維護(hù)階段
需求階段: 需求設(shè)計(jì)人員/項(xiàng)目經(jīng)理,架構(gòu)師 ???與客戶(領(lǐng)導(dǎo))交流聽(tīng)取意見(jiàn),讓他聽(tīng)意見(jiàn)。引導(dǎo)他。---->>>形成需求文檔
設(shè)計(jì)階段:技術(shù)人員(架構(gòu)師-->>組長(zhǎng)-->>程序員)--->>>設(shè)計(jì)數(shù)據(jù)庫(kù)
開(kāi)發(fā)階段: 組長(zhǎng),程序員(基本工資+項(xiàng)目提成);跟好項(xiàng)目
測(cè)試階段:測(cè)試人員
發(fā)布階段:發(fā)布到對(duì)方服務(wù)器,實(shí)施工程師,去實(shí)施,
評(píng)估一個(gè)程序員技術(shù): ?工作年齡 -->>>>做過(guò)的項(xiàng)目
美工(ps畫(huà)圖)---->>>>網(wǎng)頁(yè)前端人員《html》[原型]--->>>客戶 ---->>>>程序員
?
開(kāi)發(fā)文檔:
一.需求分析
1開(kāi)發(fā): 美工處理出來(lái)界面模型,給客戶看一看
2.需求分析:
二.時(shí)序圖
三.界面設(shè)計(jì)
四.編寫(xiě)代碼
1.設(shè)計(jì)數(shù)據(jù)庫(kù)。
管理員表 admin
員工表emp
先建立數(shù)據(jù)庫(kù):empmanage
?
再建立表
?
管理員表
admin
?
create table admin(
id int primary key,
name varchar(64) not null,
password varchar(128) not null
);
?
insert into admin values(100,'admin',md5('admin'));
?
雇員表
emp
?
create table emp(
id int primary key auto_increment,
name varchar(64) not null,
grade tinyint, /*1表示一級(jí)工 */
email varchar(64) not null,
salary float
);
?
?
insert into emp(id,name,grade,email,salary)values(1,'liusongjie',1,'lsj@sohu.com',200);
insert into emp(id,name,grade,email,salary)values(2,'liusongjie1',3,'lsj@sohu.com',205);
insert into emp(id,name,grade,email,salary)values(3,'liusongjie2',2,'lsj@sohu.com',205);
insert into emp(id,name,grade,email,salary)values(4,'liusongjie3',2,'lsj@sohu.com',205);
insert into emp(id,name,grade,email,salary)values(5,'liusongjie4',3,'lsj@sohu.com',205);
insert into emp(id,name,grade,email,salary)values(6,'liusongjie5',3,'lsj@sohu.com',205);
insert into emp(id,name,grade,email,salary)values(7,'liusongjie6',3,'lsj@sohu.com',205);
insert into emp(id,name,grade,email,salary)values(8,'liusongjie7',3,'lsj@sohu.com',205);
insert into emp(id,name,grade,email,salary)values(9,'liusongjie8',3,'lsj@sohu.com',205);
?
?
創(chuàng)建到mysql數(shù)據(jù)庫(kù)中
1.先建立數(shù)據(jù)庫(kù):create empmanage;
2.use empmanage;
3.簡(jiǎn)表
4.添加數(shù)據(jù)
五.代碼階段:
1.準(zhǔn)備素材:圖片,靜態(tài)頁(yè)面,flash,文字。。。。
?
創(chuàng)建一個(gè)項(xiàng)目empManage
?
創(chuàng)建程序框架圖
?
?
?
?
?
?
?
1.不要到數(shù)據(jù)庫(kù)去驗(yàn)證,就可以登陸成功,如果不成功,給出提示
/* ????//1.第一種簡(jiǎn)單驗(yàn)證方式
if($id=="100"&&$password=="123"){
header("Location:empManage.php");
exit();
}else{
header("location:login.php?errno=1");
exit();
}
*/
2.要求數(shù)據(jù)庫(kù)驗(yàn)證,判斷該用戶是否存在或者密碼是否正確
//第二種,防止注入攻擊型
//1,先連接數(shù)據(jù)庫(kù)
$conn=mysql_connect("localhost","root","123456789");
if(!$conn){
die("連接失敗".mysql_errno());
}
//設(shè)置數(shù)據(jù)庫(kù)的編碼形式
mysql_query("set names utf8",$conn) or die(mysql_errno());
//選擇數(shù)據(jù)庫(kù)
mysql_select_db("empmanage",$conn)or die(mysql_errno());
//發(fā)生sql語(yǔ)句,驗(yàn)證
//防止sql注入攻擊
//變換驗(yàn)證邏輯
$sql="select password,name from admin where id=$id";
//1.通過(guò)輸入的id來(lái)獲取數(shù)據(jù)庫(kù)的秘密,然后再和輸入的密碼比對(duì);
$res=mysql_query($sql);
if($row=mysql_fetch_assoc($res)){
//查詢到,則取出數(shù)據(jù)庫(kù)密碼
if($row['password']==md5($password)){
//說(shuō)明合法
$name=$row['name'];
header("Location:empManage.php?name=$name");
//如果要跳轉(zhuǎn),帶上exit();有利于快速結(jié)束
exit();
}
}
header("Location:login.php?errno=1");
exit();
mysql_free_result($res);
mysql_close($conn);
3.3.在管理頁(yè)面實(shí)現(xiàn)顯示登陸人的名字
echo "歡迎".$_GET['name']."登錄成功!";
4.在用戶管理界面empList.php顯示所有的雇員信息
5.分頁(yè)顯示雇員信息
思路: 分頁(yè)有幾個(gè)變量
$pageNow->顯示第幾頁(yè),用戶輸入或者選擇
$pageCount->共有幾頁(yè)
$rowCount->共有多少條記錄(從數(shù)據(jù)庫(kù)獲取)
$pageSize->每頁(yè)顯示多少條記錄(程序中定義)
?
$sql="select * from emp limit 3,3";
6.分頁(yè)顯示:
$pageSize=3;//定義每頁(yè)顯示數(shù)據(jù)條數(shù)的數(shù)量
$rowCount=0;//代表從數(shù)據(jù)庫(kù)抓取的總數(shù)據(jù)記錄條數(shù)
$pageNow=1;//當(dāng)前顯示哪個(gè)頁(yè)面。由用戶指定
If(!empty($pageNow=$_GET[‘pageNow’])){
$pageNow=$_GET[‘pageName’];
}
$pageCount=0;//計(jì)算出總共有多少頁(yè)
$sql=”select count(id) from emp”;
$res=mysqli_query($sql);
If($row=mysql_fetch_row[$res]){
//取出總數(shù)據(jù)行數(shù)
$rowCount=$row[0];
}
//計(jì)算出共有多少頁(yè)
$pageCount=ceil($rowCount/$pageSize);
//控制查詢的數(shù)據(jù)條數(shù)從什么時(shí)候顯示在什么頁(yè)面
$sql=”select * from emp limit “.($pageNow-1)*$pageSize.”,$pageSize”;
$res2=mysql_query($sql,$conn);
//制作顯示表格
echo "<table border='1' width='700px'>";
//顯示表頭,可以固定寫(xiě)死,也可以通過(guò)查詢出來(lái)顯示
echo "<tr><th>id</th><th>name</th><th>grade</th><th>email</th><th>salary</th>
<th>刪除用戶</th><th>修改用戶</th></tr>";
//循環(huán)顯示信息
while($row=mysql_fetch_assoc($res2)){
echo "<tr><td>{$row['id']}</td><td>{$row['name']}</td>
<td>{$row['grade']}</td><td>{$row['email']}</td><td>{$row['salary']}</td>
<td><a href='#'>刪除用戶</a></td><td><a href='#'>管理用戶</a></td></tr>";
}
echo "<h1>雇員信息列表</h1>";
echo "</table>";
//控制打出頁(yè)面的超鏈接
For($i=1;$i<=$pageCount;$i++){
Echo “<a href=”empList.php?pageNow=$i”>$i</a>”;
}
7.測(cè)試sql語(yǔ)句的效率
比如:測(cè)試分頁(yè)的效率,在實(shí)際開(kāi)發(fā)中,數(shù)據(jù)量很大的,需要進(jìn)行測(cè)試,
Mysql 自我復(fù)制
insert into emp(name,grade,email,salary) select name,grade,email,salary from emp;
?
批量復(fù)制:加入
insert into emp(name,grade,email,salary) select name,grade,email,salary from emp;
delete from emp(name,grade,email,salary) select name,grade,email,salary from emp;
批量刪除:
DELETE FROM emp WHERE grade=2 ORDER BY grade LIMIT 100000;
8.頁(yè)面跳轉(zhuǎn)功能
if($pageNow>1){
$prePage=$pageNow-1;
echo "<a href='empList.php?pageNow=$prePage'>上一頁(yè)</a>?";
}
if($pageNow<$pageCount){
$nextPage=$pageNow+1;
echo "<a href='empList.php?pageNow=$nextPage'>下一頁(yè)</a>?";
}
echo "當(dāng)前頁(yè){$pageNow}/共{$pageCount}頁(yè)";
//指定跳轉(zhuǎn)到某頁(yè)
echo "<br><br>";
?>
<form?action="empList.php">
跳轉(zhuǎn)到:<input?type="text"?name="pageNow">
<input?type="submit"?value="go">
</form>
?
10.網(wǎng)站結(jié)構(gòu)問(wèn)題
?Model1模式 ?,分層模式,
MVC模式 , ?zend framework, ?thinkphp
軟件開(kāi)發(fā)三個(gè)階段:Model1模式 ->>分層mv->>mvc模式
Model1模式 :界面和業(yè)務(wù)在一個(gè)頁(yè)面,
分層模式:界面也業(yè)務(wù)分開(kāi),->結(jié)構(gòu)清晰,有利于開(kāi)發(fā)
mvc模式;
?
?
11.關(guān)于析構(gòu)函數(shù)和構(gòu)造函數(shù)的犯錯(cuò)問(wèn)題:
前面是兩個(gè)下劃線 __ ?兩個(gè)!!!
<?php
class BaseClass {
???function __construct() {
???????print "In BaseClass constructor\n";
???}
}
class SubClass extends BaseClass {
???function __construct() {
???????parent::__construct();
???????print "In SubClass constructor\n";
???}
}
class OtherSubClass extends BaseClass {
????// inherits BaseClass's constructor
}
// In BaseClass constructor
$obj = new BaseClass();
// In BaseClass constructor
// In SubClass constructor
$obj = new SubClass();
// In BaseClass constructor
$obj = new OtherSubClass();
?
?>
?
驗(yàn)證碼功能:
<tr><td><input?type="text"?name="checkcode"></td><td><img?src="checkCode.php"?onclick="this.src='checkCode.php?aa='Math.random()''"></td></tr>
?
116-122講解cookie和session 知識(shí)點(diǎn),防止攻擊,增加確認(rèn),增加驗(yàn)證碼功能
123講,php的文件編程
1.打開(kāi)文件:fopen() ??查看文件詳細(xì)信息:fstat 關(guān)閉文件:fclose
2.讀取文件
<?php
$file_path="test.txt";
?
//第一種讀取方法
/*
if(file_exists($file_path)){
$fp=fopen($file_path,"a+");
$con=fread($fp,filesize($file_path));
echo "文件內(nèi)容是:<br>";
//替換符:替換掉換行符等等
$con=str_replace("\r\n","<br/>",$con);
echo $con;
}else{
echo "文件不存在";
}
*/
//第二種讀取方法
/*$con=file_get_contents($file_path);
$con=str_replace("\r\n","<br/>",$con);
echo $con;
*/
?
//第三種方法
$fp=fopen($file_path,"a+");
$buffer=1024;
$str="";
while(!feof($fp)){
//讀
$str.=fread($fp,$buffer);
$con=str_replace("\r\n","<br/>",$str);
echo $con;
}
fclose(fp);
?>
把用戶名/密碼/數(shù)據(jù)庫(kù)等等。封裝到一個(gè)db.ini文件中,然后讀取就行
Db.ini {
host=192.168.1.3
user=admin
password=123
}
然后寫(xiě)調(diào)用代碼:
<?php
?
$arr1=parse_ini_file("db.ini");
//print_r($con)
mysql_connect($arr1['host'],$arr1['user'],$arr1['password']);
?>
?
3.寫(xiě)文件第一種方法
<?php
$file_path="test.txt";
if(file_exists($file_path)){
$fp=fopen($file_path,"w+");
$conn="\r\nhello你好!!";
for($i=0;$i<10;$i++){
fwrite($fp,$conn);
}
}else{
}
echo "添加成功!";
fclose($fp);
?>
第二種方法
$file_path="test.txt";
$conn="hello北京你好!\r\n";
//封裝的函數(shù)
file_put_contents($file_path,$conn,FILE_APPEND);
?
echo "添加成功!";
fclose($fp);
4.文件的拷貝
<?php
//中文轉(zhuǎn)碼問(wèn)題
$file_path=iconv("UTF-8","gb2312","C:\\Apache24\\htdocs\\example\\file\\劉.jpg");
//盡量用英文字符名稱
if(!copy($file_path,"d:\\11.jpg")){
echo "error";
}else{
echo "success!";
}
?>
5.文件的下載:參看http課程 87講和88講
6.文件創(chuàng)建與刪除,文件夾的創(chuàng)建與刪除
<?php
//6.文件創(chuàng)建與刪除,文件夾的創(chuàng)建與刪除
//1.創(chuàng)建文件夾
//可以先判斷是否存在
/*
if(!is_dir("d:/shunping2")){
if(mkdir("d:/shunping2")){
echo "創(chuàng)建文件夾success!";
}else{
echo "error!";
}
}else{
echo "該文件夾已經(jīng)有了";
} ??*/
//創(chuàng)建多個(gè)連級(jí)文件夾
/*
$path="D:/shunping3/aa/bb";
if(!is_dir($path)){
if(mkdir($path,0777,true)){
echo "創(chuàng)建文件夾ok";
}else{
echo "創(chuàng)建文件夾error";
}
}else{
echo "該文件夾有了";
} */
//刪除文件夾。。但是這個(gè)函數(shù)的缺點(diǎn)就是存在子文件或者文件夾則無(wú)法使用
/*if(rmdir("D:/shunping3")){
echo "刪除成功";
}else{
echo "shanchu失敗";
} ?*/
//4.文件是創(chuàng)建, 最簡(jiǎn)單
?/* ?$file_path="D:/shunping3/aa.txt";
$fp=fopen($file_path,"w+");//w + ?代表,不存在就去創(chuàng)建
fwrite($fp,"hello! world!!!ooo");
echo "chuangj ?ok!";
fclose($fp); ?*/
//5.s刪除文件
$file_path="D:/shunping3/aa.txt";
if(is_file($file_path)){
if(unlink($file_path)){
echo "刪除success";
}else{
echo "刪除error";
}
}else{
echo "文件不存在";
}
?>
?
124講 ?php文件編程,實(shí)際運(yùn)用
Upload.php 文件上傳界面
注意事項(xiàng)
一.<!--文件上傳,一定要注意1.enctype="multipart/form-data",2.method post ?-->
<form enctype="multipart/form-data" method="post" action ="??" name="myform">
二.<input type=”file”?name=”mufile”>
三.<input type=”submit”?value=”上傳文件”>
四.特殊情況處理哦
<?php
?
//接收提交用戶的用戶
$username=$_POST['username'];
$fileintro=$_POST['fileintro'];
?
echo "$username<br>$fileintro<br>";
?
//接收文件 ??需要使用到 $_FILES 超全局?jǐn)?shù)組,二維的!!!
/*echo"<pre>";
print_r($_FILES);
echo"</pre>"; */
?
//獲取文件的大小,,限制大小
$file_size=$_FILES['myfile']['size'];
if($file_size>2*1024*1024){
echo "上傳文件太大,請(qǐng)選擇小于2M的文件!"; ///可以選擇彈出對(duì)話框 用javascript實(shí)現(xiàn)
exit();
}
//獲取文件的類(lèi)型,,,限制類(lèi)型
$file_type=$_FILES['myfile']['type'];
if($file_type!='image/jpeg' && $file_type!='pjpeg'&&$file_type!='image/jpg'){ ??///擴(kuò)散其他類(lèi)型
echo "只支持jpg類(lèi)型文件上傳";
exit();
}
//防止覆蓋已經(jīng)存在的,所以要隨時(shí)建立動(dòng)態(tài)文件或者動(dòng)態(tài)文件夾
?
//判斷是否上傳ok
if(is_uploaded_file($_FILES['myfile']['tmp_name'])){
//上傳成功,把文件轉(zhuǎn)存到自己的新位置
$uploaded_file=$_FILES['myfile']['tmp_name'];
??//防止覆蓋已經(jīng)存在的,所以要隨時(shí)建立動(dòng)態(tài)文件或者動(dòng)態(tài)文件夾,使用函數(shù)實(shí)現(xiàn)!!
??//第一種,用用戶名命名,防止用戶名相同
$user_path=$_SERVER['DOCUMENT_ROOT']."/file/up/".$username;
$user_path=iconv("utf-8","gb2312",$user_path);
//判斷該用戶是否已經(jīng)存在文件夾
if(!file_exists($user_path)){
mkdir($user_path);
}
//防止覆蓋已經(jīng)存在的,所以要隨時(shí)建立動(dòng)態(tài)文件或者動(dòng)態(tài)文件夾,使用函數(shù)實(shí)現(xiàn)!!
//第二種,動(dòng)態(tài)命名,防止覆蓋同一個(gè)用戶文件名相同的文件
//$move_to_file=$user_path."/".$_FILES['myfile']['name']; ?//很多細(xì)節(jié)
$file_true_name=$_FILES['myfile']['name'];
//substr 函數(shù)截取你想截取的字符,strrpos判斷你想截取的字符最后出現(xiàn)的位置
$move_to_file=$user_path."/".time().rand(1,1000).substr($file_true_name,strrpos($file_true_name,"."));
//echo $uploaded_file."||".$move_to_file;
??//防止覆蓋已經(jīng)存在的,所以要隨時(shí)建立動(dòng)態(tài)文件或者動(dòng)態(tài)文件夾,使用函數(shù)實(shí)現(xiàn)!!
?if( move_uploaded_file($uploaded_file,iconv("UTF-8","gb2312","$move_to_file"))){
echo $_FILE['myfile']['name']."上傳ok!";
?}else{
echo "上傳失敗!";
?}
?
}else{
echo "未上傳任何文件!";
}
?>
?
?
127講 ?php 繪圖技術(shù)
Php繪圖技術(shù)步驟
1.創(chuàng)建畫(huà)布
2.繪制圖形:利用自帶GD庫(kù)。(圓,直線,扇形,柱狀圖,餅狀圖)
3.輸出圖像或者到網(wǎng)頁(yè)/另存為
4.銷(xiāo)毀圖片,釋放內(nèi)存
?
網(wǎng)站常用圖片格式:gif ?, ?jpg ?, jpeg ?, ?png , ?bmp ?,
?
?
畫(huà)圖基礎(chǔ)
<?php
// 1.創(chuàng)建畫(huà)布
//默認(rèn)背景是黑色
$im=imagecreatetruecolor(400,300);
?
//2.繪制圖形:利用自帶GD庫(kù)。(圓,直線,扇形,柱狀圖,餅狀圖)
//創(chuàng)建顏色
$red=imagecolorallocate($im,255,0,0);
?
//畫(huà)一個(gè)圓函數(shù)imageellipse ,也可以變橢圓,改變寬和高就行 imageellipse($im,20,20,40,20,$red);
//imageellipse($im,20,20,20,20,$red);
//直線imageline
//imageline($im,0,0,60,60,$red);
//矩形
//imagerectangle($im,0,0,40,50,$red);
//實(shí)心矩形
//imagefilledrectangle($im,0,0,40,50,$red);
//弧線 ,就是在橢圓上面截取一部分0-360里面取
//imagearc($im,100,100,100,150,0,60,$red);
//扇形,就是填充弧形,但是帶一個(gè)參數(shù),什么樣的形狀
//imagefilledarc($im,100,100,100,150,0,60,$red,IMG_ARC_PIE);
//拷貝圖片到畫(huà)布
//1.加載圖片
//$srcImage=imagecreatefromjpeg("1.jpg");
//拷貝圖片到目標(biāo)畫(huà)布
//imagecopy($im,$srcImage,0,0,0,0,206,71);
//圖片上面寫(xiě)字
$str="hello world,你好";
//imagestring($im,5,0,0,"hello ,world",$red);
imagettftext($im,10,0,50,$red,"STCAIYUN.TTF",$str);
?
?
//3.輸出圖像或者到網(wǎng)頁(yè)/另存為
header("content-type:image/png");
//echo 3;exit();
imagepng($im);
//4.銷(xiāo)毀圖片,釋放內(nèi)存 -->
//imagedestory($im);
?
?>
?
131講 ??畫(huà)一個(gè)3D橢圓
?
<?php
?
//分析思路,先畫(huà)扇形
//也可以封裝成一個(gè)函數(shù),傳位置參數(shù)和循環(huán)參數(shù)就行
//1.畫(huà)布
$im=imagecreatetruecolor(400,300);
//背景色
$white=imagecolorallocate($im,255,255,255);
imagefill($im,0,0,$white);
?
//2.創(chuàng)建顏色
$red=imagecolorallocate($im,255,0,0);
$darkred=imagecolorallocate($im,144,0,0);
$blue=imagecolorallocate($im,0,0,128);
$darkblue=imagecolorallocate($im,0,0,80);
$gary=imagecolorallocate($im,192,192,192);
$darkgary=imagecolorallocate($im,144,144,144);
//畫(huà)扇形圖形-----》》》》
/*imagefilledarc($im,100,50,100,50,0,45,$blue,IMG_ARC_PIE);
imagefilledarc($im,100,50,100,50,45,85,$gary,IMG_ARC_PIE);
imagefilledarc($im,100,50,100,50,85,360,$red,IMG_ARC_PIE); ?*/
//畫(huà)扇形圖形-----》》》》立體感就是多個(gè)疊加在一起的
for($i=60;$i>=50;$i--){
imagefilledarc($im,100,$i,100,50,0,45,$darkblue,IMG_ARC_PIE);
imagefilledarc($im,100,$i,100,50,45,85,$darkgary,IMG_ARC_PIE);
imagefilledarc($im,100,$i,100,50,85,360,$darkred,IMG_ARC_PIE);
}
//在上面加一個(gè)蓋
imagefilledarc($im,100,50,100,50,0,45,$blue,IMG_ARC_PIE);
imagefilledarc($im,100,50,100,50,45,85,$gary,IMG_ARC_PIE);
imagefilledarc($im,100,50,100,50,85,360,$red,IMG_ARC_PIE);
?
//3.顯示tux
header("content-type:image/png");
imagepng($im);
//4.銷(xiāo)毀圖片,釋放內(nèi)存 -->
imagedestory($im);
?>
?
132講 投票統(tǒng)計(jì)圖,,用數(shù)據(jù)庫(kù)實(shí)現(xiàn)動(dòng)態(tài)的
133講,圖片驗(yàn)證碼
?
<?php
//使用php繪圖技術(shù),畫(huà)出驗(yàn)證碼
$checkCode="";
for($i=0;$i<4;$i++){
//隨機(jī)產(chǎn)生一個(gè)1-15的數(shù),用dechex函數(shù)變成16進(jìn)制數(shù)
$checkCode.=dechex(rand(1,15));
}
//存入session,后面使用
session_start();
$_SESSION['checkcode']=$checkCode;
//1.創(chuàng)建畫(huà)布
$image1=imagecreatetruecolor(150,50);
$red=imagecolorallocate($image1,255,255,255);
//畫(huà)出干擾線, 位置可以變換+長(zhǎng)短可以變換,顏色可以變換
for($i=0;$i<20;$i++){
imageline($image1,rand(0,100),rand(0,30),rand(0,100),rand(0,30),imagecolorallocate($image1,rand(0,255),rand(0,255),rand(0,255)));
}
//imagestring函數(shù)加字+變換出現(xiàn)位置,+變換字體大小
imagestring($image1,rand(1,5),rand(0,80),rand(0,30),$checkCode,$red);
//顯示
header("content-type:image/png");
imagepng($image1);
//銷(xiāo)毀
imagedestory($image1);
?
?>
?
Login。Php ?調(diào)用,動(dòng)態(tài)并且變化
?
請(qǐng)輸入驗(yàn)證碼:<img src="checkcode.php" οnclick="this.src='checkcode.php?aa=+Math.random()'">
?
?
?
134講 ?XML技術(shù)基礎(chǔ)
?
?
147講 ?網(wǎng)上支付
區(qū)別: ??易寶支付,直接打給銀行, 支付寶不是直接打給銀行
?
1.易寶申請(qǐng)注冊(cè) 測(cè)試賬號(hào)和密鑰
賬號(hào):$p1_MerId=”10001126856”;
密鑰:$merchantKey=”69c1522AV6q613Ii4W6u8K6XuW8vM1N6bFgyv769220IuYe9u37N4y7rI4P1”;
1.剛開(kāi)始測(cè)試支付最好使用我們提供的測(cè)試商戶帳號(hào)及配套的密鑰:
merchantID=10000432521
keyValue=8UPp0KE8sq73zVP370vko7C39403rtK1YwX40Td6irH216036H27Eb12792t
?
2.易寶支付發(fā)文檔:
3.開(kāi)發(fā): 寫(xiě)界面
4.關(guān)鍵技術(shù):如何生成一個(gè)hmac簽名串!!!hmac算法!
?
?
155講 ?smarty 獲取變量
靜態(tài)變量 ??++ ?配置文件的動(dòng)態(tài)變量 ?+ ?post/get/server session 中的值
靜態(tài):
<?php
require_once "./libs/Smarty.class.php";
?
//創(chuàng)建一個(gè)smarty對(duì)象
$smarty=new Smarty;
$smarty->left_delimiter="<{";
$smarty->right_delimiter="}>";
//取字符串
$smarty->assign("aa","hello");
//取整數(shù)
$smarty->assign("bb",567);
//小數(shù)
$smarty->assign("cc",567.77);
//存放一維數(shù)組,一般是從數(shù)據(jù)庫(kù)提取
//1,索引數(shù)組
$arr1=array('北京','上海','天津');
//2,關(guān)聯(lián)數(shù)組
$arr2=array('city1'=>'北京','city2'=>'上海','city3'=>'天津');
//3.索引的二維數(shù)組,一般是從數(shù)據(jù)庫(kù)提起,這里是模擬
$arr3=array(array('北京','上海','天津'),array('小倩','采臣','老妖'));
?
//4,二維數(shù)組的關(guān)聯(lián)數(shù)組
$arr4=array(array('id'=>'a001','email'=>'xiaoming@suhu.com','age'=>60),array('id'=>'a002','email'=>'xiaoming2@suhu.com','age'=>66));
?
$arr5=array('emp1'=>array('id'=>'a001','email'=>'xiaoming@suhu.com','age'=>60),'emp2'=>array('id'=>'a002','email'=>'xiaoming2@suhu.com','age'=>66));
class Master{
var $name;
var $address;
}
$master->name="順平";
$master->address="盤(pán)絲洞";
?
//對(duì)象的分配
class Dog{
var $name;
var $age;
var $color;
var $arr;//一維數(shù)組
var $arr2;//二維數(shù)組
var $master;//類(lèi)
function __construct($name,$age,$color,$arr,$arr4){
$this->name=$name;
$this->age=$age;
$this->color=$color;
$this->arr=$arr;
$this->arr2=$arr4;
}
}
?
//實(shí)例化一個(gè)對(duì)象
$dog1 =new Dog("小明",5,"紅色",$arr1,$arr4);
$dog1->master=$master;
?
?
$smarty->assign("arr1",$arr1);
$smarty->assign("arr2",$arr2);
$smarty->assign("arr3",$arr3);
$smarty->assign("arr4",$arr4);
$smarty->assign("arr5",$arr5);
$smarty->assign("dog1",$dog1);
?
//顯示
$smarty->display("test.tpl");
?
?>
?
動(dòng)態(tài):配置文件中獲取
title='我的第一個(gè)網(wǎng)站'
bgcolor='green'
?
?
獲取方法
<{config_load file='../config/my.conf'}>
<h1><{#title#}></h1>
<h1>數(shù)據(jù)顯示</h1>
<body bgcolor='<{#bgcolor#}>'>
<hr/>
<br/>*****字符串******</br>
<{$aa}>
<hr/>
<br/>*****整數(shù)數(shù)字******</br>
<{$bb}>
<hr/>
<br/>*****小數(shù)字******</br>
<{$cc}>
<hr/>
<br/>*****索引數(shù)組******</br>
<{$arr1[0]}>||<{$arr1[1]}>||<{$arr1[2]}>||<{$arr1[3]}>
<hr/>
<br/>*****關(guān)聯(lián)數(shù)組******</br>
<{$arr2.city1}>||<{$arr2.city2}>||<{$arr2.city3}>
<hr/>
<br/>*****二維數(shù)組的索引數(shù)組******</br>
<{* ??做注釋 ?$arr3[0][0] 表示取出arr3二維數(shù)組的第一個(gè)數(shù)組元素中的第一個(gè)元素 ???*}>
<{$arr3[0][0]}>||<{$arr3[0][1]}>||<{$arr3[0][2]}>||<{$arr3[1][0]}>
?
<hr/>
<br/>*****二維數(shù)組的關(guān)聯(lián)數(shù)組方式取法******</br>
<{$arr4[0].email}>||<{$arr4[0].age}>
<{$arr5.emp2.email}>
?
<hr/>
<br/>*****取出對(duì)象的值的取法******</br>
<{$dog1->age}>||<{$dog1->color}>||<{$dog1->name}>
?
<hr/>
<br/>*****取出對(duì)象的數(shù)組的取法******</br>
取出對(duì)象的普通屬性:<{$dog1->name}><br/>
取出對(duì)象的數(shù)組屬性:<{$dog1->arr[0]}><br/>
取出對(duì)象的二維數(shù)組屬性:<{$dog1->arr2[0].email}><br/>
<br/>*****取出對(duì)象的對(duì)象屬性******</br>
<{$dog1->master->name}>
?
</body>
?
?
去post /get /server /session 在的值
直接取就是,但是有模板
<{$smarty.get.username}>
<{$smarty.post.XXXXX}>
<{$smarty.server.SERVER_NAME}>
?
?
157 講 ??smarty ??內(nèi)建函數(shù) ???自定義函數(shù) ?+ ?塊注冊(cè)方式函數(shù)
?
兩個(gè):Foreach ??if else
自定義
function test1($args){
$str="";
?
for($i=0;$i<$args['times'];$i++){
$str.="<br/><font ?size='".$args['size']."' color='".$args['color']."'>".$args['con']."</font>";
}
return $str;
}
?
//還得注冊(cè)一下函數(shù)!!1
$smarty->register_function("hsp","test1");
塊注冊(cè)函數(shù)
?
?
158 講 ?自定義函數(shù)之 插件 ?
插件其實(shí)就是一個(gè)函數(shù),寫(xiě)在一個(gè)系統(tǒng)目錄下面的,調(diào)用這個(gè)函數(shù)
smarty\libs\plugins ??下面寫(xiě)插件
文件名命名格式有要求 ?+++ ?函數(shù)定義格式有要求
Functuin.hsp.php ???+ function smarty_function_hsp($args,&$smart){
?
?
}
?
自定義插件函數(shù)
文件名: function.自定義函數(shù).php ?然后在模板里面調(diào)用就行了
函數(shù)名字:function ?smarty_function_自定義($參數(shù),&$smarty)
<?php
function ?smarty_function_hsp($args,&$smart){
$str="";
?
for($i=0;$i<$args['times'];$i++){
$str.="<br/><font ?size='".$args['size']."' color='".$args['color']."'>".$args['con']."</font>";
}
return $str;
}
?
?
?>
?
?
?
自定義一個(gè)塊插件函數(shù) ?也有固定的格式
?
文件名: block.自定義塊函數(shù).php ?然后在模板里面調(diào)用就行了
函數(shù)名字:function ?smarty_block_自定義塊函數(shù)名($參數(shù),$參數(shù)2&$smarty)
<?Php
?
<?php
function smarty_block_test2($args,$con,&$smarty){
$str="";
for($i=0;$i<$args['times'];$i++){
$str.="<br/><font ?size='".$args['size']."' color='".$args['color']."'>".$con."</font>";
}
return $str;
}
?>
?
159 講 ?smarty ?+ ?mvc ?綜合應(yīng)用 ?: 內(nèi)部留言本
不能配置虛擬主機(jī),安裝視頻步驟來(lái),開(kāi)啟apache虛擬主機(jī) ,導(dǎo)致apache 不能重啟!
要么是代碼問(wèn)題,要么的配置問(wèn)題
?
http://www.cnblogs.com/catprayer/archive/2010/10/30/1865308.html??
?
?
?
163講 ??smarty 語(yǔ)法細(xì)節(jié)
?
1.?基本運(yùn)算
2.?變量調(diào)節(jié)器(相當(dāng)于函數(shù))運(yùn)用 ??,可以自定義變量調(diào)節(jié)器,以插件形式給出,在pugins 目錄下面,
文件名: modifier.xxxx.php
函數(shù)名: function smarty_modifier_XXX()
?
?
?
?
53講 ??獲取文本框中的值
如何用JavaScript得到網(wǎng)頁(yè)input中輸入的value值
在頁(yè)面中我們最常見(jiàn)的頁(yè)面元素就是input了,但是我們?nèi)绾斡?/span>JavaScript得到網(wǎng)頁(yè)input中輸入的
?
value值呢,其實(shí)很簡(jiǎn)單,方法也不止一種,據(jù)我總結(jié)比較常用的就是下面的兩種方法,閑話不多說(shuō)了,
?
下面那就來(lái)看看我說(shuō)的方法吧:
方法一、
Java代碼 復(fù)制代碼 收藏代碼
<html> ??
?<head> ??
?<script language="javascript"> ??
??function print(){ ??
???var a=myform.name.value; ??
???alert(a); ??
??} ??
?</script> ??
?</head> ??
?<body> ??
??<form name="myform"> ??
???<input type="text" name="name" id="nn" /> ??
???<input type="button" name="button" value="獲取" οnclick="print()" /> ??
??</form> ????
?</body> ??
</html> ?
這是獲取網(wǎng)頁(yè)input值的方法之一,給from一個(gè)名字然后在JavaScript的地方就可以用form的名字來(lái)調(diào)
?
用form表單里input元素的value屬性可以得到值,并把值賦給a,最后用JavaScript的alert()打印方法
?
打印出來(lái)。
?
方法二、
Java代碼 復(fù)制代碼 收藏代碼
<html> ??
?<head> ??
?<script language="javascript"> ??
??function print(){ ??
???var a=document.getElementByIdx_x("nn").value; ??
???alert(a); ??
??} ??
?</script> ??
?</head> ??
?<body> ??
??<form> ??
???<input type="text" name="name" id="nn" /> ??
???<input type="button" name="button" value="獲取" οnclick="print()" /> ??
??</form> ????
?</body> ??
</html>
?
方法三
<html>
<head>
<title></title>
<script type="text/javascript">
function js(){
var x=document.getElementById("11").value;
window.alert (x);
}
</script>
</head>
<body>
?<textarea ?id="11"rows="10" cols="20"> ??????</textarea> ?<br>
?????<input id="mytest" name="mytest" type="button" onClick="js()" value="測(cè)試"/> ?
</body>
</html>
?
?
54講 正則表達(dá)式
匹配四個(gè)連續(xù)的數(shù)字
<html>
<head>
<title></title>
<script?type="text/javascript">
function?js(){
var?con=document.getElementById("11").value;
//window.alert (x);
//var myReg=/(\d){4}/gi; ?//這是一個(gè)正則表達(dá)式
var?myReg=new?RegExp("(\\d){4}","gi"); ?//這是一個(gè)正則表達(dá)式
while(res=myReg.exec(con)){
window.alert("找到"+res[0]);
}
}
</script>
</head>
<body>
?<textarea??id="11"rows="10"?cols="20">???????</textarea>??<br>
?????<input?id="mytest"?name="mytest"?type="button"?onClick="js()"?value="測(cè)試"/>??
</body>
</html>
?
正則表達(dá)式RegExp對(duì)象的方法:
1.exec()方法 ,一直找那個(gè)串,一直找
2.test()方法,找到返回true,沒(méi)有找到返回false
function js(){
var con=document.getElementById("11").value;
var myreg=/abc/gi;
if(myreg.test(con)){
window.alert("有abc");
}else{
window.alert("沒(méi)有有abc");
}
}
?
正則表達(dá)式的String對(duì)象的方法
Match方法
function test2(){
var con=document.getElementById("11").value;
var myreg=/abc/gi;
?
res=con.match(myreg);
for(var i=0;i<res.length;i++){
window.alert(i+"-"+res[0]);
}
}
Replace方法
function test3(){
var con=document.getElementById("11").value;
//把四個(gè)數(shù)換成一句話:這里有四個(gè)數(shù)
var myreg=/(\d){4}/gi;
var newCon=con.replace(myreg,"這里有四個(gè)數(shù)");
document.getElementById("11").value=newCon;
}
Var myreg=/(\d)(\d)\2\1/gi;
子表達(dá)式,捕獲,反向應(yīng)用
function test5(){
var con=document.getElementById("11").value;
//var myreg=/(\d)(\d)\2\1/gi; ?///1221 ?2332 ??匹配這樣d
//var myreg=/(\d)\1(\d)\2(\d)\3(\d)\4/gi; ??///匹配aabbcc
var myreg=/(\d)(\d)\2\2\1/gi; //匹配addda;
//匹配 12348-333999111 這樣的編號(hào)
var myreg=/(\d){5}-(\d)\2\2(\d)\3\3(\d)\4\4/gi;
while(res=myreg.exec(con)){
window.alert(res[0]);
}
}
?
//限定符
function test6(){
var con=document.getElementById("11").value;
//var myreg=/a+/gi; //匹配addda;
//var myreg=/a1?/gi;
//var myreg=/[a-z]{2}/gi;
var myreg=/[^a-z]/gi;
while(res=myreg.exec(con)){
window.alert(res[0]);
}
}
\d ?=[0-9] 0-9
\D ?=[^0-9]
\w =[a-zA-Z0-9_]
\W ?=[^a-zA-Z0-9_]
\s ?=空白字符
\S ?=非空白字符
. ??\n之外所有字符
?
?
郵箱驗(yàn)證:
//郵箱驗(yàn)證
function test7(){
var con=document.getElementById("11").value;
var myreg=/[a-zA-Z0-9_-]+@([a-zA-Z0-9]+\.)+(com|cn|net|org)$/gi;
while(res=myreg.exec(con)){
window.alert(res[0]);
}
}
給出答案:
//郵箱驗(yàn)證
function test7(){
var con=document.getElementById("11").value;
var myreg=/^[a-zA-Z0-9_-]+@([a-zA-Z0-9]+\.)+(com|cn|net|org)$/gi;
必須用戶名打頭,com|cn|org結(jié)尾,中間只有一個(gè)@符號(hào)
if(myreg.test(con)){
window.alert("是電子郵件");
}else{
window.alert("不是電子郵件");
}
}
?
//驗(yàn)證一個(gè)域名
function test8(){
var con=document.getElementById("11").value;
myreg=/^(http)\:\/\/([a-zA-Z0-9]+\.)+(com|cn|net|org)$/gi;
//var myreg=//gi;
if(myreg.test(con)){
window.alert("是合法網(wǎng)站");
}else{
window.alert("不是合法網(wǎng)站");
}
}
//驗(yàn)證網(wǎng)址
function test8(){
var con=document.getElementById("11").value;
var myreg=/(http\:\/\/)?([\w.]+)(\/[\w- \.\/\?%&=]*)?/gi; //驗(yàn)證網(wǎng)址
if(myreg.test(con)){
window.alert("是合法網(wǎng)站");
}else{
window.alert("不是合法網(wǎng)站");
}
}
?
?
?
2017.04.19日
1.phpMAdmin 怎么使用與打開(kāi)
答:把phpMyAdmin 安裝在apache的目錄下面。然后點(diǎn)擊打開(kāi),輸入用戶名:root, 密碼:123456789就行。
?
2.
總結(jié)
- 上一篇: win10怎么查看bios设置密码 Wi
- 下一篇: 做姜母鸭用的鱼眼是什么?