2013年5月26日 星期日

PHP Notice: undefined index 完美解决方法

分享:網站上 http://shuai.be/archives/php-undefined-index/
平時用$_GET[xx] 取得參數值時,如果之前不加判斷在未傳進參數時會出現這樣的警告:

PHP Notice: undefined index xxx

雖然可以通過設置錯誤顯示方式來隱藏這個提示,但是這樣也有隱患,就是在伺服器的日誌中會記錄這些提示,導致日誌檔異常龐大!
下面是引用網上流行的解決方法:


首先,這個不是錯誤,是warning。所以如果伺服器不能改,每個變數使用前應當先定義。

方法1:伺服器配置修改
修改php.ini設定檔,error_reporting = E_ALL & ~E_NOTICE

方法2:對變數進行初始化,規範書寫(比較煩瑣,因為有大量的變數)。但還沒有找到好定義方法,望大家指教

方法3:每個檔頭部加上:error_reporting(0); 如果不行,只有打開php.ini,找到display_errors,設置為display_errors = Off。以後任何錯誤都不會提示。
方法4 :做判斷:isset($_GET["page"]) if-else判斷

或者加上'@'表示這行如果有錯誤或是警告不要輸出
如:@$page=$_GET["page"]

方法5file1.php檔把$xx變數付一個值,用post 傳遞給file2.php
如果file2.php沒有$xx的定義,而直接使用$yy=$xx; 系統就會報錯:"undifined variaable $xx", 如果file2.php的檔開始用$xx="";定義,那麼file1.php$xx值就傳不過來了!

file2.php裡可以這樣
if(!isset($xx)) $xx="";

Jones認為,這些方法都不太方便。你不妨這樣解決:

定義一個函數:

function _get($str){

    $val = !empty($_GET[$str]) ? $_GET[$str] : null;

    return $val;

}

然後在用的時候,直接用 _get('str') 代替 $_GET['str'] 就行啦~

是不是很方便?


另外一篇文章:http://allenplay.blogspot.tw/2011/04/undefined-index-php.html


在撰PHP程式語言時,若出現下列錯訊息,其解方法。
Undefined index: 變數名稱 in 位址 on line xx

由於這只是一個警告訊息,為了安全起見,讓它不顯示的兩種方法

方法一

在$_GET['變數']前加入@

@$_GET['test']



方法二

isset($_GET['變數'])前加入一個if判斷

if(isset($_GET['變數']))
{
   ....
}

2013年5月17日 星期五

登入 WHM 產生Login Invalid

我的主機在美國,我都是透過主機商提供的WHM/cPanel來管理主機,然而,有時候就是會發生無法登入的情形。

我可以很明確的確定我輸入的帳號密碼是正確的,然而,還是無法登入,訊息是:The Login is Invalid,登入無效!

後來在網路上爬文,搜尋資料,終於找到解決方法了。

原來,WHM/cPanel對於登入有安全性管控,如果有異常的登入就會將IP記錄下來,不讓你再登入了!

解決方法就是進入到資料庫中將相關的紀錄刪除,就可以了。

如下:

使用SSH登入到主機,我是用PUTTY

#mysql

mysql>use cphulkd;

mysql>show tables;

mysql>delete from brutes;

mysql>exit;


就這樣,重新登入就可以了。

2012年12月22日 星期六

Foreign Key 外來鍵

FOREIGN KEY
突然看這個字:FOREIGN外國人,我以前對於這個單字,考試拼字母老是出錯,剛剛仔細看一眼:將字根拆開:FORE-IGN, FORE是向前的意思, IGN,IN中間插一個G。圖像記憶法:一個外國人向前衝去在IN中插入一個G!
這樣,FOREIGN,外國人。
哈哈,記起來了。

回來看 FOREIGN KEY。外來鍵


SQL FOREIGN KEY Constraint 

SQL外來鍵的限制

FOREIGN KEY是一個資料表指向另一個資料表的主關鍵欄位(PRIMARY KEY)的鍵欄位。
也就是說這個鍵欄位的值其實是來自另一個資料表的關鍵欄位。特別是主關鍵欄位(PRIMARY KEY)。
舉例來說吧:
以下這兩個資料表:Persons 以及Orders
The "Persons" table:
P_Id LastName FirstName Address City
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger

The "Orders" table:
O_Id OrderNo P_Id
1 77895 3
2 44678 3
3 22456 2
4 24562 1

請注意看清楚:"Orders"資料表中的欄位-"P_Id"裡面的資料值,可以指向"Persons"資料表中欄位"P_Id"。
在"Persons"資料表中的"P_ID"這個欄位是"Persons"資料表的主關鍵欄位(PRIMARY KEY)。
在"Orders"資料表中的"P_ID"這個欄位是"Orders"資料表中的外來關鍵欄位(FOREIGN KEY)。
而 FOREIGN KEY constraint ,外來關鍵欄位限制,即是用來保護預防破壞了這個兩個資料表之間的正確連結。
FOREIGN KEY CONSTRAINT同時也防止不正確的資料被新增進去這個欄位,因為這個欄位裡面的資料值必須是指向另一個資料表關鍵欄位的資料值才可以。

SQL筆記

我以前的工作曾經一段時間負責資料庫程式以及資料庫管理。基本的資料庫管理語言就是SQL。
過去使用SQL管理過大型資料庫,算是有點心得與實務經驗。
現在應用在網站應用程式,算駕輕就熟。
我也曾經起過寫一本SQL教學的書籍,但一直就只是想,沒有行動。
我就努力著記錄一些過去學習SQL點滴,或許有機會就可以集結出書囉。
呵呵,想想就好。

使用MySQL Workbench可以做很多事情,其中一個就是ER Modeling

Model就是模型。ER Model,Entity-Relationship Modeling,也就是Entity實體或物件,及其關係Relationship之間關係,所繪出的關係圖。也就是一個模型,資料實體與其關係的模型圖。

ER Modeling是資料庫分析中一個非常重要的概念,所有做資料庫程式設計者一定要會的概念,這樣資料處理才不會有問題。

現代的資料庫系統基本上都是關連式資料庫系統,MySQL、Access、MS SQL、Oracle等等都是。

SQL是一個標準。定義資料庫以及處理資料庫裡面資料的標準語言。

SQL發音:See-Quol(我自己發明的標音法,算了,我自己知道就好了。)









網站設計筆記

本網誌記錄網站設計的一些內容筆記。
網站設計需要整合很多工具與概念。
我畢業自淡江電子計算機科學學系,算是科班出身,但我們那個年代,網路還只是剛開始,相關的技術都是出社會以後陸續接觸學習,但因為基礎的關係,所以學習起來還算快的。
網站的建立與設計,牽涉的範圍真的很廣泛。
網站的目地是甚麼?銷售網頁、電子購物、廣告、社群經營、互動、教學、客戶服務、網站應用程式、......
需要整合的人才,程式設計師、資料庫管理師、網頁美編、文字編輯、多媒體製作等等。
這裡將記錄我對網站系統重新學習與複習,還有教學使用的一些資料。

如何判斷現在FORM是在 insert mode? 還是 update mode?

只要用  if (empty({primary_key})) 就可以知道是否為新增模式了。 如果 {promary_key} 是空白的,那麼就是在新增模式;反之,就是更新模式。 以上。