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;


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

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

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