Php 我无法验证文件输入
我目前正在用PHPYII框架做一个项目。我有一个表单,要求用户上传一个文件。在注册过程中,用户上传了文件,但是,当用户提交表单时,在文件输入上总是检测到表单为空,就像表单上没有附件一样。代码如下: 型号-候选人简历:Php 我无法验证文件输入,php,forms,validation,file-upload,yii,Php,Forms,Validation,File Upload,Yii,我目前正在用PHPYII框架做一个项目。我有一个表单,要求用户上传一个文件。在注册过程中,用户上传了文件,但是,当用户提交表单时,在文件输入上总是检测到表单为空,就像表单上没有附件一样。代码如下: 型号-候选人简历: return array( array('resume_file','file','types'=>'doc,docx,pdf', 'allowEmpty'=>true, 'safe'=>true, 'on'=>'regis
return array(
array('resume_file','file','types'=>'doc,docx,pdf', 'allowEmpty'=>true, 'safe'=>true, 'on'=>'register'),
);
模特-候选人:
return array(
array('can_email,name,repeat_can_email, can_password,repeat_can_password','required', 'on'=>'simplereg'),
);
public function actionCreate()
{
$model = new Candidate();
$model->setScenario('simplereg');
$resume = new CandidateResume();
$resume->setScenario('register');
// Uncomment the following line if AJAX validation is needed
//$this->performAjaxValidation($model);
if(isset($_POST['Candidate'], $_POST['CandidateResume']))
{
$_POST['CandidateResume']['resume_file'] = $resume->resume_file;
$model->attributes = $_POST['Candidate'];
$resume->attributes = $_POST['CandidateResume'];
$uploadedFile = CUploadedFile::getInstance($resume,'resume_file');
if($resume->validate() && $model->validate())
{
$model->save();
if(!empty($uploadedFile)) // check if uploaded file is set or not
{
$saved = $uploadedFile->saveAs(Yii::app()->params['RESUME_PATH'].$model->can_id.'_'.$uploadedFile->getName());
$resume->resume_file = Yii::app()->params['RESUME_DIR'].$model->can_id.'_'.$uploadedFile->getName();
$resume->resume_send_ip = Yii::app()->request->userHostAddress;
}
$resume->save();
}
}
$this->render('create',array('model'=>$model, 'resume'=>$resume));
}
视图:
财务总监-候选人:
return array(
array('can_email,name,repeat_can_email, can_password,repeat_can_password','required', 'on'=>'simplereg'),
);
public function actionCreate()
{
$model = new Candidate();
$model->setScenario('simplereg');
$resume = new CandidateResume();
$resume->setScenario('register');
// Uncomment the following line if AJAX validation is needed
//$this->performAjaxValidation($model);
if(isset($_POST['Candidate'], $_POST['CandidateResume']))
{
$_POST['CandidateResume']['resume_file'] = $resume->resume_file;
$model->attributes = $_POST['Candidate'];
$resume->attributes = $_POST['CandidateResume'];
$uploadedFile = CUploadedFile::getInstance($resume,'resume_file');
if($resume->validate() && $model->validate())
{
$model->save();
if(!empty($uploadedFile)) // check if uploaded file is set or not
{
$saved = $uploadedFile->saveAs(Yii::app()->params['RESUME_PATH'].$model->can_id.'_'.$uploadedFile->getName());
$resume->resume_file = Yii::app()->params['RESUME_DIR'].$model->can_id.'_'.$uploadedFile->getName();
$resume->resume_send_ip = Yii::app()->request->userHostAddress;
}
$resume->save();
}
}
$this->render('create',array('model'=>$model, 'resume'=>$resume));
}
如果我删除控制器上的验证:
if($resume->validate() && $model->validate())
可以保存表单数据,并将附件正确放置在文件夹中。但是,我需要对表单进行验证。所以我不能跳过这部分
有什么我遗漏的吗?我已经检查了很多次,并为解决方案做了研究。所有这些都提供了类似的解决方案,因此我无法解决问题。有人能帮我吗?提前谢谢。您没有设置
恢复\u文件
属性。它来自$\u文件
而不是$\u帖子
$resume->attributes = $_POST['CandidateResume'];
$uploadedFile = CUploadedFile::getInstance($resume,'resume_file');
$resume->resume_file = $uploadedFile; //add this line
我应该在哪里添加行?验证之前或之后?
validate()之前
初始化$uploadedFile之后的方法
谢谢!它起作用了!!我与这个错误斗争了这么久,却找不到答案,结果就是因为那条线。我能知道为什么我们需要在确认前完成任务吗?我认为它应该能够自己检测代码>不要设置resume\u文件
属性。转换为超全局数组$\u文件
不在$\u GET
,$\u POST
etcI意识到另一件事是,如果我使用:$model->save(),表单数据保存在数据库中;我需要在括号内加上false。为什么?有区别吗?