Foros del Web » Programando para Internet » PHP »

PHP OO Error al subir archivos a una base de datos

Estas en el tema de Error al subir archivos a una base de datos en el foro de PHP en Foros del Web. Hola buenas, estoy haciendo una aplicación que permite gestionar las entrevistas de un departamento de recursos humanos, estoy intentando adjuntar los curriculum en la base ...
  #1 (permalink)  
Antiguo 05/04/2013, 04:40
 
Fecha de Ingreso: abril-2013
Ubicación: Madrid
Mensajes: 12
Antigüedad: 11 años
Puntos: 0
Error al subir archivos a una base de datos

Hola buenas, estoy haciendo una aplicación que permite gestionar las entrevistas de un departamento de recursos humanos, estoy intentando adjuntar los curriculum en la base de datos para que se pueda acceder.

Tengo el siguiente codigo, pero no se que me falla en el php que no recoge el archivo, haber si alguien me puede echar una mano muchas gracias :)


esta es la parte del formulario, todo funciona menos la ultima parte de adjuntar el cv

Código:
			<!-- formulario para introducir datos de la entrevista -->
			<form method="POST" action="../php/form_añadir_datos.php" enctype="multipart/form-data">
			
				<label for="nombre">Nombre</label>
				<input id="nombre" name="nombre" type="text"  /> <br>
				
				<label for="apellido1">1º Apellido</label>
				<input id="apellido1" name="apellido1" type="text" /> <br>
				
				<label for="apellido2">2º Apellido</label>
				<input id="apellido2" name="apellido2" type="text" /> <br>

				
				<label for="departamento">Departamento</label>
				<select id="departamento" name="departamento">
				<optgroup label="Departamento">
						<option>Comercio</option>
						<option selected="selected">I+D</option>
						<option>IBI</option>
					</optgroup>
				</select> <br />
				
				<label for="fecha1">Fecha primera entrevista (AA/MM/DD)</label>
				<input id="fecha1" name="fecha1" type="text" /> <br>
				
				<label for="entrevistador1">entrevistador 1ª entrevista</label>
				<input id="entrevistador1" name="entrevistador1" type="text" /> <br>
				
				<label for="decision1">Decision 1ª entrevista</label>
				<input id="decision1" name="decision1" type="text" /> <br>
				
				<!-- esto es la informacion y el archivo que se va a adjuntar -->
				
				<label for="titulo">Nombre CV</label>
				<input type="text" id="titulo" name="titulo"/>
				
				<label for="archivo" >CV</label>
				<input type="file" id="archivo" name="archivo"/><br>
				
				<textarea id="descripcion" name="descripcion" cols="50" rows="5"></textarea><br>
				
				<!-- ---------------------------------------------------------- -->

				<input type="submit" value="Guardar" />
			</form>

y esta es la parte de php, lo que pasa, es que en la primefa verificacion, en el if, sizeof($_FILES)==0 esto es true, por lo que entra en el bucle, pero no se por que no pasa el archivo de una pagina a otra.

Código:

	
	//insertar archivo a la base de datos-----------------------------------------------------
	//ESTA FUNCION LA USAREMOS PARA OBTENER EL TAMAÑO DE NUESTRO ARCHIVO
	function filesize_format($bytes, $format = '', $force = ''){
		$bytes=(float)$bytes;
		if ($bytes< 1024){
			$numero=number_format($bytes, 0, '.', ',');
			return array($numero,"B");
		}
		if ($bytes< 1048576){
			$numero=number_format($bytes/1024, 2, '.', ',');
			return array($numero,"KBs");
		}
		if ($bytes>= 1048576){
			$numero=number_format($bytes/1048576, 2, '.', ',');
			return array($numero,"MB");
		}
	}
	//VERIFICAMOS QUE SE SELECCIONO ALGUN ARCHIVO
	if(sizeof($_FILES)==0){
		echo "No se puede subir el archivo";
		exit();
	}
	// EN ESTA VARIABLE ALMACENAMOS EL NOMBRE TEMPORAL QU SE LE ASIGNO ESTE NOMBRE ES GENERADO POR EL SERVIDOR
	// ASI QUE SI NUESTRO ARCHIVO SE LLAMA foto.jpg el tmp_name no sera foto.jpg sino un nombre como SI12349712983.tmp por decir un <span id="IL_AD12" class="IL_AD">ejemplo</span>
	$archivo=$_FILES["archivo"]["tmp_name"];
	//Definimos un array para almacenar el tamaño del archivo
	$tamanio=array();
	//OBTENEMOS EL TAMAÑO DEL ARCHIVO
	$tamanio=$_FILES["archivo"]["size"];
	//OBTENEMOS EL TIPO MIME DEL ARCHIVO
	$tipo=$_FILES["archivo"]["type"];
	//OBTENEMOS EL NOMBRE REAL DEL ARCHIVO AQUI SI SERIA foto.jpg
	$nombre_archivo=$_FILES["archivo"]["name"];
	//PARA HACERNOS LA VIDA MAS FACIL EXTRAEMOS LOS DATOS DEL REQUEST
	extract($_REQUEST);
	//VERIFICAMOS DE NUEVO QUE SE SELECCIONO ALGUN ARCHIVO
	if ( $archivo != "none" ){
		//ABRIMOS EL ARCHIVO EN MODO SOLO LECTURA
		// VERIFICAMOS EL TAÑANO DEL ARCHIVO
		$fp = fopen($archivo, "rb");
		//LEEMOS EL CONTENIDO DEL ARCHIVO
		$contenido = fread($fp, $tamanio);
		//CON LA FUNCION addslashes AGREGAMOS UN \ A CADA COMILLA SIMPLE ' PORQUE DE OTRA MANERA
		//NOS MARCARIA ERROR A LA HORA DE REALIZAR EL INSERT EN NUESTRA TABLA
		$contenido = addslashes($contenido);
		//CERRAMOS EL ARCHIVO
		fclose($fp);
		// VERIFICAMOS EL TAÑANO DEL ARCHIVO
		if ($tamanio <1048576){
			//HACEMOS LA CONVERSION PARA PODER GUARDAR SI EL TAMAÑO ESTA EN b ó MB
			$tamanio=filesize_format($tamanio);
		}
	
		//CREAMOS NUESTRO INSERT
		$qry = "INSERT INTO tbl_documentos ( titulo,nombre_archivo, descripcion, contenido, tamanio,tamanio_unidad, tipo ) VALUES
		('$titulo','$nombre_archivo', '$descripcion','$contenido','{$tamanio[0]}','{$tamanio[1]}', '$tipo')";
		//EJECUTAMOS LA CONSULTA
		mysql_query($qry) or die("Query: $qry <br />Error: ".mysql_error());
		//CERRAMOS LA CONEXION
		mysql_close();
		//NOTIFICAMOS AL USUARIO QUE EL ARCHVO SE HA ENVIADO O REDIRIGIMOS A OTRO LADO ETC.
	}else{
		echo "No fue posible subir el archivo";
		echo 'Subir Otro Archivo<br /> ';
	}
	
	//------------------------------------------------------------------------------------------
  #2 (permalink)  
Antiguo 05/04/2013, 04:59
Avatar de zalito12  
Fecha de Ingreso: noviembre-2011
Ubicación: Coruña, España
Mensajes: 430
Antigüedad: 12 años, 5 meses
Puntos: 67
Respuesta: Error al subir archivos a una base de datos

Bueno, yo cuanod he hecho algo de este tipo no he utilizado la variable global $_FILES pero se trata de un array, como todas las globales, lo primero prueba a hacer var_dump($_FILES) y prueba con count() en lugar de sizeof(), aunque debería ser igual.
  #3 (permalink)  
Antiguo 05/04/2013, 05:02
 
Fecha de Ingreso: abril-2013
Ubicación: Madrid
Mensajes: 12
Antigüedad: 11 años
Puntos: 0
Respuesta: Error al subir archivos a una base de datos

Muchas gracias por la respuesta tan rapida, no se que he echo, mal, pero e borrado el codigo y lo e puesto de nuevo y ahora si que funciona, lo dejo abierto por si me tengo algun problema al descargar el archivo.
  #4 (permalink)  
Antiguo 05/04/2013, 05:05
 
Fecha de Ingreso: abril-2013
Ubicación: Sevilla
Mensajes: 23
Antigüedad: 11 años
Puntos: 0
Respuesta: Error al subir archivos a una base de datos

te aconsejo que vayas siguiendo el rastro del archivo, haz un print_r($_FILES), echo en las diferentes variables que generas, a ver si se van guardando correctamente.
En algun punto veras que algo no esta actuando como querrias, ahi estara el problema.
  #5 (permalink)  
Antiguo 07/04/2013, 07:22
 
Fecha de Ingreso: abril-2013
Ubicación: Madrid
Mensajes: 12
Antigüedad: 11 años
Puntos: 0
Respuesta: Error al subir archivos a una base de datos

Muchas gracias, es lo que estoy haciendo ahora, para saber si todo se guarda bien,
mañana os pondre el resto del codigo, por que no consigo recuperar el archivo, solo consigo la información(Nombre descripcion etc), pero no lo consigo descargar.

Etiquetas: formulario, mysql, select, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:48.