Problemas para Subir Imagen con file_field_tag()

56 views
Skip to first unread message

Grequis xavier Perez Fortuna

unread,
Nov 15, 2009, 5:58:31 PM11/15/09
to KumbiaPHP Framework
Estoy tratando de subir unas imgenes al servidor, con Load::lib
("upload"). estoy trabajando en la version 1.0. Todo aparentemente
esta correcto, cuando inserto o actualizo una imagen en este campo lo
hace bien, y lo registra en la DB correctamente en el campo
correspondiente (solo escribe el nombre del archivo en la base de
Datos), incluso no despliega ningun mensaje del Kumbia_exception, o
alguna advertencia. El problema es que la image o archivo nunca fue
subido a la directorio correspondiente (img/upload), la busque en la
carpeta de img completa e incluso en la carpeta temp, file. y el
archivo no aparese en el servidor,

Tambien lo intente con Upload::file_in_path($name, $path,
$new_name=null) y file($name, $new_name=null) obteniendo el mismo
resultado.

Aqui esta resumido como lo implemente:
5.
6. <?php
7. echo file_field_tag('programas.ubicacion_imagen');
8. ?>
.....
10. <?php
11. Load::lib("upload");
12. Upload::image(file_field_tag('programas.ubicacion_imagen'));
13. ?>

Por favor espero respuestas.

Deivinson Tejeda

unread,
Nov 15, 2009, 8:53:21 PM11/15/09
to kum...@googlegroups.com
No entiendo esa implementacion que dices... Creo que es mejor que coloques como utilizas el helpers y como intentas subirlo al servidor, es decir el código del controller donde intentas subir el archivo...

2009/11/15 Grequis xavier Perez Fortuna <gremy...@gmail.com>



--
Deivinson Tejeda (CaChi)
KumbiaPHP Framework Developer
http://www.kumbiaphp.com

Grequis xavier Perez Fortuna

unread,
Nov 15, 2009, 9:38:57 PM11/15/09
to KumbiaPHP Framework
El formulario esta funcional, actualiza guarda, elimmina, pero el
campo de ubicacion de la imagen no sube el archivo, aunque guarda el
nombre (NO LA RUTA) en la BD, y no me devuelme ninguna exception.
Ahora, la libreria upload solo la llamo en el view, que es le
fragmento de codigo publicado. Si lo estoy usando mal porfavor
Corregirme.

De todos modos, aqui esta lo trabajado en el patron :

VIEW: create.phtml y edit.phtml
<?php View::content(); ?>
<?php echo form_tag('programas/create/') ?>

<h2>Agregar...</h2>
<table>
<tr>
<td>Nombre:</td>
<td><?php echo text_field_tag(array('programas.nombre')) ?></
td>
</tr>
<tr>
......
</tr>
<tr>
<td>Logo: </td>
<td><?php echo file_field_tag('programas.ubicacion_imagen'); ?
>
</td>
</tr>
<tr>
<td><?php
Load::lib("upload");
Upload::image(file_field_tag('programas.ubicacion_imagen'));
echo submit_tag('Agregar') ?></td>
</tr>
</table>

En el Controller; Cargo el modelo programas y tengo los metodos index
(), page():"para paginar", y los metodos CRUD, aqui no hago referencia
a la libreria o a la clase Upload.

On 15 nov, 20:53, Deivinson Tejeda <deivinsontej...@kumbiaphp.com>
wrote:
> No entiendo esa implementacion que dices... Creo que es mejor que coloques
> como utilizas el helpers y como intentas subirlo al servidor, es decir el
> código del controller donde intentas subir el archivo...
>
> 2009/11/15 Grequis xavier Perez Fortuna <gremyqui...@gmail.com>

Deivinson Tejeda

unread,
Nov 16, 2009, 7:19:50 AM11/16/09
to kum...@googlegroups.com
Pues si lo usas mal, el componente Upload se utiliza en el Controller en la vista solo el Helpers...

Te dejo el enlace de la documentación...

http://wiki.kumbiaphp.com/KumbiaPHP_Framework_Versi%C3%B3n_1.0_Spirit#Upload

2009/11/16 Grequis xavier Perez Fortuna <gremy...@gmail.com>

Micky

unread,
Nov 16, 2009, 11:49:00 AM11/16/09
to KumbiaPHP Framework
Primero, lo estas haciendo mal como dice cachi, en la vista solo va el
file_field_tag y en el controller va el Upload::image, y segundo la
librería tiene que devolver solo el nombre del archivo, no la ruta,
porque la ruta puede variar dependiendo de como lo quiera implementar
el programador.

Grequis xavier Perez Fortuna

unread,
Nov 16, 2009, 11:54:49 AM11/16/09
to KumbiaPHP Framework
Lo he utilizado en el controller, y aun no he podido subir la imagen.
hay algun enlase de algun ejemplo que pueda ver.

Hice unos cambios en el View y en el controller pero no me funciona no
sube la imagen ni lanza ningun mensaje.
Los cambios son:
en el view cambie <?php echo file_field_tag
('programas.ubicacion_imagen'); ?> por la etiqueta <input type="file"
name="imagen" id="imagen">

(Vi que alguien lo uso asi, y probe si de esta foma subia la imagen,
auque sin guardar en la base de Datos. No se como obtener el valor del
file_field_tag() desde el controller)

En el Controller lo he utilizado asi:

if($this->has_post('programas')){

$programas = new Programas($this->post('programas'));

Load::lib('upload');
$archivo=$_FILES['imagen']['name'];
Upload::image($archivo);

if(!$programas->update()){
Flash::error('No se pudo actualizar correctamente');
//se hacen persistente los datos en el formulario
$this->programas = $this->post('programas');
} else {
Router::route_to('action: index', 'id: 1');
}
}

probe Imprimiendo la variable $archivo y esta almacena el nombre de la
imagen que quiero subir. pero sigue pasando el mismo problema

On 16 nov, 07:19, Deivinson Tejeda <deivinsontej...@kumbiaphp.com>
wrote:
> Pues si lo usas mal, el componente Upload se utiliza en el Controller en la
> vista solo el Helpers...
>
> Te dejo el enlace de la documentación...
>
> http://wiki.kumbiaphp.com/KumbiaPHP_Framework_Versi%C3%B3n_1.0_Spirit...
>
> 2009/11/16 Grequis xavier Perez Fortuna <gremyqui...@gmail.com>

Nohemi Rojas

unread,
Nov 16, 2009, 12:10:32 PM11/16/09
to kum...@googlegroups.com
Hola.... a mi no me funciono la lib UPLOAD.. pero este codigo si..


En la vista

<?php echo form_tag('datos/cargar/', 'name: cargar', "enctype: multipart/form-data")?>
<input type="file" name="archivo" id="archivo">
<?php echo submit_tag('Aceptar')?>
   
<?php echo end_form_tag()?>


En el controlador

        $archivo = 'archivo';
        $name = $_FILES[$archivo]['name'];
        $tmp = $_FILES[$archivo]['tmp_name'];
        $size = $_FILES[$archivo]['size'];
        $type = $_FILES[$archivo]['type'];
        $error = $_FILES[$archivo]['error'];
        $dir = APP_PATH . 'temp/';

        $ruta = $dir . $name;

        if ($error > 0) {
            switch ($error) {
                case 1 :
                    {
                        Flash :: error("Ha sobrepasado el limite de carga");
                  
                    }
            }
        }
            if (is_uploaded_file($tmp)) {
                if (!move_uploaded_file($tmp, $ruta))
                    Flash :: error("Error al mover el archivo: $name");
                else {
                    Flash :: success("Archivo: $name cargado correctamente");                    
                }
            } else{
                Flash :: error("Error al cargar el archivo: $name");

Suerte..
--
Nohemi Rojas

Deivinson Tejeda

unread,
Nov 16, 2009, 12:13:40 PM11/16/09
to kum...@googlegroups.com
Si no les ha funcionado es porque lo han utilizado mal :-)

Recuerden que para subir archivo lo mas importante es indicar el enctype si no lo indican nadie se entera que en el POST viaja un archivo...

Ese mismo código que coloca @nohemi es lo que hace por nosotros el Upload y como le dije ha sido probado y hay usuarios que lo utilizan...

Éxitos!

2009/11/17 Nohemi Rojas <noh...@gmail.com>

Grequis xavier Perez Fortuna

unread,
Nov 16, 2009, 1:36:01 PM11/16/09
to KumbiaPHP Framework
Entonces, como se usa correctamente en el controller?

On 16 nov, 12:13, Deivinson Tejeda <deivinsontej...@kumbiaphp.com>
wrote:
> Si no les ha funcionado es porque lo han utilizado mal :-)
>
> Recuerden que para subir archivo lo mas importante es indicar el
> *enctype*si no lo indican nadie se entera que en el POST viaja un
> archivo...
>
> Ese mismo código que coloca @nohemi es lo que hace por nosotros el Upload y
> como le dije ha sido probado y hay usuarios que lo utilizan...
>
> Éxitos!
>
> 2009/11/17 Nohemi Rojas <nohe...@gmail.com>

Deivinson Tejeda

unread,
Nov 16, 2009, 1:46:21 PM11/16/09
to kum...@googlegroups.com
Te he pasado el enlace en varios mail atrás...

http://wiki.kumbiaphp.com/KumbiaPHP_Framework_Versi%C3%B3n_1.0_Spirit#Upload

Éxitos!

2009/11/17 Grequis xavier Perez Fortuna <gremy...@gmail.com>

Grequis xavier Perez Fortuna

unread,
Nov 16, 2009, 1:58:00 PM11/16/09
to KumbiaPHP Framework
No hay un ejemplo aparte de la descripcion o documentacion.

On 16 nov, 13:46, Deivinson Tejeda <deivinsontej...@kumbiaphp.com>
wrote:
> Te he pasado el enlace en varios mail atrás...
>
> http://wiki.kumbiaphp.com/KumbiaPHP_Framework_Versi%C3%B3n_1.0_Spirit...
>
> Éxitos!
>
> 2009/11/17 Grequis xavier Perez Fortuna <gremyqui...@gmail.com>

Fidel Oyarzo

unread,
Nov 16, 2009, 2:38:23 PM11/16/09
to kum...@googlegroups.com
1 ° debes indicarle el nombre del campo file,
ej:

archivo

2° el formulario debe tener "enctype: multipart/form-data"


ahora en controller.

public function subirImagen(){
        Load::lib("upload");
         Upload::img('archivo');
}


PD:  copy paste de la wiki

Upload::img($name, $new_name=null)

Sube una imagen al directorio público "img/upload".

$name (string): nombre del archivo en el formulario

$new_name (string): indica el nuevo nombre para el archivo

Upload::img('archivo');

Micky

unread,
Nov 16, 2009, 11:05:16 PM11/16/09
to KumbiaPHP Framework
Grequis he visto que intentas hacer esto

<?php echo file_field_tag('programas.ubicacion_imagen'); ?>

pues deberia ser asi

<?php echo file_field_tag('ubicacion_imagen'); ?>

y en el controller cargas la libreria y luego haces uso de ella.

Load::lib("upload");
Upload::image("ubicacion_imagen");

PD: Si lo nombras en al vista como programas.ubicacion_imagen el
framework lo traduce en un codigo como este programas
[ubicacion_imagen] y en el controller no vas a poder hacer esto:

Upload::image("programas[ubicacion_imagen]");

PD2: Acuerdate del enctype del form, si sigues teniendo problemas te
sugiero que pegues el codigo de la vista y del controlador en
http://kumbia.pastebin.com/

Grequis xavier Perez Fortuna

unread,
Nov 17, 2009, 3:23:57 PM11/17/09
to KumbiaPHP Framework
Hey Muchas Gracias Fidel y Micky Todo funciona correctamente. Los
detalles estaban en php echo file_field_tag
('programas.ubicacion_imagen');

<?php echo file_field_tag('programas.ubicacion_imagen'); ?> En el
controller no lo reconocia asi que cambie 'imagen' por
'programas.ubicacion_imagen'. entonses papa poder insertar el nombre
de la imagen en la base de datos lo hice con un hidden_field_tag
('programas.ubicacion_imagen') y lo llene con java escript.

Copio los detalles del codigo por si alguien tiene problemas en el
futuro:

En el formulario use JS para poder insertar la imagen en la BD con la
function InsertarImagen(from, nombre).
(VIEW):
...
<script language="JavaScript">
function InsertarImagen(form, nombre){
if(nombre!='') {
var imagen = nombre;
form.programas_ubicacion_imagen.value = imagen;
}
}
</script>
................
<tr>
<td>Logo: </td>
<td>
<?php echo file_field_tag('imagen') ?>
<?= hidden_field_tag('programas.ubicacion_imagen') //para insertalo
en la DB, si es nesesario?>
</td>
...........

<td><?php echo submit_tag('Actualizar',"onClick: InsertarImagen
(this.form, this.form.imagen.value)") ?></td>
..........

En el CONTROLLER:

Load::lib('upload');
Upload::image('imagen');

Deivinson Tejeda

unread,
Nov 17, 2009, 3:41:08 PM11/17/09
to kum...@googlegroups.com
ummmmm, Bueno el javascript me gusta muy poco, mejor sin esa opción del js...

Éxitos!

2009/11/18 Grequis xavier Perez Fortuna <gremy...@gmail.com>

Chichon

unread,
Nov 19, 2009, 5:40:47 PM11/19/09
to KumbiaPHP Framework
No es necesario usar JS para eso, lo más sencillo es asignar el nombre
de la imagen a la variable correspondiente antes de grabar los datos
en la DB. La idea sería la siguiente:

Load::lib("upload");
Upload::image("ubicacion_imagen");
$programas->ubicacion_imagen = $_FILES['ubicacion_imagen']['name'];
if($programas->save()){
// Accion después de grabar
}

sefsinalas

unread,
Nov 30, 2009, 11:07:28 PM11/30/09
to KumbiaPHP Framework
Esto que ha puesto chichon es la posta...yo recien lo descubro y me es
muy util!

Micky

unread,
Dec 1, 2009, 5:52:30 PM12/1/09
to KumbiaPHP Framework
Eso que puso Chichon es innecesario, porque como ya lo dije antes la
libreria Upload devuelve el nombre del archivo que se ha subido, asi
que lo que ha escrito chichon se podria reducir a lo siguiente:

De esto:

Load::lib("upload");
Upload::image("ubicacion_imagen");
$programas->ubicacion_imagen = $_FILES['ubicacion_imagen']['name'];
if($programas->save()){
// Accion después de grabar

a esto:

Load::lib("upload");
$programas->ubicacion_imagen = Upload::image("ubicacion_imagen");

Deivinson Tejeda

unread,
Dec 1, 2009, 9:04:40 PM12/1/09
to kum...@googlegroups.com
Micky esa mejora no la tienen los usuarios eso saldra para el Beta2 de KumbiaPHP, asi que tienen razón por el problema que se la ha presentado ;-)

2009/12/1 Micky <william...@gmail.com>
Reply all
Reply to author
Forward
0 new messages