Yii Framework Forum: Error con metodo getHasError de CUploadedFile - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Error con metodo getHasError de CUploadedFile Rate Topic: -----

#1 User is offline   Jack Fiallos 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 256
  • Joined: 15-October 09
  • Location:Mexico

Posted 10 February 2010 - 12:40 PM

Anteriormente publique una manera de poder subir archivos a una BD.. ahora continuando con las validaciones de esa forma obtengo un error con el metodo getHasError..

$model=$this->loadModel();
if(isset($_POST['ModelArchivo']))
{
	$model->attributes=$_POST['ModelArchivo'];
	$archivo = CUploadedFile::getInstance($model,'content');
	
	if(!$archivo->getHasError()){
		$model->nombre = $archivo->name;
		$model->extension = $archivo->type;
		
		$model->content = file_get_contents($archivo->getTempName());
		if($model->save()) {
		     $result = "<h3>Archivo guardado OK...</h3>";
		}
	}
	else
		$result = "<h3>Error: ".$archivo->getError()."</h3>";
}

$this->render('update',array(
	'model'=>$model,
	'result'=> (isset($_POST['ModelArchivo'])) ? $result : '',
));


Lo que trato de hacer es que sin haber seleccionado algun archivo, simplemente presiono sobre el boton de upload.. El codigo esta preparado para que si llegase a ocurrir un error, muestre el mensaje "ERROR", pero al parecer algo malo esta ocurriendo sobre la linea if(!$archivo->getHasError()){ generando en php un error "Call to a member function getHasError() on a non-object".. La pregunta es si tengo algo malo en el acceso a getHasError() ?
Celestic Dev Team
Yii Open Source Project Manager
0

#2 User is offline   transistor 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 79
  • Joined: 05-June 09
  • Location:Mexico

Posted 10 February 2010 - 03:20 PM

Hola
No me parece que tengas un error en tu código.
Lo que sucede es que no hay archivo o archivo esta vacío, por eso dice que has llamado la función en un non-object.
Lo que yo hago es esto:
	$file = CUploadedFile::getInstance($model, 'logo');
	if ($file != '') {
		if(!$file->getHasError()){

Aprovecho para mencionarte que tengas cuidado en el Update, porque si el usuario no manda un archivo, lo mas probable es que al actualizar tu registro, se borre el nombre del archivo anterior.
Para solucionar esto, hice esto en mi actionUpdate:
	public function actionUpdate()
	{
		$model=$this->loadModel();
		if ($model->logo != '') {
			// si no esta vacío, cargo el nombre del archivo anterior
			$logo = $model->logo;
		}
		if(isset($_POST['clientes']))
		{
			$model->attributes=$_POST['clientes'];
			$file = CUploadedFile::getInstance($model, 'logo');
			if ($file != '') {
			    if(!$file->getHasError()){
			    	// proceso mi archivo
			} else {
				// si file esta vacío (es decir, no se subió archivo), entonces usa el nombre anterior
				$model->logo = $logo;
			}
			// etcetera, etcetera
	}

Espero te sea útil.
Saludos.
0

#3 User is offline   Jack Fiallos 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 256
  • Joined: 15-October 09
  • Location:Mexico

Posted 10 February 2010 - 03:45 PM

Luego de mi post estuve intentando resolver mi problema, así como lo comentas de que el error se provoca porque no se envió ningun archivo, hice algunos cambios.. y la línea que provocaba el error la modifique.. quedando de la siguiente manera..

if((isset($_POST['ModelArchivo'])) && (!empty($_FILES['ModelArchivo']['tmp_name']['content'])))


Con esto valido de que se haya enviado un archivo y para asegurarme de que nunca ocurra algun error cuando no se sube el archivo, agregue la linea que me dijiste..

if((isset($_POST['ModelArchivo']))&&(!empty($_FILES['ModelArchivo']['tmp_name']['content']))&&($Archivo != ''))


Woo.. muchas gracias por la respuesta..
Celestic Dev Team
Yii Open Source Project Manager
0

#4 User is offline   Siobeth 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 27
  • Joined: 14-June 13

Posted 22 August 2013 - 10:41 AM

Hola Jack.. Buenos Dias!1 al principio de este post inidca que anteriormente subistes de Cómo subir archivos en la BD.. Donde puedo encontrar ese post que busque y busque y nada.. Estoy usando el CUploadedFile y me guarda el nombre del archivo en la BD más no me guarda la dirección ni el archivo en la carpeta que le estoy diciendo.. te agradeceria tu ayuda Gracias!!!
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users