2013-04-04 79 views
0
protected static function generateString ($length = 50, $Password){ 
     $characters = $Password; 
     $string = ''; 

     for ($p = 0; $p < $length; $p++) { 
      $string .= $characters[mt_rand(0, strlen($characters))]; // Error Line 
     } 
     echo $string; 
    } 

您好。我建立一個驗證類,以及上面的功能是給我一些悲痛,我不斷收到帶有錯誤消息:未初始化的字符串偏移量

注意:未初始化字符串偏移量:16

回聲是有測試目的。

我打電話用我的功能:

public static function Compile($Password, $Length){ 
     self::generateString($Length,$Password); 
    } 

Auth::Compile('testi ngpassword', 10); 

當我運行我的劇本,有時產生沒有錯誤消息;但是當運行多次(3-7)時,我會收到上面指定的消息?有時這個通知顯示了兩行?

那麼爲什麼錯誤信息在重複運行時會隨機生成?當指定的參數沒有改變?

+1

字符串是從零開始的,它們的長度從1開始......所以最後一個字符會給出錯誤的偏移 – 2013-04-04 03:13:45

回答

2

考慮這條線:

strlen($characters) 

如果字符串長度爲16,你做一個隨機數選擇0 16之間,你給它來選擇最後後的指數,這是沒有的選項。您需要製作它

strlen($characters) - 1 

由於索引實際上從0開始;

+0

'[mt_rand(0,strlen($ characters)-1)];'仍然顯示錯誤消息 – 2013-04-04 03:10:15

+0

當你print_r $字符時,它會產生一些東西,對吧?如果字符的長度爲零,上述語句也會發生。 – 2013-04-04 03:12:23

+0

請不要考慮最後一條評論,我正在編輯錯誤的代碼片段,而不是我正在編寫的代碼。它已經工作了,所以爲了將來的參考,'strlen'在被調用時在長度上附加+1?因此告訴索引從-1開始? – 2013-04-04 03:15:23