Trabajar con file Upload

Heyy kike ke tal, cuanto tiempo sin molestarte
Bno fijate que quiero importar un archivo excel con el fileupload, tengo un pequeño formulario, un codigo, cuando lo ejecuto, resulta que me marca un error HTTP 404 como si el archivo al que lo redirecciono no existiera o estuviera mal direccionado.
Ah y tengo la duda de si el código php va en la misma página donde pongo mi formulario o a la página que quiero que maneje la información que voy a importar
espero haber sido explicita
checa mi form
<form id="form1" name="form1" method="post" action="importar.php enctype="multipart/form-data"">
<p align="center">
        <label>
        <input type="file" name="examinar" id="examinar" value="" />
        </label>
      </p>
<p align="center">
        <label>
        <input type="submit" name="importar" id="importar" value="Importar" />
        </label>
      </p>
</form>

checa mi pequeño codigo
<?php
$nombre_archivo = $_FILES['examinar']['name'];
$directorio_definitivo = "c:AppServ/www/chavela/";//aki no se ke onda
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $directorio_definitivo.$nombre_archivo)){//aki tampoco
       echo "El archivo ha sido cargado correctamente.";
    }else{
       echo "Ocurrió algún error al subir el fichero. No pudo guardarse.";
    }
?>

1 respuesta

Respuesta
1
De momento el problema es que tienes varios errores:
- action="importar.php enctype="multipart/form-data"" Como ves las comillas están mal colocadas.
"c:AppServ/www/chavela/" Este es el directorio donde lo vas a guardar, le falta "/" después de "c:", o sea sería así:"c:/AppServ/www/chavela/"
- $_FILES['userfile']['tmp_name'], "userfile" no esta definido, tienes que usar "examinar" que es el nombre que has puesto al control: $_FILES['examinar']['tmp_name']
El funcionamiento es el siguiente:
En el <input type"file" name="examinar"> cargas el nombre de un fichero que se guarda en un array $_FILES, este tiene los siguientes valores:
$_FILES['examinar']['name']: nombre del archivo, sin la ruta
$_FILES['examinar']['type']: tipo MIME del archivo cargado
$_FILES['examinar']['size']: tamaño del archivo cargado
$_FILES['examinar']['tmp_name']: nombre del archivo cargado en el directorio temporal del servidor, el fichero se sube con este nombre para evitar sobreescrituras, después usas la función move_uploaded_file para decirle donde guardarlo y con que nuevo nombre.
$_FILES['examinar']['error']: código de error, con las siguientes posibilidades:
0: No hay error
1: El fichero es más grande de lo permitido por PHP
2: El fichero es más grande de lo permitido en tu formulario (puedes especificar un tamaño máximo para cargar archivos)
3: Solo una parte se ha subido
4: No se ha subido
Debes acostumbrarte a usar mensajes de alerta para validar tu código y ver donde están los errores, si entra en un if, etc.
Por ejemplo en el head crea la función:

<script type="text/javascript">function alerta(texto){window.alert(texto);}</script>

Y luego en el código puedes ir usándola en distintas partes para ver si entra en los condicionales o que valores estás creando:
Echo "
<script>alerta('He entrado en el if')</script>
"
después de un "if" para comprobar que la condición se cumple, o:
$texto= "Nombre ".$nombre_archivo. "copiar a " . $directorio_definitivo.$nombre_archivo. "y error ".$_FILES['examinar']['error'];
echo "
<script>alerta('$texto')</script>
"

Para comprobar que entra, coge el nombre del fichero y el destino es correcto o saber que error se genera.
Este código te funcionará y ves como aplicar lo que te comento:

<head>
<script type="text/javascript">
function alerta(texto)
{
window.alert(texto);
}
</script>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento sin título</title>
</head>
<body>
<form id="form1" name="form1" method="post" enctype="multipart/form-data" >
<p align="center"> 
        <label> 
        <input type="file" name="examinar" /> 
        </label> 
      </p>
<p align="center"> 
        <label> 
        <input type="submit" name="importar" id="importar" value="Importar" /> 
        </label> 
      </p>
</form> 
<?php 
$importar=$_REQUEST[importar];
if (isset($importar))
{
$nombre_archivo = $_FILES['examinar']['name']; 
$directorio_definitivo = "c:/wamp/www/php/pruebas/upload/";//eliges directorio de destino
$mueve = $_FILES['examinar']['tmp_name'];
$destino = $directorio_definitivo.$nombre_archivo;
$texto= "Nombre ".$nombre_archivo. "copia a " . $destino. "y error ".$_FILES['examinar']['error'];
echo "
<script>alerta('$texto')</script>
";
if (move_uploaded_file($mueve, $destino)){//mueve el fichero temporal al destino y nombre elegidos
       echo "El archivo ha sido cargado correctamente."; 
    }else{ 
       echo "Ocurrió algún error al subir el fichero. No pudo guardarse."; 
    } 
}
else
Echo "No entra en el if" //solo para que sepas si hay algún error y no entra, luego lo borras
?>
</body>

Respecto a dónde colocar el código, donde quieras, si el código lo pones en la página donde vas a usar el fichero hay que recibir los datos de $_FILES en una variable de sesión, pasándolos por url, etc. por lo que ya no puedes usar el $FILES sin más si no pasas su valor a "importar.php".
Yo lo dejaría en la misma página que el form, y luego ya manejaría el fichero desde otra página porque no necesitas andar pasando parámetros, pero claro, no sé que quieres hacer. Si al subirlo al servidor es necesario abrirlo inmediatamente en lugar de seleccionarlo desde otro form, pues te merece más la pena pasar los valores a "importar.php".
En algún lugar de todoexpertos tienes una respuesta mía a alguien bastante reciente de como pasar los valores por sesión o por url.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas