我正在研究激活新成員的方法。我得到以下錯誤:將數組數據分配給Yii中的模型屬性
未定義偏移:1
在其上包含了以下的線發生該錯誤:
$模型 - >用戶名= $數據[1];
有沒有Yii的方法使這項工作更好?
我是一個php,oop和Yii的新手,所以任何協助將不勝感激!
該方法基本上接受來自用戶的獲取請求。 get運行此方法幷包含用於驗證其帳戶的密鑰。驗證存儲在與密鑰名稱相同的文件中。文件內部是一個管道分隔線,其中包含日期,用戶名,電子郵件,鹽和密碼哈希。讀取文件並在管道中分解數據後,我需要將數據分配給模型,然後將其保存到數據庫。
...
$model=new Users;
$model->activation_key=$_GET['key'];
$path_to_validation_files = Yii::app()->basePath."/data/new_member_validations";
$validation_file = $path_to_validation_files . "/".$model->activation_key.".dat";
if(is_readable($validation_file) && !empty($validation_file))
{
if($fp = fopen($validation_file, 'r'))
{
while(!feof($fp))
{
$line = fread($fp, filesize($validation_file));
}
fclose($fp);
$data = explode('|', $line);
if(!empty($data)){
$model->username=$data[1];
$model->email=$data[2];
$model->salt=$data[3];
$model->password=$data[4];
} else {
throw new CHttpException(500,'Validation file contained no data.');
}
} else {
throw new CHttpException(500,'Cannot open validation file.');
}
} else {
throw new CHttpException(404,'Validation file not found, not readable, or empty.');
}
...
您確定您確實從$ line中的文件中獲得了該行嗎?你可以在fclose($ fp)之後用if(empty($ line))死掉('not getting line')來檢查它。這只是爲了確保,因爲$ line似乎有問題。此外,while循環是多餘的,因爲fread將讀取與指定的字節數相同的數量,即整個文件。 – Abhijit
'print_r($ data)'的輸出是什麼?你確定在第二個陣列位置總是有東西嗎? – ldg
@ldg - print_r是數組([0] =>),它解釋了錯誤,但爲什麼它是空白的另一個問題:) – Mark