很久很久沒有發表新的文章了,主要是懶得在這裏寫,都記在記事本上,所得都是本身理解的狀況下寫的,現在藉此閒暇記錄下來,;;;;javascript
****************PHP************************************************************************************************
********************包含了php的基礎知識點的自我理解*****還有自我mysql數據庫的強化**********************************
實際上從10月19號就開始了
……………………………………………………partOne…………………………
#######環境(2015.10.20)
*代碼寫於<?php ?> 中,就像js寫在<script></script>中同樣 echo打印在頁面上
*在php中字符串的連接用.號,用於其餘語言當中的+;php中變量$來規定,像js同樣輕量,只用$
即便在使用 變量的時候,也要帶着$;
*php集成開發環境 WAMPserve開發包,w:window a:apache m:mysql p:php www.wampserve.com
*php的代碼其實是和服務分開的,集成環境的默認的服務器是在安裝目錄的www文件下,可是能夠改,
在apache的目錄內找到httpd.conf文件能夠改服務器路徑。找到DocumentRoot的路徑改變成一個文件夾下,
同時,找到directory,路徑也是改在同一個文件夾下,而後就能夠localhost:what.php(無需輸入那個路徑了,那個路徑就是主目錄了)。
*要改變php的wamp的主目錄的快捷路徑,在wamp安裝目錄下找到wampmanager.ini和wampmanager.tpl在其中找到Menu.Left項下修改相關名字和
路徑便可,默認是www
*注意,文件路徑格式必須寫規範:E:/modle/fuck/
***************這下面的多站點管理功能失敗了,爲了避免影響進度,之後用到又弄,*****
*可以用wamp進行多站點的管理,能在上面運行多個網站:::步驟以下:些許複雜,慢慢稱述如此:
(格式如此:<VirtualHost *:80>
ServerAdmin 3223572855@qq.com
DocumentRoot "E:/sherlock/Sherlock"
ServerName sherlock.com
ErrorLog "logs/dummy-host2.example.com-error.log"
CustomLog "logs/dummy-host2.example.com-access.log" common
</VirtualHost>)
step1:如今apache的conf文件中找到httpd-vhosts.conf文件,進行主機相關配置(複製下來填寫)
step2:打開apache主要配置httpd.conf,容許將conf/extra/httpd.conf的註釋(#)去掉,就可使上個文件生效
step3;找到allow override all 下面,寫地址訪問權限是 allow from all/127.0.0.1之類
step4:在相應已經規定好的項目目錄下建立相應名字的站點。
step5:在C:中的windows中system32的driver下的ETC下,打開host文件,添加域名給對應的 ip如:
127.0.0.1 Sherlock.com 遇到Sherlock.com時候優先到127.0.0.1下請求資源
老子成功啦!!!
***************因此下面也變成了不肯定的東西*****************!
*出現You don't have permission to access的解決,打開httpd.php,將
<Directory />
AllowOverride none
Require all denied
</Directory>,
將Require all denied改爲Allow from all便可,還有 onlineoffline tag - don't remove
Allow from all處也要相應改變
/*******************************/
*apache的默認端口號碼是80;若是要修改,則打開httpd.conf文件,找到listen 80 將80修改如:8080;而後再找到
servername 80 將此處之80再寫成8080 保存能夠。(新版本的80不少,所有都改爲8080 親測)
#######語法(2015.10.21)
*var_dump($變量)能夠將變量的類型打印出來。$var,用時候不可var單獨搞,$var都是變量
*變量的命名和java同樣,在$後,不以數字開頭,不可空格,特殊符號,區分大小寫;
*可經過方法獲得變量使用的內存:$var = memory_get_usage();echo $var;可獲得$var所佔有內存;
*false和true,echo輸出時候,true爲1,false爲何都不輸出;
*對於int型,十進制正常如:$ten = 12;$eight=0123(前面加0);$sixteen = 0x23(前面加0x);
*科學計數法:1.23e3 =1.23*10^3
*引號的用法:單中有雙,雙中有單。。或者$modle='she said:\'i am a hore\''(單雙同理);實際上也就是:在父親引號的裏邊,要用引號,就在以前加個\
*還有一種字符串的命名方法GOd命名法:$string = <<<GOD
夜空中最亮的星星,如今我在敲這裏的時候,隔壁租房鄰居姑娘在洗衣服,唱着夜空中最亮的星
GOD;以<<<GOD ....和GOD(此個的縮進和變量一致)結束;
*一種特殊的類型:資源,不須要時候應該釋放,如:打開文件:$file_open = fopen('psth','r');鏈接數據庫:#con = mysql_connect('localhost','root','root');
打開圖像$img=imagecreate(100,100)
*php 的null的狀況:1,被寫成null,2,沒有賦值,3,用了方法unset():如unset($hello);
*php 常量的設定:define('modle','the hero',false[默認是false,此常量不能大小寫通吃])
*php中的一些系統常量:__FILE__;(兩條下劃線。此文件路勁) 。__LINE__;(此語句在第幾行)。PHP_VERSION;(此php版本);PHP_OS;(所在操做系統)
*php中常量的引用方法,1,直接用,2,constant('常量'),人言更加靈活,我卻沒有體會到。
*判斷一個常量是否被定義的方法:defined('常量名')【是當字符串同樣放進去】;
*能夠將幾個變量都指向一個地址用&,這個地址裏面的值都是這幾個變量的值 如:$a='hello';$b=&$a; $c=&$b;echo的話都是hello;
*php中一些陌生的運算符:==等於 ===全等 !=不等 <>不等 !==不全等於。!=值同類型不一樣能夠 !==值同類型同才行
*三元運算符:$a = $b>60?'及格':'不及格';
*若是不肯定的錯誤會出現,那麼在表達式以前加個@,不會將錯誤報給用戶,忽略掉,不過在使用前要在代碼的前面加個 ini_set('track_errors', 1);纔看的處於不一樣。
*php中時間的設置:$now = date('Y-m-d h:i:s');echo $now;輸出2015-12-21 11:47:38; time()函數現實的是時間的格式
*php中取得隨機數:$luck = rand(1,9);取得1到9的;
*在數組當中:數組規定:$ha=array('key'=>'value');=>因此這個的意思就是key對應value;遍歷foreach($ha as $show){}或者foreach($ha as $key=>$show);
*zend.studio的使用各類outline(在Navigate的show in中)功能窗口是好得,各類方法都顯示了。problem中查看錯誤信息;
*php斷點功能;在debug時候,先大斷點而後在debug as,在一步一步執行時候,f5,單步試調,進入函數內部(在執行遇到函數時候使用);
f7跳出函數(在函數內部時候使用 );f6單步失調,不進入函數。能夠debug來查看各個變量在某個步驟是否work?就像js的alert();
*emmet是html的快捷輸入的插件,寡人複製一個網址:於help的install new soft來輸入這個連接來安裝:http://emmet.io/eclipse/updates/site.xml,以後從新啓動,以後檢測php
…………………………………………Part Two…2015.12.21………………………………………
*數組:(如下兩種數組的命名都是根據鍵位來命名的)
一、索引數組:數組的鍵是整數,並且順序是從零開始的。(並且php的數組命名有點怪:$ hello = array('','',''));
print_r($array);是輸出數組及其鍵的。索引數組的三種賦值方式(array('0'=>'apple')),這種方式就等於另一種(array('apple')鍵直接是0,1,2.。。);
($array[0]='apple');取數組的值也是同樣的,$arr[key];
二、關聯數組:數組的鍵是字符串的形式。關聯數組的賦值:$arr['apple'];或者:$arr = array('a'=>'apple','b'=>'banana');如:$arr['apple']='蘋果';
*函數:大部分思想和java js同樣
*可變函數:調用這個函數能夠經過他的名字來調用。如:function name(){};$replace='name';(這裏就將函數給了$replace),以後,$replace(),調用之。
*可變函數在類上的使用:class you{function name(){}},$modle='name';$u = new you();$u->$modle();(注意此處->和=>的不一樣)
*php的內置函數:有許多許多,如外部拓展的mysql函數,email函數等,此寫一個:str_replace(),書寫以下:
$str='I love zhongyaji';$str=str_replace('zhongyaji','zhaonan',$str);echo $str輸出i love zhaonan;
*一些內置的方法;function/file/class/method_exists('') 能夠判斷是否存在方法或者函數。。。。輸出Boolean
*定義的一個類,1類中的屬性。例子class car{$a='a';protected $b='b';private $c='c'}實例化:$ok = new $Car = new car();echo $Car->a;可訪問之public屬相的,
protected和private不能夠外部訪問,默認是public型,注意訪問的方式。$Car->a(注意:實例化後這裏沒喲$了);static屬性用::調用,$this指向本身
2,類中的方法,實際上在面向對象的過程當中,函數叫作方法。function的權限也是public private protected;方法的使用和屬性同樣,靜態的方法的使用,
也和屬性同樣,能夠直接使用,直接echo Car::show();
*(類和屬性不用加$來命名)
*多年的構造函數老是理清楚了:
php5當中有:
1,__construct()類的構造函數,在類的對象被構造時候執行的函數,如此:
function __construct(){your way},子類的構造函數不會調用父類的,若要使用,則使用parent::__construct()...
可是發現構造函數的定義方法還能夠和類名相同。在實例化時候給類的參數就是構造函數的參數
2,__destruct(),有構造就有購銷函數,當一個類的對象引用不在時候執行的。css
**在php中的類中的屬性要加訪問控制符,方法不必定須要。
*在php中的私有的變量和受保護的變量不可以直接被訪問,可是能夠在自身類的內部暴露給外向者(public),讓其執行其心願;
*繼承,就像汽車是一個泛的類,寶馬啊,奔馳啊,就是繼承這個類的。子類就有了父類的方法,並且本身能夠新寫方法,以實現代碼的複用。繼承父類來的子類當中,用關鍵字:parent::method();
來調用父類當中的方法;而後$var->是調用繼承當中的子類的方法。
*重載:在繼承當中,父類的方法子類不適用了, 子類能夠重寫父類的!同名!方法,重寫的方法的開發性(訪問控制)要大於等於父類,php當中構造函數能夠被繼承,
可是當子類被實例化時候,只有本身的構造函數會被調用。
*引用靜態的屬性時候,是car::$name,實例化以後是$c->name;不加$了,飲用方法時候同樣。
*聰厚之言:php框架:IC 及其www.github/suconghou.com 好老師啊
................more use ...2015.10.22.............................
*php的字符串的一個,echo strpos('hello fuck','fuck');能夠查看這個串種是否有fuck
*php的數組的排序方法:如:$me=('love','hate','tall');sort($me);//升序;rsort($me);//降序同理,asort/arsort(按值升降 ).ksort/krsort(按key升降)
*trim('word');去除兩邊的空格,rtrim('');去右邊空格,ltrim()去左邊空格
*獲取字符串長度1,中文 mb_strlen('string','utf-8');英文strlen('it');
*取得某個位置的數:如:英文:substr($string,startplace,how many);如$u='i love you';echo substr($u,2,4);獲得love
這描述的意思是:$u這個字符的第二個位置開始(從零開始算),向後數4個。中文也差很少 ,mb_substr($u,2,4,'utf-8');
*查找字符串裏面是否有某個數,在從零開始的那個位置,如:$str='show';echo strpos($str,'o');輸出2;
*字符串的替換,$s='huang is a sb';echo str_replace('a','big',$s);
*將數組轉化爲字符串,implode();$i=array('a','b','n');echo empolde('_',$i);其中,鏈接符是_
*將字符串華爲數組,explode();如:$i=a b c;echo expolde(' ',$i);其中‘ ‘是轉化符,遇到空格就拆開。
**********************more use 2015.10.23****************
*全局變量有點疑惑。???全局變量其實是個數組,存儲着變量的數組,數組,數組,數組,數組!:如$_GLOBAL['z'];$_COOKIE['it'];
*Cookie實際上也不難,讓老子一點一點剖析:
1,經過Http headers返回給客戶端,一般存儲會話session的ID來辨別用戶,其有時間限制,時間到本身刪除。
2,設置的格式:setcookie('cookieOne','modle',time()+1800,'path','www.modle.com');前三個參數必須,是cookie的key,cookie的value,和有效時間(
默認是0,即當網頁關閉時候就失效),以後是路徑,即(cookie)有效的路徑,如果'/',則整個網站有效,如果/path,則只在/path下和/path/son之類有效;
最後一個參數是有效的域名,如:modle.com,實際意思是在modle.cxom的子域名下有效,諸如:email.modle.com;在調用cookie時候,則:$_COOKIE['cookieOne'];由於是從請求頭中send過來的,因此
說,是能夠用header來設置的。header('Set-Cookie:cookie_name=""');這個設置方法實際講的不是詳細;
3.刪除cookie,能夠:用setcookie('delete','',time()-1);直接將有效時間設置爲負的值就能夠。亦能夠經過消息頭來搞定header();...不是很詳細講述的html
cookie傳送要佔用帶寬,容易被盜用,而後還只能存儲4k大小;Session會話是存在服務端,無大小限制,session id 默認狀況存儲於cookie中。java
*Session:啓用session時,用 session_start()開始,而後,就能夠用$_SESSION[],進行讀寫session_id();可查其id(規定了一個session後自動生成的);session在
服務器中的存在形式是文件,當一個頁面打開了session,而後會使得其餘併發訪問的用戶沒法訪問而等待,能夠用緩存或者數據庫來解決此。。。未完待續
session的銷魂:馬上銷燬用:unset($_SESSION['nani']);若要所有並且下次訪問時候才銷燬,用session_destroy();
有時候如在用戶退出的時候,存在cookie中的session用setcookie()來銷燬所存儲的id,
*關於個東西:數組能夠序列化(serialize)成字符串,轉化成相似於數組樣子的字符串,以後可用於加密,而後,也能夠反序列化回來(unserialize);回原來格式。
*字符串加密,方法 base64_encode($string) 是加密,base64_decode($string)是解密。
*文件操做:感受用的少,往後在彌補。
*時間和日期:
*unix時間戳,實際上就是名字虛浮,內容簡單,簡言之,就是1970年到如今的描述等於方法:time();因此能夠理解了time()+3600爲何是一小時後了。
*實際上,date()有有參數,如:echo ('Y-m-d h:i:s',time());收個字符串參數規定的是輸出時間的格式,第二個參數是時間戳的秒數,能夠來用我規定的
格式來輸出時間。
*用strtotime()能夠作到將輸入的一個時間格式換成多少多少秒。。。如:strtotime('2015-10-10'); 21341234123s,最特殊的是,它能夠接受字符的參數,
如:strtotime('+ 5 seconds')如今時間加上5s的時間戳;
*異常的處理: 紙上談兵得來的:try{}catch(){},就是說,throw 也是,也要對應至少一個catch;它的做用是:如果異常的部分不被處理,則就會使得程序被迫中止,
如果處理了,則會能夠等待用戶指令??
*public:沒有什麼限制。。pravate:僅僅在本身這個類中能夠用。。protected:能夠本身類和本身的子類中能夠用。
*self 和 $this 和 parent、及其::何時使用的區分:看了這麼多獲得
$this 是指向對象自己,能夠用它的屬性,除了靜態的屬性;
self是指向 類 自己,只能夠在類中使用,引用類的靜態屬性或者方法;
parent只在 類 中用,發生在繼承時候,引用父類的靜態方法方法。
$this是變量,而self啊 parent啊 是常量
**php和mysql
*mysql的php擴展其實是個函數,因此檢查擴展是否存在看用function_exists(mysql_connect);
*php的數據庫鏈接有不少拓展(也就是寫好的框架方法),方法大概相同
*首先,php都到了7版本,因此所學不是最新,可是瞭解也是必要的。先學完。以後再新之。
*補充:給mysql的root用戶設置初始密碼 :set password for root@localhost = password('happiness');
*在以前的版本當中,數據庫在操做前的php代碼:mysql_query('set names "utf8"');以後再mysql_query(各類語句);在這裏的query不是查詢,是執行的意思。
*雖說php會自動的關閉數據庫鏈接在執行完,可是要高性能,必須本身關 mysql_close($con);這裏的$con = mysql_connect('localhost','root','fsdfas');
********************************2015.10.24**************************************************
*文件操做函數: file_put_contents('文件名','寫入值');寫入文件——覆蓋原有數據寫入 file_get_contents();文件讀出函數
*$_SERVER['REMOTE_ADDR'];獲取到機器ip;
*全局變量啊 $_POST【'username'】獲取的是提交過來的name爲username的信息$_GET[]以此類推
*若要使得沒有亂碼,則須要html的部分用<meta charset='utf-8'> 而後php部分用 header("Content-Type: text/html; charset=utf-8");
*ltrim rtrim($what,'@')出去左邊或者右邊的空格或者是規定字符
*url傳參數若此:他們教的老幾把錯的,我本身拼接的如此:echo '<td><a href='.'"'.'delete.php?id='.$index.'"'.'>刪除</a>';
*實際上,主要的就是把文件當成一個數據庫,而後,取出數據來的時候進行整理,存入的時候也進行整理。
***********************2015.10.25*****算是作了個php的小項目了,明日繼續作幾個,而後開始框架***********
*mktime();使用如此:*mktime(0,0,0,12,23,2001);將這種形式轉換成時間戳;date()做用不少啊,如:date('Y-m-d',time());date('Y-m-d',mktime(0,0,0,12,30,2015))
如果date的參數換成('t') 或者('w')獲得的是本頁幾天或者本月第一天周幾
*判斷變量是否聲明或者是否被賦值了用isset(variable);如果沒有,則返回的是false,不然true;
*再作一個輸出日曆的時候,瞭解到了一個編程的思想:是什麼呢?就是:
1,將功能的形容詞去掉,好比 我要實現由什麼什麼什麼的一個數字輸入,那我就先輸出數字;
2,在這個基礎上一點一點的添加功能。一點一點的修飾以條件便可。
*頁面能夠本身提交給本身url參數的;
*在表單提交過程中:$_SERVER['PHP_SELF'],是指向腳本執行自己文件,就是指向這個本身了,表單提交裏面經常使用:
<form method ='post' action = '<?php echo htmlspecialchars("$_SERVER['PHP_SELF']")?>'><\form>裏面的指向自身頁面,而後htmlspecialchars爲了防止xxs
攻擊,來進行轉碼。
*你看看 都出現了三次了 $_SERVER['PHP_SELF']腳本自己文件名 $_SERVER['REQUIRE_METHOD']獲得提交的方式是什麼$_SERVER['REOMOTE_ADDR']獲得ip
*empty()顧名思義,判斷是否認義或者空,空則返回true;
*在以後的版本當中。mysql_connect()這個擴展要被丟棄,要換其餘的,叫作:mysqli擴展或者PDO擴展,往後要看看這個東西。node
*#*#*#*#*#*#*#*#*#**#*#*#*#*#**#*#*php new words*#*#*#*#*#*#*#*#*#*#*#*#**#*#
*看了php手冊以後,發現mysqli纔是極力推薦並且也是用的最多的。
*因此接下來都講mysqli
*爲了不操做數據庫時候出現亂碼,用$mysqli->query('SET NAMES utf8');
*mysql 在編程當中有種方法,叫作預處理,其中在須要執行多條參數的時候,不用重複寫sql語句,直接寫值就好了。還比較安全
*mysql數據庫要存儲中文,之前我是迷惑了半天了,最麼在命令行設置都不對,而後,最終發如今mysql的可視化工具sqlYOG建表時候直接能夠規定,那麼的簡單。
*php基礎的數據庫的操做:
##**FIRST:增:
$mysqli = new mysqli('localhost','root','password','databaseName');//是新建個mysqli對象給$mysqli,以後連接對象就用$mysqli
mysqli_query($mysqli,'SET NAMES utf8');//設置這個解決的是查詢時候出現亂碼的問題 是utf8 而不是utf-8
if(mysqli_connect_errno()){ echo '鏈接錯誤信息'.mysqli_connect_error;}//檢測鏈接成功,不成功輸出錯誤信息。
$statement = $mysql->prepare("insert into tablename values(?,?)");//預處理功能,問是等待着以後的量來代替,避免重複寫sql;
$statement = $mysql->bind_param('ss',$username,$password);//第一個參數ss是指上面兩個文浩分別的類型,後面兩個參數是指後面兩個問號的值。
$statement->execute();//執行預處理中語句
echo $statement->affected_rows;輸出插入了幾行
mysql_close($mysqli);//關閉數據庫mysql
##**SECOND:查:
$mysqli = new mysqli('localhost','root','password','databaseName');
mysqli_query($mysqli,'SET NAMES utf8');
if(mysqli_connect_errno){echo mysqli_connect_error}
$statement = $mysqli->prepare(select * from tableName);
$statement->execute();//還記得嗎?查詢和其餘都有所不一樣,限制性查詢。
$statement->bind_result($showONe,$showTwo);//將查詢出來的結果綁定到這兩個上
while($statement->fetch())//只要還有知足查詢條件的
{
一條一條的進行操做。。
}
mysql_close($mysqli);
*php總傳參數,在php標籤中,則進行字符串拼接便可,如果在html中,則:<a href="index.php?id=<?php echo $id ?>">返回</a>
*php的重定向 Header("Location:$url");這裏的url必定要寫詳細,他媽的從http:開始寫到com結尾jquery
*#*#*#**#*MVC*#*#*#*#**#*#
*mvc in php:能夠實現開發分離,易於維護,各層分離,結構清晰,都用它:在需求變化時候,更改相對的層就行,互不干涉。
*include 和require實際和node的require差很少,是講那些語句所有整過來,也想java 的import
include 的錯誤了會警告,require的引入會極度報錯,在mvc當中,極度依賴引入,因此用require好。require_once();之引入一次;git
*control控制器規範:入 testController.class.php test是控制器名字,Controller是代表只是控制器,class是類文件,php是拓展名,控制器就是包裝類名和方法等。
調用模型,調用試圖,講模型返回的東西傳給試圖,是一個領導者,中間的調和者。
*model模型規範: testModel.class.php 同理,如上。
*view視圖規範:testView.class.php 同理如上啊。
*而後最後還有個入口文件test.php來集大成,就像node的app,js
*讓我彙總一下,control就是node當中的routes,講二者集合,獲得model數據和對view的操做,views就是node的views,model就是node當中models,test.php就是app.js
mvc流程:first,瀏覽者-》調用控制器,對其發指令,
second,控制器-》按指令選模型
third,模型-》按照指令選擇數據
forth,控制器-》選取相應視圖
fifth->顯示出來。
*入口程序:如:index.php,單一入口,全部的網頁都是index.php?......相似於node的app.js
*php——mvc的目錄機構:
mvc(root)
libs(放類)
Controller(控制類)
Model(模型類)
View(視圖類)
ORG(第三方類庫)
config.php(配置文件)
index.php(入口文件)
*php的eval()方法能將在其中的字符串當代碼執行,可是不安全。
*在mnv當中,可能會存在多個的控制器類,因此,用的時候避免不了複雜的實例化和文件得引入,因此,寫一個函數
function C($name,$method){}來執行將controller引入和實例化而且執行方法的操做。打包此方法很方便;
相似的,視圖和modle層都如此,很方便,只是他們function V/M($name){...},只有一個參數,由於若是要傳方法的
話,他們方法可能有參數,就複雜了,就返回他們實例化對象就好了。
*in_array('某值','某數組');如果require了文件,就等於我這裏有了全部被require的對象了
*爲了不有害的侵入,咱們須要對所得到的$_GET[]參數進行過濾, 過濾器以下,避免用戶傳入有害的參數。
function filter($string)
{
return (!get_magic_quotes_gpc())?addslashes($string):$string;
}
*除此以外,咱們還用數組來裝着咱們規定能夠訪問的controller和method,控制用戶非法訪問啊。github
*#*#*php視圖引擎,專門進行php view層的開發。相似於jade,也是視圖引擎。。Smarty,做用是爲了使得先後的代碼分離,因此用視圖引擎,,,
*官網:www.smarty.net smarty.class.php是主文件,能夠調用其它功能,smartyBC.class.php是兼容舊版本,plugins是爲了拓展。
*這個smarty用着是比較迷惑,不知道它究竟是想要幹什麼。用時候,本身new一個php文件,而後引入smarty.class.php,而後,寫5個配置,2個方法,以後,
就能夠操做了,$smarty->assign('modle','wuruijie');定義變量的,$smarty->display('顯示在哪一個模板文件名');
smarty配置的文件名以下:
<?php
require('../smarty/Smarty.class.php');
header('Content-Type:text/html;charset=utf-8');
$smarty = new Smarty();
$smarty->left_delimiter = '{';//左界定符
$smarty->right_delimiter = '}';//右界定付
$smarty->template_dir = 'tpl';//模板存放文件
$smarty->compile_dir = 'template_c';//編譯生成文件處
$smarty->cache_dir ='cache';//緩存
//如下是緩存開啓的兩個配置,不過smarty緩存用得少
$smarty->caching = true;//開啓緩存
$smarty->cache_lifetime = 120;//緩存時間
*smarty語法:(d都在模板文件中用)
*註釋 {*hello*}
*數組{$arr['key1']['key2']}
*smarty變量調節器
$smarty->assign($fuck,'i love you');
*首字母大寫:{$fuck|capitalize} =I Love You
*連接字符串:{$fuck|cat:'world'} = i love you world
$time = time();
*日期格式化:{$time|date_format:"%Y-%B%e %H:%M:%S"}
*對空的變量於初值:{$fuck|default:'他是空的不可爲空啊'}
*轉碼調節器:{$hello|escape:'url'}url是參數,表明轉碼方式url,還能夠是javascript,html;爲了不產生誤會。
*所有大寫所有小寫調節器:{$hello|lower/upper}
*換行符換成html標籤:{$space|nl2br}
*smarty條件修飾符:
*樣式{if modle eq fuck}I will be strong {elseif $age gt 25}I fight!{elseif $m lt 30 & $m neq me}haah
eq是等於 gt大於 lt小於
**感受smarty有毛線做用,到時候有用到的時候在看。
**PHP 與mysql Again
$mysqli = mysqli_connect('localhost','root','hello','test');
//更改操做的數據庫,mysqli_select_db('庫名');被坑了 沒有那麼多。。。
die();做用至關於echo() + exit();
*****CICICICI(CodeIngniter)***************************
*哈哈 ci不要要學習模板引擎哈哈。。。。
*經過入口文件對C的名字的指令和方法的使用來達到訪問的目的;
*實際上就是model層處理數據,而後包含而且實例化到control層,以後,在view層操做顯示,
而後在包含到control層當中,也就是:先接受用戶參數,以後找屬於哪一個控制器,以後,控制器引用
對應的model,實例化以後,此時在view層中獲得應用,以後,control層在引入view層,以後,在index中引入實例化而且返給入口文件,
是的,就是如此的。
**mvc中,入口文件是惟一一個讓瀏覽器請求的文件。
*在他媽的形象點,就是所謂的index.php是曹操,controller是荀彧,荀彧有不少計謀,每一個計謀要調動,views和modles是許褚和張遼和郭嘉和賈詡等等
*MVC Clear
1,入口文件:惟一一個給瀏覽器請求的腳本文件
2,controller
協調視圖和模型
3,model
提供數據,保存數據
4,視圖views
只負責渲染
5,動做action
是控制器中的方法,用於被請求的。
*******2015.10.28.php***************
*在寫url傳參數的時候,www.baidu.com?user=modle&action=manage,不加'',否則傳過去的參數就會帶引號
*在control層當中進行require_once('directory')能夠引用視圖層;
*php代碼也是從上到下執行的啊,我再控制層先獲得了model的數據,而後再引入視圖文件,而後再在view中用就能夠了,,哈哈哈哈哈哈哈哈
*在不少時候每每會不能摒棄在java上的壞脾氣,直接亂搞,注意在封裝函數時候變量的寫法。。。。。。
*如今跑通了mvc的流程了,須要學習框架了。。。哈哈 見文件 mvcAgain 總總作了第三次才ok
*將數據存入數組的方法是 $parent[ ] = $variable; 用遍歷能夠將$variable(能夠是字符串,或者數組對象都行)的各個值(也許是數據庫中獲得的值放入$parent),
*CI(CodeIgniter)繼續:
*CI是須要的是其目錄下的:system,application,index.php,將其拷貝到站點目錄便可。
*開發目錄是application,系統文件夾是system,不可動,之後ci升級靠它
*ci的pathInfo方式訪問網站:
入口文件:http://localhost/index.php/welcome/test welcome是控制器名稱,test是控制器下的方法名(動做)。。。如果放在服務器
的跟目錄上,則能夠隱藏index.php這入口文件。
*mvc在application中,一個控制器,是一個大類 (功能,寫博客),大類中許多方法(動做,頁面,修改,添加),方法中就包含了許多require或者include來的modelclass或者是viewclass
*默認控制器是welcome,默認動做是index
**CI控制器(controller):
1,控制器文件名字要小寫;一個單詞搞定,不加什麼controller和class,
2,類名直接是名字了,。。。那就都小寫了。此處名字都與URL相關
3,全部控制器須要直接或者間接繼承CI_controller類,(ci 提供的類所有以CI_做爲前綴);
4,要被瀏覽器訪問的動做(控制器)中的方法,只能是public類,類名也不能如下劃線開頭,除非被public合法名字的類所暴露。方法名能夠不區分大小寫。
5,總而言之啊,就是被url所用的controllername和functionname名字要被url承認。
*******2015.20.29
*CI視圖(views):
****我發現,如果在控制器類中再次執行構造了方法,而後再來$this->load->view();就會報錯,
緣由是本身執行了構造方法,繼承來的構造方法沒有做用了,因而就錯誤了。因此,不要將方法取名和類名同。
*一個控制器有可能有不少的視圖,因而乎,在view中對於每一個功能,最好創建個文件夾來包含。
只是在$this->load->view('user/index') 寫個路徑而已。
*controller給視圖層傳送數據是:$this->load->vars(數據對象);有時候有多個變量如:$array $name $int,能夠定義一個關聯數組:$data[array] = array('','');$data['name']='name',$data['int']=1;
而後到了視圖層,直接能夠用$title就是其值
*數據到了試圖層以後,渲染方法如此:
<?php foreach ($array as $item) :?>
<td><?=$item['id']?></td>
<td><?=$item['email']?></td>
<?php endforeach ;?>
由於數據庫裏面存着許多信息,而每條信息又有多個字段,因此,慢慢能夠體會爲何若此
*php的代碼的執行順序也是從上到下的,對於視圖的加載,能夠$this->load-view('')屢次,
並且在一個方法(頁面裏)加載的多個view是按照順序拼接起來的啊,因此CI框架能夠
像是node裏面的layout同樣,來進行視圖的屢次複用。
**view層的實現:通過實踐後的坑點:
*$this->load->view(是數據不是view文件名);
*關聯數組實際上就像是全局變量同樣存放着傳遞的變量名;
*在取數據時候容易寫錯:
<?php foreach ($lover as $item):?> 有括號和引號
<td><?=$item['id']?></td> $item['helo'] 有中括號,之中變量有引號
<td><?=$item['email']?></td>
<?php endforeach ;?>
*傳言什麼if啊 else啊也能夠像上面的用法
******2015.10.30**
CI模型(model):
*模型文件名字要全小寫,可是其中的類首字母大寫(是由源文件控制的),爲了和控制器(不加後綴)不衝突,在模型類後面加後綴如:user_model(文件名),若是不加的話,ci在記載發現相同的類名就會報錯了 類名:User_model其繼承類 CI_Model();
*CI模型中能夠直接使用超級對象的屬性(後續講)。。。
*此處強調一哈,model文件名倘若爲:sherlock_model.php,類名爲Sherlock_model,在控制層引用時候:$this->load->model('類名的名字,大寫首字母的那個'),這樣之後,Sherlock_model就放在了全局對象裏面(模型加載好自動成爲超級對象的屬性),;在controller調用其方法時候,就:$this->Sherlock_model->myway();
*controller層當中加載模型的方法$this->load->model('User_model',[second']);第二個參數是引進來後引用時候的名字。這種意思就是講這個東西弄到超級變量裏面;只要加載好直接成爲超級對象屬性
而後調用時候,就能夠直接$this->User_model....
*$this->load->view('user/index',array(關聯數組));
***###哎呀,忍不住說句,實際上命名沒有那麼複雜,就是控制器的文件名和類名同樣都小寫,模型的是文件名後面加個_model,都小寫,而後類名首字母大寫。
*在實際的操做中,除了關聯的數據庫,其餘數據庫,基本上一個表對應一個model
*CI超級對象:(CI的控制器對象。)--就是mvc中controller對象。就是controller中的$this
$this這個超級對象的屬性:
$this->load裝載器,裝在視圖啊,裝載數據啊。。。
->
view()
vars()分配變量導視圖
database()裝載數據庫對象(就是鏈接數據庫)
model()裝載模型
helper()加載幫助文件
**$this->uri
CI中傳參數是pathInfo;
controller中獲得參數:CI方法
$this->uri->segment(number);number是段數,就是從index.php後的第幾段 以'/'爲分割;
*傳統的pathInfo方式
入口.php/控制器/動做/參數1/值1/參數2/值2
獲取信息時候任然要知道key才行。
*CI中的
*法1:
入口.php/控制器(1)/動做(2)/值1(3)/值2(4)究竟是第幾段看個人括號標註
*法2:
獲取到url中ci先進法穿的參數,能夠再控制器相應的方法中當中
加入變量參數來接受參數的值,能夠多個。在放參數的時候,如果不必定傳參數,那麼,能夠像less中同樣先給形參賦值。
*input屬性(對視超級對象的屬性)對input表單的獲取類
$this->input->post('username');獲取提交的username
等價於 $_POST['username'];
因此 $this->input->server('PHP SELF');
等價於 $_SERVER['PHP_SELF'];
哎喲 講半天不就是不用框架時候的全局變量麼 ?。。。。。只要是$this->....都是之前的全局變量演化來的,這麼想就行了。之因此這麼寫,是由於,雖然效果是同樣,可是CI框架將咱們方法作了安全處理。更安全。
*超級對象真的很是超級,$this視圖裏面也能夠用。
**IC在數據庫中的使用:
*數據庫的設置文件能夠在application的config文件夾下的找到database.php,能夠在裏面進行配置,在使用ci的這個以前要對數據庫進行設置才行。
*$this->load->database();是裝載(鏈接)數據庫了。只要裝載成功,就能夠存在超級變量 $this->db中了 db就是屬性
*$this->db->query();查詢返回(操做數據庫了)的是一個對象。不是數組了
如果想要轉換成數組,則須要$obj=$this->db->query('');$userObj = $obj->result();就轉換成了一個由每條記錄(多個girls)組成的數組;
*補充:在原生代碼中,mysql_fetch_assoc()返回關聯數組
mysql_fetch_object()返回對象
*注,上面是鏈接一個配置文件中已經寫好的數據庫,如要鏈接多個數據庫,則須要
在配置文件中再複製一分那個$db['default']...一連串,而後,在
$this->load->database(' ')時候,參數寫上代替defualt的位置便可。
*將數據傳到視圖層的另外種方法:$this->load->view('pagePath',$data);
*在頁面上渲染數據時候,如果數組性,則須要$array['name'] 如果對象,則能夠
$array->name;
$obj=$this->db->query('');
$userObj = $obj->result();返回數組中的記錄對象
$userObj = $obj->result_array();返回數組中的數組;
$userObj = $obj->row() 返回第一條對象
$userObj = $obj->row_array();反回第一條數組
*注:須要從controller傳數據給view不能獲得這個數據就直接傳,而是要將數據放在一個關聯數組中
才能穿過去,我都被坑了。
************2015.10.31******************
*增長刪除修改的都是$this->db->query()返回的值是true或者false,而查的返回的對象。因此增刪改時候能夠進行成功或者是失敗的判斷。
*查看受影響的行數:$this->db->affeted_rows():
*mysql會給每一個新增的記錄一條id叫作自增id,可用$this->db->insert_id()查到;
*在數組庫操做的過程當中還面臨安全問題,關於查詢的字符串要處理和表前綴(系統安裝時候要用戶輸入標籤追,如果沒輸對,就全廢了)問題
*每一個方法都寫$this->load->database()是很麻煩的,因此啊,能夠再apllication的config文件中找到autoload。php文件,將要自動加載的類庫給添加了就不用每次麻煩寫了
*安全問題一:對於傳入的數據,再寫mysql語句時候啊,變量要以??代替,而後在執行query時候啊,能夠傳入一個穿放着變量的數組來做爲第二個參數,$sql是第一個參數,就能夠替換掉?處的變量
*安全問題二:對於表前綴的問題啊,首先,怕在開發過程中修改表前綴引起的麻煩,因此,引入了一個東西,叫作表前綴的替換,怎麼替換呢?任然是在application當中的database.php文件當中,修改一個配置,'swap_pre' => 'swap_',給它添加一個表前綴,如,而後在sql語句當中的我原來的ci_girls,寫成swap_girls,就算database中的實際表前綴改了,也會被自動替換成所改的,也比較方便。。。
//數據庫的操做到此就告一段落的
*********AR模型******
*引言:上面的方法是一種操做數據庫的方法,如今ar又是一種,能夠簡化許多sql語句的方法。
*要啓動ar方法,要在config的database中確保Active_recod = ‘true’才行,不然是用不了ar方法
*查詢:$result=$this->db->get('tableName')【查詢所有就只有一個參數就是表名】能夠獲取全部表中數據,這裏ar模型不須要寫表前綴了這個東西獲得的也是對象,也須要用$res=$result->result();以後才能使用
*插入:$bool = $this->db->insert('tableName',$data)【兩個參數表名和包裝了數據的關聯數組】;$data=array('username'=>'zhannan','password='=>'Iloveyou');將要插入數據組裝成數組就好了
*修改:$bool = $this->db->update('表名',‘包裝了所要修改的參數的關聯數組’,'array("id"=>1)[就是修改的地方時那個]')
*刪除也容易就是:$this->db->delete('tableName',array(delete condition));
*他媽的,個人數據庫的基本語句只是須要提高啊。哈哈哈,,,,
**AR中sql的連貫查詢。。。
*如:sql:select name,pswd from user where id>=3 order by id desc limit 2,3(跳過前兩條取後三條)
limit 2,3 跳過兩條去三條 limit 1只取一條
SELECT * FROM ci_girls WHERE emotion LIKE '%我%' ORDER BY id DESC
’%我%‘表明中間有我字樣的信息。。。還有不少 看來須要個專題慢慢彌補
*如phpCI要讀取如此數據,如此
$this->db->select('girlname,id')
->from('girl')
->where('id >=',$id)
->order_by('id desc')
->limit(3,2)//要注意這裏,跳過兩條去三條和正常的sql語句相反
->get();
如果要輸出上一條sql語句:echo $this->db->last_query();
*重大發現:我發現了,只要是設計參數的傳遞的,ci當中都靠array來完成!
*在寫連貫查詢的時候,要注意where地方的參數,直接用數組去傳遞參數了,
並且啊,注意,因爲框架當中的正則,因此,where('name =','zhongyaji'),符號和字段名要空格!!!!!!!
*若是仍是遇到了很是負責的語句,那麼仍是直接寫sql語句,? 那種去作了
****CI框架的拓展
引言:在ci當中,發現某各種很差用的時候,能夠本身擴展他。如何擴展,如,我想要擴展CI_controller,就要看看system文件夾中系統的CI_controller類是在哪一個文件夾中,在core中,因而,我回到application文件夾中找到core文件,就能夠對應的在裏面寫controller的拓展。session在system下是在librarie目錄下,因此啊要擴展session的方法,在application下也是要寫在其下面的libraries下;擴展僅僅是擴展,就是在原有的功能上添加一些功能,,因此,如,個人拓展代碼是:
注意,在php中子類繼承了父類以後,子類的構造函數會覆蓋父類的
BUT啊 爲何要用前綴MY_而不是其餘呢?在config文件夾下的config.php有一個屬性叫作
:$config['subclass_prefix'] = 'MY_';的地方規定了拓展方法的前綴都是MY_
文件名是MY_Controller.php
class MY_Controller extends IC_Controller
{
//注意,要保留原來的方法,就要寫構造函數
public function __construct()
{
//第一句必定就要繼承父類
parent::__construct();
//在將來的學習中,通常的權限驗證啊。。登陸驗證啊,通常都是再次
}
//以後就能夠寫本身的方法了哦
}
***************2015.11.1*****************
*url函數
*這個東西是爲了在寫地址如post的action或者是a的href時候爲了磨合主目錄變而產生的東西,用了
它,就算主目錄變了,也能夠不用改路徑。
*site_url()首先在controller的action中須要$this->load->helper('url') 這個東西也能夠在autoload.php裏面 配置自動load;而後在view中的post的action中就如此寫:
<form action='<?php echo site_url('controller/action') ?>'>而後頁面就會是controller下的action中那個,在經過$this->input->post[]獲取參數。
*base_url()這個東西是爲了表示資源在的路徑(是表明根目錄,而不是../了),如<img src = '<?php echo base_url()?>img/left/hello.png'>base_url()方法本身就帶了下劃線,因此啊 不須要在後面再加下劃線了。
*#*#*#**#*#*#*#*下面是一些平常設計中經常使用的方法。
*php分頁的使用:很是的經常使用啊這個東西也是啊
。。。。。。這個東西有點複雜擦了。。。慢慢來。
**複雜的寫法若此於方法中:
first:裝載分頁類:
$this->load->library('pagination');
second:每頁顯示的記錄數:
$page_size = 10;//每頁顯示十條
third配置項目config
//哪一個目錄下的分頁,目錄設置
$this->load->helper('url');
$config['base_url'] = site_url('controller/action');
//總共幾條記錄
$config['total_rows'] = '';
//每頁顯示幾條
$config['per_page']='';
//初始化方法
$this->pagination->initialize($config);
//上述的設置基本完成以後,就能夠顯示分頁的那些標籤了
$data['link']=$this->pagination->create_links();
$this->load->vars($data);將這個link樣式傳遞給視圖層
***experience of url:
經常使用的有兩個方法,在用以前,都要加載
$this->load->helper('url');
以後直接用(這裏比較特殊:)
1.site_url('controller/action');//是獲得方法的url地址是什麼?經常使用於超連接之淚的
2,base_url();獲得的一般是地址根目錄,絕對地址。
*日了狗了,原來limit是更多的用來控制分頁顯示的。
*還有的,分頁,點擊頁碼的時候,url上會出現一個參數,是個int數字
表明着跳過了幾條。intval()方法能夠轉爲整數,因此更具這個能夠在數據庫中進行數據的查找了。
*要將點擊控制頁碼的link轉變,須要:
config['fitst/last_link']='首頁/尾頁' config['pre/next_link']=上/下一頁
*分頁產生的在url的偏移通常是第三段,因此啊,若不是第三,須要配置
config['uri_segment']=4;
*作這個頁碼卻是親自作了出來了,可是啊,哈哈,仍是有些疑問,暫時把代碼考下來了,供參考
:
public function showpages()
{
//加載頁碼類
$this->load->library('pagination');
//頁碼的一些設置
//加載頁碼所在的頁面
$this->load->helper('url');
$config['base_url'] = site_url('paginationuse/showpages');
//link處的名字變成自定義
$config['prev_link']='上一頁';
$config['next_link']='下一頁';
$config['first_link']='首頁';
$config['last_link']='尾頁';
//加載總共幾頁
$config['total_rows'] = 100;//這裏是可變的,能夠變量賦值之
//加載每頁雞條記錄
$per_page = 3;
$config['per_page'] = $per_page;//這裏是可變的,能夠變量賦值之
//初始化配置
$this->pagination->initialize($config);
//從數據庫中取出來試試
$this->load->database();
//獲取url空頁碼控制的條數,來數據庫中查詢
$offset = intval($this->uri->segment(3));
$sql = 'select * from swap_girls limit '.$offset.','.$per_page;
echo '查詢的語句是:'.$sql.'<br/>';
$end = $this->db->query($sql);
$result = $end->result();
$data['result'] = $result;
//上述完成,基本就設定好了初等的模型,而後須要數據庫的配合,而後換成連接,獲得渲染,此處縣換成連接
$data['links'] = $this->pagination->create_links();
//將數據傳到view
$this->load->view('pagination/pagination',$data);
}
CI文件上傳:
*文件上傳必須有form,而form類當中,必有:
<form action='',method='',enctype='multipart/form-data'>//必須有enctype這句
<input type='file' name='picture'>//其中的有個input屬性是file。。。。。
</form>
*上傳上傳,就是傳到服務的期某個目錄,因此呀,本身要在某個地方建立個目錄。專門放上傳的東西的
*注意,在ci中index入口文件,因此寫相對路勁時候都是以其爲基本寫的。
*上傳也是要配置一些東西:
(傳來哪一個頁面哪一個頁面作這些操做。)
$config['upload_path']='./upload';//看,這個路勁就印證了上一點
$config['allowed_types']='gif|png|jpg|jpeg';//容許的文件
$config['file_name']=uniqid();使得文件名是惟一的。
$this->load->library('upload',$config);
$this->upload->do_upload('picture');//這裏括號裏面的參數,是剛剛type=file表單裏面的參數
$this->upload-data()能夠獲得剛剛上傳的文件的屬性
******2015.11.02***********************************
*設置路由:能夠隨意配置url,能夠設置隱藏index.php或者設置文件是html結尾
*在config文件當中的route.php當中能夠設置網站默認的控制器是哪一個,原來默認的是welcome.php
*在config的route.php文件中寫$route['正則寫出來的實際顯示的url']='原來的url'
*如:$route['news/[\d][6]/[[\d]+]\.html'] = 'article/show/$1';
***哎喲 個人正則表達式太弱了 ,要槍火槍火;
*真實項目的url是根據需求來:因此說正則表達式很重要的,正則填坑:
1,preg_match('正則規則','匹配源');//判斷某個正則規則是否存在
2,正則表達式由分隔符(/,#,~)和元字符(最基礎的字符)組成
3,若是模式當中須要有分隔符字符出現,那麼要用\進行轉移,就像是引號多個時候用\轉移。
4, 分隔符後面能夠用模式修飾符,如:'/http/i' (i是忽略大小寫),能夠匹配Http,
5,元字符 \ ,轉譯字符,只在方括號類可用,
^開始正則的位置,外部表示開始,在方括號內入:[^\s]表示取反,非空白符,
$正則結束出:
.匹配除了換行以外的任何字符
[ ]開始和結束字符類的定義
( )【】內子組的定義
*0或者屢次
+1或者屢次
{}自定義量詞的開始結束
/i是忽略大小寫 /s是空白 /d是匹配數字
正則表達式我是日了狗了:看着暈得很,,,拷貝下來個大神的,之後用的時候查詢了。。。。
1. 平時作網站常常要用正則表達式,下面是一些講解和例子,僅供你們參考和修改使用:
2. "^\d+$" //非負整數(正整數 + 0)
3. "^[0-9]*[1-9][0-9]*$" //正整數
4. "^((-\d+)|(0+))$" //非正整數(負整數 + 0)
5. "^-[0-9]*[1-9][0-9]*$" //負整數
6. "^-?\d+$" //整數
7. "^\d+(\.\d+)?$" //非負浮點數(正浮點數 + 0)
8. "^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$" //正浮點數
9. "^((-\d+(\.\d+)?)|(0+(\.0+)?))$" //非正浮點數(負浮點數 + 0)
10. "^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$" //負浮點數
11. "^(-?\d+)(\.\d+)?$" //浮點數
12. "^[A-Za-z]+$" //由26個英文字母組成的字符串
13. "^[A-Z]+$" //由26個英文字母的大寫組成的字符串
14. "^[a-z]+$" //由26個英文字母的小寫組成的字符串
15. "^[A-Za-z0-9]+$" //由數字和26個英文字母組成的字符串
16. "^\w+$" //由數字、26個英文字母或者下劃線組成的字符串
17. "^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$" //email地址
18. "^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$" //url
19. /^(d{2}|d{4})-((0([1-9]{1}))|(1[1|2]))-(([0-2]([1-9]{1}))|(3[0|1]))$/ // 年-月-日
20. /^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0|1]))/(d{2}|d{4})$/ // 月/日/年
21. "^([w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$" //Emil
22. /^((\+?[0-9]{2,4}\-[0-9]{3,4}\-)|([0-9]{3,4}\-))?([0-9]{7,8})(\-[0-9]+)?$/ //電話號碼
23. "^(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5])$" //IP地址
24.
25. 匹配中文字符的正則表達式: [\u4e00-\u9fa5]
26. 匹配雙字節字符(包括漢字在內):[^\x00-\xff]
27. 匹配空行的正則表達式:\n[\s| ]*\r
28. 匹配HTML標記的正則表達式:/<(.*)>.*<\/\1>|<(.*) \/>/
29. 匹配首尾空格的正則表達式:(^\s*)|(\s*$)
30. 匹配Email地址的正則表達式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
31. 匹配網址URL的正則表達式:^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$
32. 匹配賬號是否合法(字母開頭,容許5-16字節,容許字母數字下劃線):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
33. 匹配國內電話號碼:(\d{3}-|\d{4}-)?(\d{8}|\d{7})?
34. 匹配騰訊QQ號:^[1-9]*[1-9][0-9]*$
35.
36.
37. 元字符及其在正則表達式上下文中的行爲:
38.
39. \ 將下一個字符標記爲一個特殊字符、或一個原義字符、或一個後向引用、或一個八進制轉義符。
40.
41. ^ 匹配輸入字符串的開始位置。若是設置了 RegExp 對象的Multiline 屬性,^ 也匹配 ’\n’ 或 ’\r’ 以後的位置。
42.
43. $ 匹配輸入字符串的結束位置。若是設置了 RegExp 對象的Multiline 屬性,$ 也匹配 ’\n’ 或 ’\r’ 以前的位置。
44.
45. * 匹配前面的子表達式零次或屢次。
46.
47. + 匹配前面的子表達式一次或屢次。+ 等價於 {1,}。
48.
49. ? 匹配前面的子表達式零次或一次。? 等價於 {0,1}。
50.
51. {n} n 是一個非負整數,匹配肯定的n 次。
52.
53. {n,} n 是一個非負整數,至少匹配n 次。
54.
55. {n,m} m 和 n 均爲非負整數,其中n <= m。最少匹配 n 次且最多匹配 m 次。在逗號和兩個數之間不能有空格。
56.
57. ? 當該字符緊跟在任何一個其餘限制符 (*, +, ?, {n}, {n,}, {n,m}) 後面時,匹配模式是非貪婪的。非貪婪模式儘量少的匹配所搜索的字符串,而默認的貪婪模式則儘量多的匹配所搜索的字符串。
58.
59. . 匹配除 "\n" 以外的任何單個字符。要匹配包括 ’\n’ 在內的任何字符,請使用象 ’[.\n]’ 的模式。
60. (pattern) 匹配pattern 並獲取這一匹配。
61.
62. (?:pattern) 匹配pattern 但不獲取匹配結果,也就是說這是一個非獲取匹配,不進行存儲供之後使用。
63.
64. (?=pattern) 正向預查,在任何匹配 pattern 的字符串開始處匹配查找字符串。這是一個非獲取匹配,也就是說,該匹配不須要獲取供之後使用。
65.
66. (?!pattern) 負向預查,與(?=pattern)做用相反
67.
68. x|y 匹配 x 或 y。
69.
70. [xyz] 字符集合。
71.
72. [^xyz] 負值字符集合。
73.
74. [a-z] 字符範圍,匹配指定範圍內的任意字符。
75.
76. [^a-z] 負值字符範圍,匹配任何不在指定範圍內的任意字符。
77.
78. \b 匹配一個單詞邊界,也就是指單詞和空格間的位置。
79.
80. \B 匹配非單詞邊界。
81.
82. \cx 匹配由x指明的控制字符。
83.
84. \d 匹配一個數字字符。等價於 [0-9]。
85.
86. \D 匹配一個非數字字符。等價於 [^0-9]。
87.
88. \f 匹配一個換頁符。等價於 \x0c 和 \cL。
89.
90. \n 匹配一個換行符。等價於 \x0a 和 \cJ。
91.
92. \r 匹配一個回車符。等價於 \x0d 和 \cM。
93.
94. \s 匹配任何空白字符,包括空格、製表符、換頁符等等。等價於[ \f\n\r\t\v]。
95.
96. \S 匹配任何非空白字符。等價於 [^ \f\n\r\t\v]。
97.
98. \t 匹配一個製表符。等價於 \x09 和 \cI。
99.
100. \v 匹配一個垂直製表符。等價於 \x0b 和 \cK。
101.
102. \w 匹配包括下劃線的任何單詞字符。等價於’[A-Za-z0-9_]’。
103.
104. \W 匹配任何非單詞字符。等價於 ’[^A-Za-z0-9_]’。
105.
106. \xn 匹配 n,其中 n 爲十六進制轉義值。十六進制轉義值必須爲肯定的兩個數字長。
107.
108. \num 匹配 num,其中num是一個正整數。對所獲取的匹配的引用。
109.
110. \n 標識一個八進制轉義值或一個後向引用。若是 \n 以前至少 n 個獲取的子表達式,則 n 爲後向引用。不然,若是 n 爲八進制數字 (0-7),則 n 爲一個八進制轉義值。
111.
112. \nm 標識一個八進制轉義值或一個後向引用。若是 \nm 以前至少有is preceded by at least nm 個獲取得子表達式,則 nm 爲後向引用。若是 \nm 以前至少有 n 個獲取,則 n 爲一個後跟文字 m 的後向引用。若是前面的條件都不知足,若 n 和 m 均爲八進制數字 (0-7),則 \nm 將匹配八進制轉義值 nm。
113.
114. \nml 若是 n 爲八進制數字 (0-3),且 m 和 l 均爲八進制數字 (0-7),則匹配八進制轉義值 nml。
115.
116. \un 匹配 n,其中 n 是一個用四個十六進制數字表示的Unicode字符。
117.
118. 匹配中文字符的正則表達式: [u4e00-u9fa5]
119.
120. 匹配雙字節字符(包括漢字在內):[^x00-xff]
121.
122. 匹配空行的正則表達式:n[s| ]*r
123.
124. 匹配HTML標記的正則表達式:/<(.*)>.*</1>|<(.*) />/
125.
126. 匹配首尾空格的正則表達式:(^s*)|(s*$)
127.
128. 匹配Email地址的正則表達式:w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*
129.
130. 匹配網址URL的正則表達式:http://([w-]+.)+[w-]+(/[w- ./?%&=]*)?
131.
132. 利用正則表達式限制網頁表單裏的文本框輸入內容:
133.
134. 用正則表達式限制只能輸入中文:onkeyup="value=value.replace(/[^u4E00-u9FA5]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^u4E00-u9FA5]/g,''))"
135.
136. 用正則表達式限制只能輸入全角字符: onkeyup="value=value.replace(/[^uFF00-uFFFF]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^uFF00-uFFFF]/g,''))"
137.
138. 用正則表達式限制只能輸入數字:onkeyup="value=value.replace(/[^d]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^d]/g,''))"
139.
140. 用正則表達式限制只能輸入數字和英文:onkeyup="value=value.replace(/[W]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^d]/g,''))"
141.
142. =========經常使用正則式
143.
144.
145.
146. 匹配中文字符的正則表達式: [\u4e00-\u9fa5]
147.
148. 匹配雙字節字符(包括漢字在內):[^\x00-\xff]
149.
150. 匹配空行的正則表達式:\n[\s| ]*\r
151.
152. 匹配HTML標記的正則表達式:/<(.*)>.*<\/\1>|<(.*) \/>/
153.
154. 匹配首尾空格的正則表達式:(^\s*)|(\s*$)
155.
156. 匹配IP地址的正則表達式:/(\d+)\.(\d+)\.(\d+)\.(\d+)/g //
157.
158. 匹配Email地址的正則表達式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
159.
160. 匹配網址URL的正則表達式:http://(/[\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?
161.
162. sql語句:^(select|drop|delete|create|update|insert).*$
163.
164. 一、非負整數:^\d+$
165.
166. 二、正整數:^[0-9]*[1-9][0-9]*$
167.
168. 三、非正整數:^((-\d+)|(0+))$
169.
170. 四、負整數:^-[0-9]*[1-9][0-9]*$
171.
172. 五、整數:^-?\d+$
173.
174. 六、非負浮點數:^\d+(\.\d+)?$
175.
176. 七、正浮點數:^((0-9)+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$
177.
178. 八、非正浮點數:^((-\d+\.\d+)?)|(0+(\.0+)?))$
179.
180. 九、負浮點數:^(-((正浮點數正則式)))$
181.
182. 十、英文字符串:^[A-Za-z]+$
183.
184. 十一、英文大寫串:^[A-Z]+$
185.
186. 十二、英文小寫串:^[a-z]+$
187.
188. 1三、英文字符數字串:^[A-Za-z0-9]+$
189.
190. 1四、英數字加下劃線串:^\w+$
191.
192. 1五、E-mail地址:^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$
193.
194. 1六、URL:^[a-zA-Z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\s*)?$
195. 或:^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$
196.
197. 1七、郵政編碼:^[1-9]\d{5}$
198.
199. 1八、中文:^[\u0391-\uFFE5]+$
200.
201. 1九、電話號碼:^((\(\d{2,3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$
202.
203. 20、手機號碼:^((\(\d{2,3}\))|(\d{3}\-))?13\d{9}$
204.
205. 2一、雙字節字符(包括漢字在內):^\x00-\xff
206.
207. 2二、匹配首尾空格:(^\s*)|(\s*$)(像vbscript那樣的trim函數)
208.
209. 2三、匹配HTML標記:<(.*)>.*<\/\1>|<(.*) \/>
210.
211. 2四、匹配空行:\n[\s| ]*\r
212.
213. 2五、提取信息中的網絡連接:(h|H)(r|R)(e|E)(f|F) *= *('|")?(\w|\\|\/|\.)+('|"| *|>)?
214.
215. 2六、提取信息中的郵件地址:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
216.
217. 2七、提取信息中的圖片連接:(s|S)(r|R)(c|C) *= *('|")?(\w|\\|\/|\.)+('|"| *|>)?
218.
219. 2八、提取信息中的IP地址:(\d+)\.(\d+)\.(\d+)\.(\d+)
220.
221. 2九、提取信息中的中國手機號碼:(86)*0*13\d{9}
222.
223. 30、提取信息中的中國固定電話號碼:(\(\d{3,4}\)|\d{3,4}-|\s)?\d{8}
224.
225. 3一、提取信息中的中國電話號碼(包括移動和固定電話):(\(\d{3,4}\)|\d{3,4}-|\s)?\d{7,14}
226.
227. 3二、提取信息中的中國郵政編碼:[1-9]{1}(\d+){5}
228.
229. 3三、提取信息中的浮點數(即小數):(-?\d*)\.?\d+
230.
231. 3四、提取信息中的任何數字 :(-?\d*)(\.\d+)?
232.
233. 3五、IP:(\d+)\.(\d+)\.(\d+)\.(\d+)
234.
235. 3六、電話區號:/^0\d{2,3}$/
236.
237. 3七、騰訊QQ號:^[1-9]*[1-9][0-9]*$
238.
239. 3八、賬號(字母開頭,容許5-16字節,容許字母數字下劃線):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
240.
241. 3九、中文、英文、數字及下劃線:^[\u4e00-\u9fa5_a-zA-Z0-9]+$
**//雖說我對正則掌握度不高,可是我仍是把視頻上的copy下來而後之後參考了
如:原來的網址是:http://localhost:80/modle/index.php/welcome/index
咱們爲了客戶需求,要轉化爲:http://localhost:80/modle/index.php/news/2015/12.html
就在config的route.php文件中改正則,如:
*******醉了 我先記着是這麼寫 以後的再說了
不過這種寫法,在controller中的方法有個參數,$id,就是url最後的id
$route['news/[\d]{6}/(/[\d]+)\.html'] = 'welcome/index/$1';這就是用前面那串的正則來代替welcome/index這種寫法。實際上我記住這種簡單的就好了 其餘的許多狀況應該也就寫得出來了。
將後面的那一串改爲前面那一串
解釋下:news/ 6個數字/多個數字.html
經過正則來定製url
*隱藏前面的入口文件是由apache來配置的,它其中的一個文件rewrite中說明了所示找不到就指向index.php,,哎喲 不對哦 怎麼隱藏呢?apache當中的httpd.conf文件當中配置rewrite,upupw中不知道呢。
*****session 於CI
*嘿老子一跳,傳說這裏的session很差用,,,,擦擦,與一個頁面(action)設置的session,此頁不能當即獲取,要麼從新刷新,要麼跳轉頁面。。。
並且啊,session是放在cookie中的,cookie又可見,因此說啊,我擦嘞,要加密,要加密,must
$thit->load->library('session');
$this->session->set_userdata('key','value');這裏的value能夠是數組或者對象。必定要有key
取出數據時候,$this->session->userdata('key');如此即可以獲取了此key對應值。
*md5()這是php中加密的函數,直接放在裏面就能夠進行加密字符串,配合uniqid()(以微妙爲單位生成隨機名字);,md5(uniqid());就能夠生成很複雜的字符串
*生成了這個字符串以後,在config文件中的config.php中的config['encryption_key']='';中
*以後存儲在cookie當中以後,當改了以後才根據配置的字符串知道是否改了來限制不能改。就是md5(cookie中的字符串.config中的部分)看看鏈接起來是否是等於cookie中的最後一段。來保障安全
*還有一個加密cookie的 設置config中的$cookie['sess_encrypt_cookie']=true
*this->session->set_flashdata['key','value']是用來設置這個session只使用一次就銷燬
*獲得:$this->session->flashdata['key'];
**表單驗證:
*有專門的類幫忙,使得咱們不須要再去看看是否空啊,之類的。。。
*首先寫個表單,而後要引入方法$this->load->library('form-vailidation');
****!!!記住 凡是這些工具類都在library庫中
*$this->form_vailidation->set_rules('name','用戶名','required') 第一個參數是表單的name,第二個是label的名稱 第三個限制是規則
第三個參數是限制規則,還有matches匹配 max/min-lenght vaild_number vaild_email....多得很
**以後的以後,$bool=$this->form_validation->run(),看其false或者true來看是否知足規則決定下一步。
如果符合規則,就調用模型來存儲數據,如果不符合規則,就加載剛纔那個視圖,而後啊,在視圖層顯示
<?php echo form_error('表單name處的值')?>只有當觸發錯誤時候纔有form_error
*在form驗證當中,有時候錯誤提示啊,種種都默認輸出英文,咱們要下載個語言包,而後在config中放入這的language中放此語言包,而後在config的config文件中的$config['lang']='zh-cn'就是這個包的名字便可。
*實際上上面這種思路是錯誤了調了一次頁面了,爲了使得值還在(剛放填入的)要設置value='<?php echo set_value('name')?>'
*再寫錯誤信息時候,如果<?php echo form_error('name','<span>','</span>') ?>這樣就不會換行了,默認是<p>提示錯誤信息會換行
*<?php echo validation_errors()?>輸出全部錯誤
*如果驗證的條件比較多,那麼啊,能夠寫成2維數組,data中 ,而後在$this->form_vailidation->set_rules($data);就能夠判斷了若是不對的話,在視圖層就能夠輸出錯誤了哦
public function judgeform()
{
$this->load->helper('url');
$this->load->library('form_validation');
//之後就像數組這麼寫吧 多好
$config= array(
array(
'field'=>'username',
'label'=>'username',
'rules'=>'required'
),
array(
'field'=>'password',
'label'=>'password',
'rules'=>'required'
),
array(
'field'=>'email',
'label'=>'email',
'rules'=>'valid_email'
)
);
$this->form_validation->set_rules($config);
$bool = $this->form_validation->run();
if($bool)
{
$this->load->view('formuse/success');
}
else
{
$this->load->view('formuse/formuse');
}
}
*檢查一個變量是否被設置isset()只能對變量使用,empty()查看變量是否爲空
**********2015*11*03**********************************
*clone有時候啊,好比有一個類,我將它實例化了以後,爲$a 如果$b=$a,我如果用b來進行一些屬性的設置,會影響到a,我若$b = clone $a;在進行操做就不會影響到a了
*final protected function __construct(){}這樣寫禁止外部調用此構造函數
***又認知了一個集成開發環境 如今有三個了 xammp wampserver upupw
**$_SERVER['REQUEST_METHOD']獲得表單請求的方式,能夠判斷是那種方式提交的,而後啊,調用函數其實是很方便的。有點像js又。
*定義全局變量要global如下才能夠。除了系統自帶的超全局變量
**關於ajax再解,哪裏向其餘頁面或者是controller或者是方法發送了get請求,夾帶參數,那就等因而向那個地方(方法、頁面、controller)發送個參數,那個地方有獲得請求的判斷,受到了get的請求它必需要發送個相應回去,好比:ajax不動,老子不動,它一動,不論好壞我都要跑跑本身的方法,給他一個說法。個人說法跑出來的結果就是給它的值,在php中是跑完後輸出的echo的地方。也就至關是我把控制檯的response當作一個網頁,隱形給它輸出我獲得的值。我只是在我如今的網頁獲得那個來處理罷了
**在寫css和jquery要引入外聯的試樣時候,都要用url類來定根目錄,寫法如:<link rel="stylesheet" type="text/css" href="<?php echo base_url();?>org/bootstrap.min.css">
******2015.11.05****************************************************
*臨時的創建一個php服務器:
命令行,進入到要運行的php的根目錄下,而後啊,輸入命令php -S 0.0.0.0:8080就至關於在http://0.0.0.0:8080搭建了一個臨時的服務器。
*在php中的view當中$this->load->view('what')能夠進行項include於node中同樣的拼接
*mysql填坑:
去重查詢 :select distinct(Username) from table;只能查詢一個字段,
分組 select user,password from table group by id 最後查詢到的只有通過id分組的user和password
選擇而且統計重複 select a count(b)/sum(b) from table group by a 選出a 將全部a對應的b有幾個,a對應b的和爲幾何?
join 貌似不管是不是外鍵均可以jion,是爲了給兩張表創建起來關係的查詢。
如:select * from a left join(左邊右鏈接就是以右邊(後選擇的表)爲標準爲標準) on(怎麼鏈接的條件) a.aid =(<>能夠是任何條件) b.bid;
select * from a,b where a.aid = b.bid (這叫作inner join)也就是說啊,兩邊是平等的 兩個標的不一樣會被捨棄 不會偏倚誰。
子查詢:就是用另一個查詢到的東西設爲如今的查詢條件,select * from tableA where conditionOne in(select * from tableB)
*關於mysql的索引,沒有索引的,就至關於翻看一本沒有目錄的書本,select起來是很麻煩的,查找個東西是很費時間的,
有索引的,就至關於一本有目錄的書了,能夠很快的查閱。
索引的分類:簇索引和數據一塊兒留在一塊兒,由於數據爲了簇索引而從新排列了,簇索引佔的空間更大了,一個表只可以有一個簇索引。
非簇索引,結構獨立,佔用空間更多,時間會更慢點,可是啊,一個表須要多個索引的時候啊,只能用非簇索引了哦
觸發器,綁定給某個表某個事件(insert delete ...),一旦此表出現了這個事件,就觸發規定事件
*****###數據庫設計:
stepOne:
需求分析:1,實體實體間關係,2屬性幾何?3,那些屬性和屬性組合能夠惟一表示實體,
邏輯設計:以後畫出er圖。,2,範式:第一範式:只能2維表;第二範式:當不是一個字段充當主鍵的時候,每一個主鍵中的字段都不能和外部的其餘信息關聯,否則啊,會產生add,delete update等異常。若是有關聯,會致使(以主鍵中一部分)增長則都增。3:第三範式:就是主鍵,不能和屬性有任何的關係,,,任意一點函數關係都不能。
<<<<<<< HEAD
****2015.11.6*****
*看到了蘇從後的數據庫設計,所有是id自增爲主鍵,之後老子也先效仿哈
*juicer是一個js的模板引擎,能夠批量的顯示獲得的數據。
*在填入動態數據到數據庫的時候,php是<?=$itme->what?>;沒有php字符了!
*defined('BASEPATH') OR exit('No direct script access allowed');在ci中是爲了防止不通過index.php直接訪問類
*想要在類中集成本身定義的類,要先引入:require_once(APPPATH.'controller/hello')APPPATH表明了application的路勁,在index.php中有規定
=======
**#*#*#CI實戰開始:2015.11.6******1,在config的route裏面能夠修改默認的進入的controller 2,在頁面的時候應該能夠$this->load->view()某個部分來進行拼接 直接用/來表明主頁面3,defined('BASEPATH') OR exit('No direct script access allowed');這句話是爲了組織不通過index.php入口文件就訪問controller4,require_once(APPPATH.'/controller/console/admin.php');//要繼承本身寫的類的時候要這麼搞 ,apppath表明application目錄****再次注意 model層只負責取得數據,邏輯是controller 視圖展現是views***今晚花了點時間,真是日了狗了,首先啊,數據庫中取到的東西是個對象或者數組,他們之中還包含取到的記錄造成的數組或者對象,因此啊,要去除其中某個值時候,好比$result = $end->result_array();$result[0]['password']; ***2015.11.08雖然仍是有不少的bug,可是啊,仍是實現了權限管理了 哈哈哈沃日勒