【PHP程式設計+MySQL資料庫+PHPMaker整合教學+技術諮詢】 本月特價優惠中! 動態的架站程式時代,要自訂PHP程式頁面有那麼難嗎? MySQL『資料庫』與『資料表』,用PHP程式有那麼難控制嗎? 你不用死背『PHP程式』與『MySQL資料庫』語法也能獨自設計完成! 這是自動化軟體程式的年代 (用PHPMaker 設計在彈指之間就能自動生成整個 PHP 程式系統) 這不是:神話!程式軟體模組取代了這一切複雜的工程。 你可以自己建構自己專屬的: 訂購表單、會員名單、擴增購物車特殊頁面 →POS 系統、CRM 系統、ERP 系統、HRM 系統...等等 (更可以加入數據資源銷售賺錢!) 該是:【見證奇蹟】的時候了! 非親眼所見....真的無法相信此神兵利器!

php程式教學

PHP寫程式中經常需要用到一些伺服器的一些資料,特把$_SERVER的詳細參數整理下,方便以後使用。
$_SERVER['PHP_SELF'] #現用的正在執行腳本的檔名,與 document root關聯。          
$_SERVER['argv'] #傳遞給該腳本的參數。          
$_SERVER['argc'] #包括傳遞給程式的指令行參數的個數(如果運行在指令行模式)。          
$_SERVER['GATEWAY_INTERFACE'] #伺服器使用的 CGI 規範的版本。例如,「CGI/1.1」。          
$_SERVER['SERVER_NAME'] #現用的運行腳本所在伺服器主電腦的名稱。          
$_SERVER['SERVER_SOFTWARE'] #伺服器標識的字串,在響應請求時的頭部中給出。          
$_SERVER['SERVER_PROTOCOL'] #請求頁面時通信協定的名稱和版本。例如,「HTTP/1.0」。          
$_SERVER['REQUEST_METHOD'] #訪問頁面時的請求方法。例如:「GET」、「HEAD」,「POST」,「PUT」。          
$_SERVER['QUERY_STRING'] #查詢(query)的字串。          
$_SERVER['DOCUMENT_ROOT'] #現用的運行腳本所在的文件根目錄。在伺服器配置檔案中定義。          
$_SERVER['HTTP_ACCEPT'] #現用的請求的 Accept: 頭部的內容。          
$_SERVER['HTTP_ACCEPT_CHARSET'] #現用的請求的 Accept-Charset: 頭部的內容。例如:「iso-8859-1,*,utf-8」。          
$_SERVER['HTTP_ACCEPT_ENCODING'] #現用的請求的 Accept-Encoding: 頭部的內容。例如:「gzip」。          
$_SERVER['HTTP_ACCEPT_LANGUAGE']#現用的請求的 Accept-Language: 頭部的內容。例如:「en」。          
$_SERVER['HTTP_CONNECTION'] #現用的請求的 Connection: 頭部的內容。例如:「Keep-Alive」。          
$_SERVER['HTTP_HOST'] #現用的請求的 Host: 頭部的內容。          
$_SERVER['HTTP_REFERER'] #連結到現用的頁面的前一頁面的 URL 位址。          
$_SERVER['HTTP_USER_AGENT'] #現用的請求的 User_Agent: 頭部的內容。          
$_SERVER['HTTPS'] — 如果通過https訪問,則被設為一個非空的值(on),否則返回off          
$_SERVER['REMOTE_ADDR'] #正在瀏覽現用的頁面使用者的 IP 位址。          
$_SERVER['REMOTE_HOST'] #正在瀏覽現用的頁面使用者的主電腦名。          
$_SERVER['REMOTE_PORT'] #使用者連線到伺服器時所使用的連接埠。          
$_SERVER['SCRIPT_FILENAME'] #現用的執行腳本的絕對路徑名。          
$_SERVER['SERVER_ADMIN'] #管理員訊息          
$_SERVER['SERVER_PORT'] #伺服器所使用的連接埠          
$_SERVER['SERVER_SIGNATURE'] #包括伺服器版本和虛擬主電腦名的字串。          
$_SERVER['PATH_TRANSLATED'] #現用的腳本所在檔案系統(不是文件根目錄)的基本路徑。          
$_SERVER['SCRIPT_NAME'] #包括現用的腳本的路徑。這在頁面需要指向自己時非常有用。          
$_SERVER['REQUEST_URI'] #訪問此頁面所需的 URI。例如,「/index.html」。          
$_SERVER['PHP_AUTH_USER'] #當 PHP 運行在 Apache 模組模式下,並且正在使用 HTTP 認證功能,這個變量便是使用者輸入的使用者名。          
$_SERVER['PHP_AUTH_PW'] #當 PHP 運行在 Apache 模組模式下,並且正在使用 HTTP 認證功能,這個變量便是使用者輸入的密碼。          
$_SERVER['AUTH_TYPE'] #當 PHP 運行在 Apache 模組模式下,並且正在使用 HTTP 認證功能,這個變量便是認證的類型。

PHP程式設計問題諮詢:
請問,如何修改MySQL的使用者帳號與密碼?

———————————————————
PHP程式設計問題回覆:
您要修改MySQL的使用者帳號與密碼,可以參考以下的說明:

首先要聲明一點,大部分情況下,修改MySQL是需要有mysql裏的root許可權的,
所以一般使用者無法變更密碼,除非請求管理員.

方法一
使用phpmyadmin,這是最簡單的了,修改mysql庫的user表,
不過別忘了使用PASSWORD函數。

方法二
使用mysqladmin,這是前面聲明的一個特例。
mysqladmin -u root -p password mypasswd
輸入這個指令後,需要輸入root的原密碼,然後root的密碼將改為mypasswd。
把指令裏的root改為你的使用者名,你就可以改你自己的密碼了。
當然如果你的mysqladmin連線不上mysql server,或是你沒有辦法執行mysqladmin,
那麼這種方法就是無效的。
而且mysqladmin無法把密碼清理。

下面的方法都在mysql提示符下使用,且必須有mysql的root許可權:
 方法三
mysql> INSERT INTO mysql.user (Host,User,Password)
VALUES('%','jeffrey',PASSWORD('biscuit'));
mysql> FLUSH PRIVILEGES
確切地說這是在增加一個使用者,使用者名為jeffrey,密碼為biscuit。
在《mysql中文參考手冊》裏有這個例子,所以我也就寫出來了。
注意要使用PASSWORD函數,然後還要使用FLUSH PRIVILEGES。

方法四
和方法三一樣,只是使用了REPLACE語句
mysql> REPLACE INTO mysql.user (Host,User,Password)
VALUES('%','jeffrey',PASSWORD('biscuit'));
mysql> FLUSH PRIVILEGES

方法五
使用SET PASSWORD語句,
mysql> SET PASSWORD FOR jeffrey@"%" = PASSWORD('biscuit');
你也必須使用PASSWORD()函數,
但是不需要使用FLUSH PRIVILEGES。

方法六
使用GRANT … IDENTIFIED BY語句
mysql> GRANT USAGE ON *.* TO jeffrey@"%" IDENTIFIED BY 'biscuit';
這裏PASSWORD()函數是不必要的,也不需要使用FLUSH PRIVILEGES。

注意: PASSWORD() [不是]以在Unix密碼加密的同樣方法施行密碼加密。

PHP程式設計問題諮詢:
請問,什麼是範本,怎麼使用範本呢?

———————————————————
PHP程式設計問題回覆:
什麼是範本,怎麼使用範本呢?,可以參考以下的說明:

———————————————————
什麼是範本,怎麼使用範本呢?
這裏有幾篇關於範本的文章
用的是phplib範本
下面是其中幾個函數的使用

$T->Set_File("隨便定義","範本檔.tpl");

$T->Set_Block("在set_file中定義的","<!– 來自範本 –>","隨便定義");

$T->Parse("在Set_Block中定義的","<!– 來自範本 –>",true);

$T->Parse("隨便輸出結果","在Set_File中定義的");

設置迴圈格式為:

<!–(多於一個空格) BEGIN $handle(多於一個空格)–>

如何將範本生成靜態網頁
<?php
//這裏使用phplib範本
    …………
    …………
    $tpl->parse("output","html");
    $output = $tpl->get("output");// $output 為整個網頁內容

    function wfile($file,$content,$mode='w') {
    $oldmask = umask(0);
    $fp = fopen($file, $mode);
    if (!$fp) return false;
    fwrite($fp,$content);
    fclose($fp);
    umask($oldmask);
    return true;
}
   // 寫到文件裏
    Wfile($FILE,$output);
    header("location:$FILE");//重定向到生成的網頁
}
?> 

—————————————————–

PHP程式設計問題諮詢:
為什麼我升級PHP後,原來的程式出現滿螢幕的 Notice: Undefined variable:

PHP程式設計問題回覆:
 Notice: Undefined variable:
這是警告的意思,由於變數未定義引起的.
打開php.ini,找到最下面的error_reporting,修改為error_reporting = E_ALL & ~E_NOTICE

對於Parse error錯誤
error_reporting(0)無法關閉.
如果你想關閉任何錯誤提示,打開php.ini,找到display_errors,設置為display_errors = Off.以後任何錯誤都不會提示.

網站訂購單系統PHP 5.6升級到PHP7 MySQL資料庫無法讀取!
PHP 5.6之前的資料庫連線檔案 Connections.php 是這樣:

<?php
# FileName=”Connection_php_mysql.htm”
# Type=”MYSQL”
# HTTP=”true”
$hostname_linkmysql = “localhost”;
$database_linkmysql = “ordersdata”;
$username_linkmysql = “root”;
$password_linkmysql = “AG09102556817Gb”;
$linkmysql = mysql_pconnect($hostname_linkmysql, $username_linkmysql, $password_linkmysql) or trigger_error(mysql_error(),E_USER_ERROR);
mysql_query(“SET NAMES UTF8”);
?>

升級到 PHP7 之後,開啟訂購單頁面是:一片空白!
那原因是什麼呢?
相信很多人要升級 PHP7 的第一步就可能遇到:訂購單頁無法開啟….

當然這樣網站開啟訂購單頁面試:一片空白!
那網購生意也沒辦法作了,只好乖乖換回原來的 PHP 5.6版本

死了這條心嗎?為何會如此?
你問當初跟你設計的程式設計師就會知道……
(原來是:PHP 5.6升級PHP7後,之前MySQL的原來語法不能用了!)

原因是:PHP>=5.5 時所有以 mysql_開頭的函數都會作廢 deprecated,改用以 mysqli_開頭的函數取代
所以,你目前使用的網站訂購系統如果從PHP 5.6升級PHP7後,正個系統因為如法連結MySQL資料庫(所以是:一片空白!)

PHP 7 的MySQL資料庫連線應該是這樣的:

1.先要建立資料庫連線:
$DBNAME = “db”;
$DBUSER = “user”;
$DBPASSWD = “password”;
$DBHOST = “localhost”;

$conn = mysqli_connect( $DBHOST, $DBUSER, $DBPASSWD);
if (empty($conn)){
print mysqli_error($conn);
die (“無法連結資料庫”);
exit;
}

備註:第7行 如果$conn=false代表連結不成功
PHP>=5.5 時所有以 mysql_開頭的函數都會作廢 deprecated,改用以 mysqli_開頭的函數取代!
2. 選取資料庫
選擇資料庫使用函數 mysqli_select_db();

if( !mysqli_select_db($conn, $DBNAME)) {
die (“無法選擇資料庫”);
}
// 設定連線編碼
mysqli_query( $conn, “SET NAMES ‘utf8′”);
3.這樣就可以取得資料:
$sql =”select * from `table` where id=1234″;
$result = mysqli_query($conn, $sql);

備註:第2行 mysql_query 的回傳值$result有兩種狀況:

SELECT, SHOW, DESCRIBE, EXPLAIN 等如果成功則取回 resultset ,否則為 false
INSERT, UPDATE, DELETE, DROP 等成功則傳回 true,否則為 false

4.接著是取出資料:
取回行數
$num = mysqli_num_rows($conn, $result);
取回資料

使用mysqli_fetch_array取回資料, 有下列三種常數狀態:

while ($row = mysqli_fetch_array($result, MYSQLI_NUM)) {
print_r( $row);
}
/*
Array
(
[0] => A123456789
[1] => 1234
[2] => 陳麗如
)
*/
while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
print_r( $row);
}
/*
Array
(
[id] => A123456789
[pass] => 1234
[name] => 陳麗如
)
*/
while ($row = mysqli_fetch_array($result, MYSQLI_BOTH)) {
print_r( $row);
}
/*
Array
(
[0] => A123456789
[id] => A123456789
[1] => 1234
[pass] => 1234
[2] => 陳麗如
[name] => 陳麗如
)
*/

常數 MYSQLI_NUM:0 MYSQLI_ASSOC:1 MYSQLI_BOTH:2

取回物件形態資料

while($obj = mysqli_fetch_object($result)){
print ($obj->id);
}
取回最後一筆異動的索引

$last_id=mysqli_insert_id($conn);

要注意的情況:
– 一定要有一個欄位有 auto_increment 屬性,否則回傳0
– 一定之前要有insert或update操作,否則回傳0

5.最後是關閉連線:

雖然PHP, mysql 會自動關閉逾時的連線和記憶體,但也能手動操作

釋放記憶體

mysqli_free_result ( $result )

關閉連線

mysqli_close($conn);

洪總教頭最後結論:
PHP 5.6 升級到 PHP7 是遲早得事情,以執行效率與安全性等諸多理由
(你的網站也不能遲遲在 PHP 5.6等待被淘汰!)

動態網站與購物網站系統使用 PHP + MySQL 大家已經用那麼久了,早就習慣了!

如果你的網站是使用架站程式,那就要注意:PHP 版本是支援那一個版本?
購物車(購物網站架站程式)也一樣,也是要注意:PHP 版本是支援那一個版本?
如果你的程式是花錢請PHP程式設計師或設計公司設計的,那也要回去找他們,看看是否可以升級?

如果你自己會PHP+MySQL的程式設計,那當然就能省去非常多的麻煩!
總教頭的PHP程式設計+MySQL資料庫+Dreamweaver整合教學
(PHPMaker運用設計網站教學):

http://por.tw/php/new-E_learning/index.php

或許是你最好的選擇!自己會,就不需要樣樣事情都要花大錢請人家幫你設計
日後維護也比較能自己掌握!那網路事業的經營也比較順心!

如何避免使用php程式中的require_once語法?


我們知道,在php中使用require_once/include_once雖然方便,但是代價昂貴,據測試資料來看,require_once比require慢3-4倍,所以在php開發中,我們應該盡量使用require/include。

以下是筆者常用的避免require/include的方法。

使用__autoload

php5可以使用__autoload來避免require,用的好的話,代碼裡頭甚至看不到幾個require,實在是安逸啊。測試結果顯示,使用__autoload之後的new Foo; 比require_once 『foo.php』; new Foo; 大概要快3倍左右。

補充:為了避免autoload衝突,可以考慮使用spl_autoload_register(PHP 5 >= 5.1.2)來改變魔術函數__autoload的行為。

使用defined檢驗是否載入過

在代碼開頭使用defined檢驗是否定義過對應的常量,如果有的話,直接return。

<?php

if(!defined('_MYCLASS_'))

return;

define('_MYCLASS_', 1);

class MyClass { … }

?>

測試了一下,defined的效能也不是太好…

require前檢查

用class_exists或是function_exists檢查一下,確認沒有載入過再出手,至少比require_once能快上3倍。php4也可以用上。

class_exists('myClass') or require('/path/to/myClass.class.php');

解決MySQL server has gone away的問題

 
你是否曾遇見過 「MySql serverhas gone away」,一句讓人其實非常琢磨不透的錯誤訊息。

對這個問題請先別懷疑自己的代碼是否有問題,其實可能只不過是一個小小的設定問題。

我所碰到的情況就是,當你有大資料(資料大小大於1M)儲存到longblob欄位時,會出現這個問題。

起初也查了很久,是不是自己的代碼出錯,但使用的是PHP,不會向哪類編譯型語系有資料越界的可能,百思不得其解。

最終看了下mysql.ini,發現max_allowed_packet=1M,是不是這個預設設定值造成了此問題,把此設定值修改成max_allowed_packet=16M,問題真的解決了。

因此碰到此問題請先檢查自己的設定值是否有問題。

補充一句,不同版本的Mysql,此問題的錯誤訊息可能會不同。

企業架設網站注意事項

第一,企業架設網站類型。

1. 大眾展示型:主要面向客戶、業界人士或是普通瀏覽者,以展示公司產品、樹立企業形象;也可以適當提供行業內的新聞和關聯訊息。

2. 電子商務應用型:主要面向提供者、客戶或是企業產品(服務)的消費群體,借助電子商務平台交易或是以交易為主;這樣的網站可以說是正處於電子商務化的一個中間階段,由於行業特色不同,其電子商務化程度可能處於從比較初級的服務支援、產品清單到比較進階的網上支付的其中某一階段。例如比較成熟的電子商務平台網站:淘寶網

3. 品牌宣傳型:主要面向客戶或是企業產品(服務)的消費群體,以宣傳企業的核心品牌形象或是主要產品(服務)為主。

4. 行業門戶:主要是對某個行業的集中展示,分類訊息匯總。

第二,選取可靠的網建服務商。

1. 美工要有熟練的設計功底。網站的內容應該豐富,版面設計必須要體現出企業的經營理念,進而提高企業在同行業中的競爭優勢,不可乏而無味。

2. 頁面訪問速度要快、伺服器要穩定。據調查,瀏覽使用者等待網頁開啟的忍耐度通常只有8秒,很多訪客常常會因為開啟網頁速度太慢而轉向其他網站,所以網站的瀏覽速度不可忽視,不要以為追求頁面設計,如首頁放了很多flash導致頁面開啟速度很慢。

3. 盡量選取專業做網站、信譽好以及後續服務有保障的服務商。專業的網路公司能提供滿足需求的專業網站,要選取質量好的而不是片面追求價格低廉的,很多客戶追求物美價廉,但是設計這個東西是建立在時間成本和創意理念上的,好的設計很難說做到過低的價格,為了企業的效益,需慎重作出選取。

第三, 企業架設網站完成後注意事項。

1. 功能變數名歸屬權。功能變數名歸屬問題要跟網站建設服務商談好,個別不道德服務商在給企業註冊功能變數名時所有權沒給客戶,企業如果想轉移虛擬空間就直接把網站封掉。所以企業要跟服務商確定是否功能變數名的使用者名、密碼可歸企業所有。

2. 很多的網建公司都是租用虛擬主機,則空間應該是屬於企業自身的。企業需要要回:1.ftp使用者名;2.ftp密碼;3.ip;4.控制台使用者名;5.控制台密碼;6.控制台位址;如果服務商不打算給源程式碼的話,以上這些是不會告訴的。

3. 如果網站程式有管理後台,則需向架設網站服務商要管理位址、使用者名以及密碼。


    常用的php正則表達式及語法註解:

    符合中文字元的正則表達式: [u4e00-u9fa5]
    註解:符合中文還真是個頭疼的事,有了這個表達式就好辦了

    符合雙位元組字元(內含漢字在內):[^x00-xff]
    註解:可以用來計算字串的長度(一個雙位元組字元長度計2,ASCII字元計1)

    符合空白行的正則表達式:
s*

    註解:可以用來刪除空白行

    符合 HTML旗標的正則表達式:<(S*?)[^>]*>.*?|<.*? />
    註解:網上流傳的版本太糟糕,上面這個也僅僅能符合部分,對於複雜的嵌套旗標依舊無能為力

    符合首尾空白字元的正則表達式:^s*|s*$
    註解:可以用來刪除行首行尾的空白字元(內含空格、製表符、換頁符等等),非常有用的表達式

    符合Email位址的正則表達式:w+ ([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*
    註解:表單驗證時很實用

    符合網址URL的正則表達式:[a-zA-z]+://[^s]*
    註解:網上流傳的版本功能很有限,上面這個基本可以滿足需求

    符合帳號是否合法 (字母開頭,容許5-16位元組,容許字母數字下劃線):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
    註解:表單驗證時很實用

    符合國內電話號碼:d{3}-d{8}|d{4}-d{7}
    註解:符合形式如 0511-4405222 或 021-87888822

    符合騰訊QQ號:[1-9][0-9]{4,}
    註解:騰訊QQ號從10000開始

    符合中國郵政編碼:[1-9]d{5}(?! d)
    註解:中國郵政編碼為6位數字

    符合身份證:d{15}|d{18}
    註解:中國的身份證為15位或18位

    符合ip位址:d+.d+.d+.d+
    註解:提取ip位址時有用

    符合特定數字:
    ^[1-9]d*$    //符合正整數
    ^-[1-9]d*$   //符合負整數
    ^-?[1-9]d*$   //符合整數
    ^[1-9]d*|0$   //符合非負整數(正整數 + 0)
    ^-[1-9]d*|0$   //符合非正整數(負整數 + 0)
    ^[1-9]d*.d*|0.d*[1-9]d*$    //符合正浮點數
    ^-([1-9]d*.d*|0.d*[1-9]d*)$  //符合負浮點數
    ^-?([1-9]d*.d*|0.d*[1-9]d*|0?.0+|0)$   //符合浮點數
    ^[1-9]d*.d*|0.d*[1-9]d*|0?.0+|0$   //符合非負浮點數(正浮點數 + 0)
    ^(-([1-9]d*.d*|0.d*[1-9]d*))|0?.0+|0$  //符合非正浮點數(負浮點數 + 0)
    註解:處理大量資料時有用,具體應用時注意修正

    符合特定字串:
    ^[A-Za-z]+$  //符合由26個英文字母組成的字串
    ^[A-Z]+$   //符合由26個英文字母的大寫組成的字串
    ^[a-z]+$  //符合由26個英文字母的小寫組成的字串
    ^[A-Za-z0-9]+$   //符合由數字和26個英文字母組成的字串
    ^w+$  //符合由數字、26個英文字母或是下劃線組成的字串
    註解:最基本也是最常用的一些表達式


APACHE伺服器出現No input file specified.的完美解決專案

啟用REWRITE的偽靜態功能的時候,首頁可以訪問,而訪問內頁的時候,就提示:“No input file specified.”

原因在於使用的PHP是fast_cgi模式,而在某些情況下,不能正確識別path_info所造成的錯誤,Wordpress的偽靜態也有一樣的問題。

WordPress程式預設的.htaccess裡面的規則:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L]

“No input file specified.”,是沒有得到有效的檔案路徑造成的。

修改偽靜態規則,如下:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?/$1 [L]

有沒有發現不同?

其實就是在正則結果“/$1”前面多加了一個“?”號,問題也就隨之解決了。