Problema al subir una imagen

subir.php
<HTML>
<HEAD>
 <TITLE>Subir imagen</TITLE>
</HEAD>
<BODY>
<form method="post" action="guardar.php" enctype="multipart/form-data">
Nombre: <input type="text" name="nombre" maxlength="100"><br>
Imagen: <input type="file" name="imagen" size="40"><br>
<p><input type="submit" name="submit" value="Subir">
</form>
</BODY>
</HTML>
guardar.php
<html>
// Configurar las dos lineas siguientes
<body>
<?
$ruta = "imagenes/{$_FILES['imagen'][name]}"
if(!copy($_FILES['imagen']['tmp_name'], $ruta)) {    //AQUI ME MUESTRA ERROR
echo "error al copiar el archivo";
} else {
echo "archivo subido con exito";
mysql_connect("localhost","root","");
mysql_select_db(" basededatos1");
$nombre = $_POST["nombre"];
mysql_query("INSERT INTO imagenes (nombre,ruta) VALUES ('$nombre','$ruta')");
echo "Se ha subido la imagen a la base de datos, puedes verla pulsando <a href='ver.php?nombre=$nombre'>aquí</a>";
}
?>
</body>
</html>
¿Si alguien puede ayudarme gracias
y la otra pregunta es tengo que crear una carpeta llamada imágenes? Y donde tengo que ubicarla o no es necesario

1 Respuesta

Respuesta
1
Cambia el copy por move_uploaded_file, el código debería funcionar con eso.
Quiero que cada usuario suba su foto y que luego se pueda visualizar cada foto en el perfil como en el facebook, tengo entendido que se almacena en la base de datos la ruta de la carpeta donde se almacenan las fotos, como hago para programar esto en php.
Alguno idea gracias
la ruta va ser siempre la misma, o será algo variable? el comando sql sería algo como
INSERT INTO perfil(imagen) VALUES('$ruta');
o bien
UPDATE perfil SET imagen = '$ruta' WHERE id = $id;
Tengo este código
subir.php
<html>
<form name = "form1" action = "modificacion.php" enctype="multipart/form-data" method ="post"
<b>Enviar un nuevo archivo: </b>
           <br>
           <input name="userfile" type="file">
           <br>
<html>
modificacion.php
<?
$tipo = $HTTP_POST_FILES['userfile']['type'];
//El tamaño en bytes del fichero recibido.
$tamano = $HTTP_POST_FILES['userfile']['size'];
// El nombre original del fichero en la máquina del usuario lo obtenemos con:
// $HTTP_POST_FILES['userfile']['name'];
// Pero en este caso crearemos un nuevo nombre para evitar reemplazar alguno si ya existe.
//obtenermos la extension del archivo.
if ($HTTP_POST_FILES['userfile']['type']=="image/gif"){ $formato="GIF"; }
if ($HTTP_POST_FILES['userfile']['type']=="image/jpeg"){ $formato="JPG"; }
$nombrefoto = date('YmdHis').substr(md5(rand()), 0, 5).'.'.$formato;
//comprobamos si las características del archivo son las autorizadas.
if (!((strpos($tipo, "gif") || strpos($tipo, "jpeg")) && ($tamano < 100000))) {
echo 'La extensión o el tamaño de los archivos no es correcta.';
echo '<br /><br />Se permiten archivos .gif o .jpg de un tamaño de 100 Kb máximo.';
}else{
//El nombre del fichero temporal que se utiliza para almacenar en el servidor el archivo recibido.
if (move_uploaded_file($HTTP_POST_FILES['userfile']['tmp_name'], 'files/'.$nombrefoto)){
echo "El archivo ha sido cargado correctamente.<br />";
}else{
echo "Ocurrió algún error al subir el fichero. No pudo guardarse.";
}
}
$ssql = "UPDATE t_nombre tabla
SET  nombrefoto = '$nombrefoto
WHERE noIdentidad = '{$_POST['noIdentidad']}
me muestra un error con
if (move_uploaded_file($HTTP_POST_FILES['userfile']['tmp_name'], 'files/'.$nombrefoto)
Dice que no se puede guardar
Ya lo modifique la ruta de la carpeta estaba mal ahora si carga la foto en la carpeta y el nombre en la base de datos
pero ahora mi problema es
1 como hago para mostar mi imagen es decir que se muestre la imagen en el navegador teniendo el nombre
2. Si un usuario quiere cambiar su foto no me modifica el nombre aunque si me sube la nueva imagen a la carpeta files
gracias po r tu ayuda
Con respecto al error, es por que tienes que usar $_FILES, no $HTTP_... (ya que este método fue sacado en PHP 4.1)
  la imagen, tiene que hacer un echo "<img src=\"[ruta]/$imagen\" />" donde $imagen es el nombre que guardaste en la base de datos.
Lo programe de la siguiente manera
<?$nombrefoto=$registro['nombrefoto'];
        echo "<img src=\"../paginasphp/files/$nombrefoto\" />"  ?>pero esto no funciona
la imagen se llama silueta
<?$nombrefoto=$registro['nombrefoto'];
        echo "<img src=\"../paginasphp/files/silueta.gif\" />" ?> Si la coloco literal si me aparece
pero como esta en una variable $nombrefoto no me sirve la ruta no se si es porque en una base de datos en el campo nombrefoto se guarda como silueta y no silueta.gif y con la respectiva extensión no se como se guarda
gracias po r tu ayuda
Revisaste el código fuetne, ¿para ver que es lo que esta imprimiendo?
Echo $nombrefoto imprime silueta no silueta.gif, esto es el nombre de la foto que yo le puse por defecto es decir si el usuario no ha subido ninguna foto
Al subir una foto se crea un nombre aleatorio con el código de arriba pero se guarda ese nombre sin la extensión no se si por eso no me sirve al imprimir la ruta
no se por que
Gracias por tu ayuda
Lo que necesitas es que imprima silueta.gif, si es nua imagen por default en la base de datos, guarda ese valor.
Cuando sube la imagen, si le estas dando la extensión
$nombrefoto = date('YmdHis').substr(md5(rand()), 0, 5).'.'.$formato;
Con lo cual debería funcionar, lo que no sé, es si la ruta es la correcta.
Cuando guardo
$nombrefoto = date('YmdHis').substr(md5(rand()), 0, 5).'.'.$formato;
se guarda el nombre de la foto pero sin extencion
la ruta esta bien si escribo  echo "<img src=\"../paginasphp/files/silueta.gif\" />"
Efectivamente me muestra la imagen
No se si haiga alguna forma de guardar la ruta entera no solo el nombre y como se podría hacer eso
gracias
Intenta reemplazar todos los $HTTP_POST_FILES por $FILES, como ya te he dicho con anterioridad, ee método dejó de usarse con php 4.1 (al rededor de 2003) y no está inclupido en php 5 (si tu servidor corre php 4.1 o mayor, ese método no será reconocido).

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas