Foros del Web » Programando para Internet » PHP »

subiendo imagen al servidor

Estas en el tema de subiendo imagen al servidor en el foro de PHP en Foros del Web. Hola, estoy tratando de subir una imagen al servidor mediante un formulario, en la base de datos, mysql, sólo guardo la ruta. He seguido un ...
  #1 (permalink)  
Antiguo 25/05/2005, 02:30
 
Fecha de Ingreso: enero-2003
Mensajes: 330
Antigüedad: 14 años, 10 meses
Puntos: 0
Pregunta subiendo imagen al servidor

Hola, estoy tratando de subir una imagen al servidor mediante un formulario, en la base de datos, mysql, sólo guardo la ruta. He seguido un código que puso hace un par de meses un miembro de este foro pero algo debo estar haciendo mal ya que luego no consigo mostrar la imagen, supongo que no estoy subiendo la imagen al servidor. Os pongo el codigo a ver si me podeis echar una mano:

Este es el formulario que tengo:

<form action="add.php" method="post" enctype="multipart/form-data" name="insertar">

Titulo de Noticia:
<input name="titulo" type="text" size="50">
Noticia:
<textarea name="noticia" cols="50" rows="7"></textarea>
<input type="hidden" name="MAX_FILE_SIZE" value="50000">
<input type="file" name="imagen"></p>
<input type="submit" name="Submit" value="Poner noticia">
<input type="reset" value="Restablecer">

</form>


En add.php:

Código PHP:
include ("conexion.php");
$titulo=$_POST['titulo'];
$noticia=$_POST['noticia'];
$fecha=date('Y-m-d');
$imagen=$_FILES['imagen']['name'];
    
$unico time();
$directorio $_SERVER['DOCUMENT_ROOT'].'/images/uploads/'.$unico
$imagen_path $directorio.$imagen;

mysql_query("INSERT INTO noticias (titulo,noticia,imagen,fecha) VALUES ('$titulo','$noticia','$imagen_path','$fecha')"); 
Un saludo
  #2 (permalink)  
Antiguo 25/05/2005, 02:42
 
Fecha de Ingreso: enero-2004
Ubicación: Salto
Mensajes: 484
Antigüedad: 13 años, 11 meses
Puntos: 2
El problema q tienes es q en ningún momento subes la img, es decir no usas move_uploaded_file().
Agrega esto antes de ingresar los datos a la DB
Código PHP:
if (move_uploaded_file($imagen['tmp_name'],$imagen_path)){echo "El archivo ha sido cargado correctamente.<br>/n"
    }else{echo 
"Ocurrió algún error al subir el fichero. No pudo guardarse.<br>/n";
       
$img1['userfile']['error'];}
//luego el query para ingresar los datos a la DB 
Saludos cuidate
__________________
Dios dira que esto no es justo, pero lo sera...
  #3 (permalink)  
Antiguo 25/05/2005, 09:34
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
En realidad la "imagen" (archivo) sube .. pero al directorio temporal donde PHP almacena los archivos que subes por HTTP (vía tu fomulario y campo file) (php.ini: upload_tmp_dir) de ahí .. si los quieres realmente tendrás que moverlo a donde corresponde como ya te han indicado.

Un saludo,
  #4 (permalink)  
Antiguo 25/05/2005, 10:40
 
Fecha de Ingreso: enero-2003
Mensajes: 330
Antigüedad: 14 años, 10 meses
Puntos: 0
Sigo sin conseguir subir la imagen. Esto es lo que tengo ahora:
Código PHP:
include ("conexion.php");
$titulo=$_POST['titulo'];
$noticia=$_POST['noticia'];
$fecha=date('Y-m-d');
$imagen=$_FILES['imagen']['name'];
    
$unico time();
$directorio $_SERVER['DOCUMENT_ROOT'].'/images/uploads/'.$unico;
$imagen_path $directorio.$imagen;
    
if (
move_uploaded_file($imagen['tmp_name'],$imagen_path))
{
echo 
"El archivo ha sido cargado correctamente.<br>/n";
}
else{
echo 
"Ocurrió algún error al subir el fichero. No pudo guardarse.<br>/n";
$img1['userfile']['error'];
}
    
mysql_query("INSERT INTO noticias (titulo,noticia,imagen,fecha) VALUES ('$titulo','$noticia','$imagen_path','$fecha')"); 
Me sale el error: Ocurrió algún error al subir el fichero. No pudo guardarse.
/n

Además hay algunas cosillas que no termino de entender, he mirado en php.net como funciona move_uploaded_file y no entiendo muy bien de donde sale $imagen['tmp_name']

Y tampoco entiendo que hace esto: $img1['userfile']['error'];
  #5 (permalink)  
Antiguo 25/05/2005, 10:50
 
Fecha de Ingreso: noviembre-2004
Mensajes: 176
Antigüedad: 13 años, 1 mes
Puntos: 0
yo tengo el siguiente script para subir imagenes

Código:
if ( is_uploaded_file($_FILES['txtImagen']['tmp_name']) ) {

        $array = explode(".",$_FILES['txtImagen']['name']);
        $extension = $array[1];

        $imagen = "img/".$codigo.".".$extension;

        $directorio = '../'.$imagen;
        @unlink("../$codigo.*");
        copy($HTTP_POST_FILES['txtImagen']['tmp_name'], $directorio);

}
.. espero te sirva !!
  #6 (permalink)  
Antiguo 25/05/2005, 11:13
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Iniciado por bulldog
Sigo sin conseguir subir la imagen. Esto es lo que tengo ahora:
Código PHP:
include ("conexion.php");
$titulo=$_POST['titulo'];
$noticia=$_POST['noticia'];
$fecha=date('Y-m-d');
$imagen=$_FILES['imagen']['name'];
    
$unico time();
$directorio $_SERVER['DOCUMENT_ROOT'].'/images/uploads/'.$unico;
$imagen_path $directorio.$imagen;
    
if (
move_uploaded_file($imagen['tmp_name'],$imagen_path))
{
echo 
"El archivo ha sido cargado correctamente.<br>/n";
}
else{
echo 
"Ocurrió algún error al subir el fichero. No pudo guardarse.<br>/n";
$img1['userfile']['error'];
}
    
mysql_query("INSERT INTO noticias (titulo,noticia,imagen,fecha) VALUES ('$titulo','$noticia','$imagen_path','$fecha')"); 
Me sale el error: Ocurrió algún error al subir el fichero. No pudo guardarse.
/n

Además hay algunas cosillas que no termino de entender, he mirado en php.net como funciona move_uploaded_file y no entiendo muy bien de donde sale $imagen['tmp_name']

Y tampoco entiendo que hace esto: $img1['userfile']['error'];
Usa directamente:
$_FILES['imagen']

Con sus:
$_FILES['imagen']['name'] <-- el nombre del archivo (da igual si es una imagen o no ..)
$_FILES['imagen']['tmp_name'] <-- nombre y ruta que PHP le dá temporalmente a todo archivo que sube por HTTP
$_FILES['imagen']['size'] <--- el tamaño del archivo que subió.
$_FILES['imagen']['type'] <--- El formato MIME del archivo

SI te fijas en el código que pusistes .. hace una asignación tipo:
$imagen=$_FILES['imagen']['name'];

pero luego no puedes hacer $imagen['size'] por ejemplo .. no corresponde .. en su defecto:
$imagen=$_FILES['imagen'];

para luego poder usar:
$imagen['name'] <-- será su nombre ..
Etc...

Un saludo,
  #7 (permalink)  
Antiguo 26/05/2005, 16:46
 
Fecha de Ingreso: enero-2003
Mensajes: 330
Antigüedad: 14 años, 10 meses
Puntos: 0
Bueno, ya consigo que la imagen suba al servidor pero ahora no consigo mostrarla, no se si es que no estoy guardando bien la ruta o es que algo mal en la pag. donde tengo que mostrarla.

en add.php:
Código PHP:
include ("conexion.php");
$titulo=$_POST['titulo'];
$noticia=$_POST['noticia'];
$fecha=date('Y-m-d');
    
$unico time();
$directorio $_SERVER['DOCUMENT_ROOT'].'/images/uploads/'.$unico;
$imagen_path $directorio.$_FILES['imagen']['name'];
move_uploaded_file($_FILES['imagen']['tmp_name'],$imagen_path);
    
mysql_query("INSERT INTO noticias (titulo,noticia,imagen,fecha) VALUES ('$titulo','$noticia','$imagen_path','$fecha')"); 
y la pagina donde muestro los resultados pongo:

Código PHP:
echo "
        <table width=\"95%\" border=\"0\" bgcolor=\"#D6DFD7\">
          <tr> 
            <td width=\"20%\" bgcolor=\"#8CA6B5\">$dia/$mes/$ano</td>
            <td width=\"60%\" bgcolor=\"#8CA6B5\">"
.$fila["titulo"]."</td>
          </tr>
          <tr>
              <td><img src=\""
.$fila["imagen"]."\"></td>
              <td colspan=\"2\">"
.$fila["noticia"]."</td>
          </tr>
        </table>
        <br>"

Aquí no se ve la imagen: la ruta que me aparece de la imagen es: http://www.dominio.com/home/content/...08mosquito.gif

Sutituyendo x por los nombres reales.

Que estoy haciendo mal?

Cuando consiga mostrar la imagen ya os molestaré cuando intente redimensionarla a un tamaño determinado.

Saludos y gracias
  #8 (permalink)  
Antiguo 27/05/2005, 02:19
 
Fecha de Ingreso: enero-2003
Mensajes: 330
Antigüedad: 14 años, 10 meses
Puntos: 0
arriba...
  #9 (permalink)  
Antiguo 27/05/2005, 08:19
 
Fecha de Ingreso: enero-2004
Ubicación: Salto
Mensajes: 484
Antigüedad: 13 años, 11 meses
Puntos: 2
dimensionar.php
Código PHP:
<?php
foreach($_POST as $nombre_campo => $valor){$asignacion "\$".$nombre_campo."='".addslashes($valor)."';";
    eval(
$asignacion);}
foreach(
$_GET as $nombre_campo => $valor){$asignacion "\$".$nombre_campo."='".$valor."';";
    eval(
$asignacion);}
foreach(
$_FILES as $nombre_campo => $valor){$asignacion "\$".$nombre_campo."='".$valor."';";
    eval(
$asignacion);}
?>
<?
$imagen 
$_GET["imagen"];
$ancho $_GET["ancho"];
$alto $_GET["alto"];
$calidad $_GET["calidad"]; //de 1 a 100
if(substr($imagen,-3) == "jpg" || substr($imagen,-3) == "JPG" || substr($imagen,-4) == "JPEG"){
$src_img imagecreatefromjpeg($imagen);
}
elseif(
substr($imagen,-3) == "gif" || substr($imagen,-3) == "GIF"){
$src_img imagecreatefromgif($imagen);
}else{
header("Location: $imagen");
}
$ancho_original imagesx($src_img);
$alto_original imagesy($src_img);
if(!
$alto){
$alto = ($ancho $ancho_original) * $alto_original;
}
if(!
ancho){
$ancho = ($alto $alto_original) * $ancho_original;
}
if(!
$calidad){
$calidad 80;
}
$dst_img imagecreatetruecolor($ancho,$alto);
imagecopyresampled($dst_img$src_img,0,0,0,0,$ancho,$alto,$ancho_original,$alto_original);
header("Content-Type: image/jpeg");
imagejpeg($dst_img,'',$calidad);
imagedestroy($src_img);
imagedestroy($dst_img);
?>
luego la llamas así:
Código PHP:
echo "<img src=\"http://www.tusitio.com/dimensionar.php?imagen=".$fila['imagen']."&ancho=100&calidad=80\" width=\"100\" border=\"0\" align=\"left\">"
Donde la variable ancho=100 es el ancho del thumbail q quieres crear. $fila['imagen'] es el path donde está alojada la img. La variable $calidad es relativa, si quieres la mandas, sino no...
El problema q debes de tener es mal el path, create un archivo, cualquier nombre, y guardalo en la carpeta donde tienes las imagenes. En el mismo pon esto:
Código PHP:
<?
echo $_SERVER['SCRIPT_FILENAME'];
?>
Este te dará el path completo hacia el script, por ende, sacándole el nombre del script, te quedaría el path completo hacia la img.
Incluso podrías usar dirname() y guardar en la DB solo el nombre de la img más el time() y luego con $_SERVER['SCRIPT_FILENAME'] y dirname, crear el path hacia la img.

script_en_la_carpeta_img.php
Código PHP:
$path $_SERVER['SCRIPT_FILENAME'];
dirname($path);
echo 
$path
Recuerda q este script debe estar en la carpeta donde guardas las imgs y deberás llamarlo cuando lo uses, puedes hacerlo con un include(). Usa JPG no GIF
Saludos cuidate
__________________
Dios dira que esto no es justo, pero lo sera...
  #10 (permalink)  
Antiguo 28/05/2005, 17:18
 
Fecha de Ingreso: enero-2003
Mensajes: 330
Antigüedad: 14 años, 10 meses
Puntos: 0
Hola Sebtev, lo primero darte las gracias por todo lo que me estás ayudando.

Sigo sin poder ver las imagenes, aunque es verdad que parece que ya se redimensiona ya que el espacio reservado para las imagenes se ajusta bien.

Mira, te pongo la web sobre la que estoy trabajando aqui ahi se puede ver la ruta que guardo en la base de datos para cada imagen.

Las imagenes veo que se suben correctamente en el directorio /images/uploads.

he creado el fichero ruta.php en images/uploads:
Código PHP:
echo $_SERVER['SCRIPT_FILENAME']; 
y me devuelve: /cgi-bin/php

Ahh, y esta parte no la he implementado (si no es imprescindible prefiero no hacerlo de momento para no complicarme más):
script_en_la_carpeta_img.php
Código PHP:
$path $_SERVER['SCRIPT_FILENAME'];
dirname($path);
echo 
$path
Que puede estar fallando??

Saludos
  #11 (permalink)  
Antiguo 28/05/2005, 17:51
 
Fecha de Ingreso: enero-2004
Ubicación: Salto
Mensajes: 484
Antigüedad: 13 años, 11 meses
Puntos: 2
Tienes un error en dimensionar.php en la línea 33.
Código PHP:
Parse errorparse errorunexpected T_STRING in /home/content/j/o/n/jonparr/html/dimensionar.php on line 33 
Muy probable q se deba a alguna comilla sin cerrar. Luego de copiar y pegar del foro, debes revisar q no se separen palabras, q no aparezcan espacios en blanco o retornos no deseados. En cuanto al cgi-bin/php, quiere decir q el server está corriendo PHP como CGI y no como módulo. $_SERVER['SCRIPT_FILENAME'] debería de funcionar, creo q no funciona la variable $_SERVER['DOCUMENT_ROOT'].
Postea si no encuentras el error en dimensionar.php, ya q yo lo tengo q modificar cada vez q lo posteo y... como siempre... me olvido de guardarlo, así q no tengo ni idea cual es la línea 33.
Saludos cuidate.
__________________
Dios dira que esto no es justo, pero lo sera...
  #12 (permalink)  
Antiguo 28/05/2005, 18:20
 
Fecha de Ingreso: enero-2003
Mensajes: 330
Antigüedad: 14 años, 10 meses
Puntos: 0
Funcionando!!!!!!!!

El fallo, estaba en esta linea que habia varios espacios:
[PHP]
imagecopyresampled($dst_img,$src_img,0,0,0,0,$anch o,$alto,$ancho_original,$alto_original);
[/PHP

Y parece que si funciona $_SERVER['DOCUMENT_ROOT'] porque la tengo en add.php.

Bueno, de momento ya está ;)

Muchiiiiiiiiiiisimas gracias.
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 01:34.