<?php
#單行註解
//也是註解
/*變數宣告跟方法和類別名稱有區分大小寫
變數可用_開頭但不能用數字和中文
*/
$a與$A不同
$id =2;
$uu = 2+3*9;
$gg = "hi";
$tt = true;
只要在方法內的變數就是區域變數
在方法之外的都是全域變數
static $msg; //此為靜態變數且不會消失
global $msg = "hh";
$GLOBALS['msg'] = "hh";// 這2種方法皆能將區域變數轉為全域變數
echo $msg.$GLOBALS['msg'];
$_SESSION
$_FILES
$_REQUEST
//常數
define (PI,3.14,True)//True是否區分大小寫
echo "HI"//輸出內容
$n1 = 10
$n2 = 010 //8進位
$n3 = 0x10 //16進位
/*字串表示建議用""否則使用''可能需要用到跳脫字元\'
來表示'和\符號
而且''會將變數視為字串
而""會視為變數
定界符號法
$string = <<<msg-<自訂名稱
此內容可存放任何符號
msg;
echo $string;
自訂名稱頭和結尾的該行不能有任何字元且包括空白字元
*/
echo $a.$b //連結不是用+和&而是用.
可用$a+=1和
$i++
$i--
比較運算子
$a == $b //2者相等成立
=== //2者相等且型別相同成立 使法用於數值跟字串比較時會回傳False
!== //不等於
!=== //同上且型別不同成立
<=<和>=>
條件運算子
簡短結構法
$a =2;
$b = ($a>0)?"正數":"負數";
邏輯運算子有and && 和 or ||和xor和!$a表示相反
&& ||優先於and or
$error = @hhh //@可以隱藏錯誤訊息
指令運算子
$myip = `ping google.tw`
echo nl2br($myip);//nl2br()回將結果分行輸出
須注意php.ini的safe_mode = on才能執行
表單資料傳送
<form method="POST" action="form1.php">
請輸入姓名:<input type="text" name="username">
<input type="submit" value="送出資料">
</form>
method="POST" 和 "GET" //GET為預設且只支援ASCII
GET是使用參數傳遞
POST是使用HTTP標頭的封包傳遞
使用GET就必須用$_GET["欄位名稱"]去接值
使用POST就必須用$_POST["欄位名稱"]去接值
接收複數值的用法
<select name="item[]" //這邊加入[]表示用陣列>
</select>
接收頁就用
foreach($_GET["item"] as $value){
echo $value."<br />"
}
模組式開發
定義add.php
fubction add($a,$b){
$result = $a+$b;
return $result;
}
接著在別頁
include "add.php";
echo add(5,3);
require "add.php";
echo add(5,3);
include 會回傳值且會發生錯誤會繼續執行//適合在迴圈中使用
require 不會回傳值且發生錯誤會中斷//頻率高建議用
另外建議用include_once與require_once可避免重複載入問題
引入檔的名稱雖可用其他副檔名但還是建議用php
引入檔案的路徑問題則是以引入該檔案的頁面路徑為主
不必在意引入檔的位置
流程控制
if () echo"hi";
if (){ }else{ }
if () { }elseif(){ }else{ }
switch ($a = "dog"){
case "dog":
echo "YES";
break; //中斷並跳出
case "cat":
echo "NO";
continue; //略過並繼續
default:
echo "完成!";
}
迴圈
while($a<10){$a++;echo $a."nbsp;";}//可輸出1到10
先執行一次
do{
}while()
for($i=1;$i<10;$i++){
}
函式也叫做方法
function name($rr = 0,$tt = 0){//另外方法內的參數需要有預設值
echo "hi".$rr;
return $tt;
}
aa();
或aa($b,$gg);
或先$tt = 99;
aa($tt);
傳址呼叫需在變數前加上&
譬如aa(&$tt);
則$tt的值會跟著改變
方法的多載
function showdata(){
$i=func_num_args(); //取得參數個數
if($i==0){ echo "no data";
}else{
echo "有這些資料";
$data = func_get_args(); //將參數陣列化
foreach ($data as $value){echo $value;}
}
}else{ echo "最後一筆為:".func_get_arg($i-1);} //取得最後一個參數
}
可變動函式-利用變數來呼叫方法
function text(){echo "hi";}
$YY = "text";//字串名稱必須跟方法名稱相同
$YY();//呼叫text();
要檢查方法是否存在用function_exists($YY)
遞迴觀念
function show($num){
if($num == 0){
return 1;
}else{
return $num * show($num-1);
}
}
show(5);
遇到return 5 * show(5-1)時先計算show(5-1)也就是show($num-1)的方法
會計算的地方如下
當show(5-1)會跑到show(4-1)在跑到show(3-1)和show(2-1)跟show(1-1)
注意此時show(1-1)已經為0
於是回到
show(2-1)
他的return 2 * 1 //<--變成2 * 1
然後跑回show(3-1)
return 3 * 2 //<--變成6
再跑回show(4-1)
return 4 * 6 //<--變成24
再跑回原本的show(5-1)
return 5 * 24 //=120
懂了嗎??麻煩的遞迴= ="
rand(0,5);//隨機亂數從0~5
其他方法請參考php官方網站
使用mail()方法寄信
首先請設定php.ini
找到[mail function]
;for win32 only.
smtp = localhost //設定位址
smtp_port = 25 //port號
範例
mail("x@x.xx.com.tw","標題","內容");
其他上網查...
頁面重新導向
header("Location: http://google.tw");//轉向指定網站
頁面重整
header("Refresh: 5");//表示5秒重整一次
設定編碼方式
header("Content-type: text/html; charset=utf-8");
錯誤訊息
die("錯誤");
exit("錯誤");//失敗時出現錯誤訊息...=try catch
延遲方式
sleep(10);//延遲10秒
isset($a);//測試變數是否存在
unset($a);//刪除定義的變數
php的陣列不需要事先宣告且能容許不同的資料型別
所以可以直接這要使用
$a[] = 1; //等於$a[0] = 1;
$a[] = 2; //等於$a[1] = 2;
若是
$b[5] = 1;
$b[] = 2; //等於$b[6] = 2;
$b[] = 3; //等於$b[7] = 3;
也可以不照順序指定索引
$c[] = 1; //等於$c[0] = 1;
$c[] = 2; //等於$c[1] = 2;
$c[5] = 3;
$c[7] = 4;
強大的字串陣列
$d['name'] = "jack";
$d['age'] = 17;
echo "姓名是.{$d['name']}";//字串中必須加上大括號且不可有空白
否則請拆開來用"姓名是".$d['name']
短碼陣列法
$my = array(1,2,3);//等於宣告$my[0]=1 & $my[1]=2 & $my[2]=3
$my2 = array(2=>1,2,5=>3,7=>4);//等於宣告如下
$my[2]=1;
$my[3]=2;
$my[5]=3;
$my[7]=4;
字串陣列短碼
$std = array("name"=>"jack","age"=>17);等於如下
$std['name'] = "jack";
$std['age'] = 17;
二維陣列
$std = array(0=>array(0=>1,1=>2),'name'=>array(0=>'jack','age'=>17));
一維陣列崁入法
$std1=array(78,88,99);
$std2=array(44,55,66);
$s=array($std1,$std2);//變成2維陣列了
依序取用陣列
foreach (陣列名稱 as $value){內容}
取用陣列個數
$num=count(陣列名稱);
叫出索引值法
foreach(陣列名稱 as $index => $value){}
顯示陣列
print_r()//只能1個
var_dump()//可多個
is_array()//判斷是否是陣列
array_count_values()//判斷元素的重複次數
array_sum()//加總陣列
htmlspecialchars($ff);//輸出成HTML
取得日期
getdate()
date("Y-m-d H:i:s")
gmdate()//依據格林威治
檔案處理
$_SERVER["PHP_SELF"]//取得目前網頁的相對路徑
$_SERVER["SCRIPT_FILENAME"]//取得目前網頁的絕對路徑
realpath(相對路徑)//取得絕對路徑
dirname()//取得檔案路徑不包括檔名
basename(__FILE__)//目前檔名-__FILE__是預設常數表示目前執行文件的檔名
basename(__FILE__ ,php)可去除副檔名
路徑資訊
pathinfo(路徑,PATHINFO_DIRNAME)//路徑
pathinfo(路徑,PATHINFO_BASENAME)//檔名+副檔名
pathinfo(路徑,PATHINFO_EXTENSION)//副檔名
pathinfo(路徑,PATHINFO_FILENAME)//檔名
檔案上傳法
修改php.ini
file_upload = On
upload_tmp_dir = 暫存路徑
upload_max_filesize = 8M
<form action="要處裡的php" method="post" enctype="multipart/form-data">
<input type="file" name="fileupload">
<input type="submit" value="送出資料">
</form>
if($_FILE["欄位名稱fileupload"]["error"]==0){
if(move_uploaded_file($_FILES["fileupload"]["tmp_name"],"./".$FILES["fileupload"]["name"])){
echo 'succes'
echo $_FILES["fileupload"]["name"]
}
}
多檔案上傳法
<input type="file" name="up[]">
$i=count($_FILES["up"]["name"]);
for($j=0;$j<$i;$j++){
if($_FILEs["up"]["error"][$j]==0){
if(move_uploaded_file($_FILES["up"]["tmp_name"][$j],"./".$_FILES["up"]["name"][$j]."good"))
}else{
echo 'error!'
}
}
設定cookie
setcookie("名稱",'內容',time()+3600)//只有1小時或用
setcookie('gg','yy',strtotime("2008-12-13-23-59-10"))
$_COOKIE["名稱"]
也可用陣列
setcookie("ggg[0]",1)
setcookie("ggg[1]",'jack')
$_COOKIE["ggg"][0]
設定session
只要任何一頁有用到都必須先session_start();
$_session["name"] = "jack";
陣列版
$_session["gg"][0] = 1
$_session["gg"][1] = 2
unset($_session[名稱])//刪除此session
session_unset()//刪除所有session
php.ini改session有效時間預設24分鐘
session.gc_maxlifetime = 1440 24個1分鐘 * 60秒
物件化
class aaa{
var $a = 0;
var $b;
function b(){
}
function __construct(){//建構方法 任何初始化都會先執行的方法}
}
$abc =new aaa;
$abc->b = 9;
$abc->b();
物件參數化
class rrr{
var $a;
var $b;
function set($id,$name){
$this->a = $id;
$this->b = $name;}
function __construct($aa){//建構方法帶參數
echo $aa."你好!";
}
function __destruct(){//解構方法會在結束後執行不可帶參數
echo 'end';
}
}
$std = new rrr;
$std->set("gg","bb");
$std1 = new rrr('jack');//帶參數叫用
$std1 = null;//要刪除才會執行解構方法
類別靜態成員和方法
class ttt{
static public $id = 10;
static function show(){
}
static function show($id){
echo $id."hi";
}
}
用法:
ttt::$id;
ttt::show();
ttt::show("jack");
類別常數
const pi=3.14; //要注意不加$
用法:
同類別
self::pi
不同類別
ttt::pi
繼承:
class child extends father{}
如此一來
child類別可以用$this->加上父類別具有public和protected的屬性和方法去使用
複寫會以子類別為主
所以同名稱的方法經由子類別重新定義後會以子類別為主
然而父類別的方法和成員依然存在
此時要用到父類別的成員或方法可以用
parent::$id;
parent::show();
MYSQL資料庫基礎
資料庫編碼請以utf8_unicode_ci為準
型別以int跟double為主
文字以varchar為主
時間以datetime為主
NOW()日期函數
count(*)計次
group by 非統計欄位都必須加入才行
having //如果在group by之後需要條件式就不能用where要用having
多資料表查詢
不用join法的前提是2個資料表必須要有共同的欄位內容做關聯
select *
from tableA,TableB
where TableA.相關欄位 = TableB.相關欄位
使用join
select *
from a inner join b
on a.colume = b.colume
或是
select *
from a inner join b
using [colume]
限制查詢筆數
select *
from table
order by id
limit 0,5 //開始顯示的筆數是0可以省略,要顯示的筆數
PHP連線MYSQL
mysql_connect(mysql位址,帳號,密碼)EX:
mysql_connect("localhost","root","1234")
$db = mysql_connect("192.168.0.55","root","1234")
if(!$db){失敗}else{成功}
程式碼執行完便會自動mysql_close()
mysql_pconnect("192.168.0.55","root","1234")
會一直連線且不能用mysql_close()
好處是會檢查連線是否存在而不會重複開啟連線
加入@可以避免錯誤訊息顯示
die()可以終止後面的程式繼續執行
字元編碼統一宣告必須在資料庫連線後
mysql_query("SET NAMES utf8");
設計引入檔
<?php
$db = @mysql_connect("192.168.5.5","root","1234");
if(!$db) die("連線失敗");
mysql_query("SET NAMES utf8");
@mysql_select_db("資料庫名稱")
?>
接著傳入SQL語句
$result = mysql_query("select * from `tableA`");
$result = mysql_db_query(資料庫名稱,"select * from `tableA`");//不同資料庫時用
取得資料-整數為索引
while($row_result=mysql_fetch_row($result)){
foreach($row_result as $item=>$value){
each $item.$value
}
}
欄位為索引
mysql_fetch_assoc($result);
$row_result["name"]
陣列法
mysql_fetch_array($result);
$row_result[0][1]
$row_result["name"][1]
mysql_num_rows($result);//查資料筆數
指標紀錄
mysql_data_seek($result,4);
$row_result=mysql_fetch_array($result);
只會顯示第5筆資料
分頁程式
$page = 3;//每頁比數
$dpage = 1; //預設頁數
if(isset($_GET['page'])){
$dpage = $_GET['page'];
}
//紀錄比數
$spage = ($dpage - 1) * $page;
$sql_query = "select * from db";
$sql_query_limit = $sql_query."LIMIT ".$spage.$page;
$result = mysql_query($sql_query_limit);
$allresult = mysql_query($sql_query);
$total=mysql_num_rows($allresult);
$totalpage=ceil($total/$page);
<table border="1" align="center">
<tr>
<th>欄位名稱</th>
</tr>
<?php
while($row_result=mysql_fetch_assoc($result)){
echo "<tr>";
echo "<td>".$row_result["欄位名稱"]."</td>";
echo "<td><a href='update.php?id=".$row_result["欄位名稱"].">修改</a></td></tr>";
}
?>
<?php
if(dpage>1){
<td><a href="data.php?page=1">第一頁</a></td>
<td><a href="data.php?page=<? echo $dpage-1; ?>">上一頁</a></td>
if($dpage<$totalpage){
<td><a href="data.php?page=<? echo $dpage+1; ?>">下一頁</a></td>
<td><a href="data.php?page=<? echo $totalpage; ?>">最後一頁</a></td>
}
?>
頁數
<?
<td>
for($i=1;$i<=$totalpages;$i++){
if($i==$dpage){
echo $i." ";
}else{
echo "<a href=\"data.php?page=$i\">$i</a>";
}
}
</td>
?>
</table>
?>
沒有留言:
張貼留言