我正在研究激活新成员的方法。我得到以下错误:将数组数据分配给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