Foros del Web » Programando para Internet » PHP »

Imágenes, php y mysql -AYUDA-

Estas en el tema de Imágenes, php y mysql -AYUDA- en el foro de PHP en Foros del Web. Tengo un formulario desde donde se pueden subir imágenes a mi servidor, pero también tengo dos dudas: 1-¿Como hacer para que esas imágenes me las ...
  #1 (permalink)  
Antiguo 05/03/2003, 21:07
Avatar de festeiro  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago
Mensajes: 48
Antigüedad: 21 años, 5 meses
Puntos: 0
Imágenes, php y mysql -AYUDA-

Tengo un formulario desde donde se pueden subir imágenes a mi servidor, pero también tengo dos dudas:
1-¿Como hacer para que esas imágenes me las guarde en un archivo concreto? De momento me las guarda en la ¿raíz? del sitio, en el directorio html de mi sitio en el servidor, tal que www.misitio.com/imagensubida.jpg.
2- Hasta ahora, a las fotos que yo subía manualmente a un archivo /imagenes, les ponía esa misma ruta en la BD en mysql para poder visionarlas los usuarios. ¿Como tengo que hacer ahora que permito subir imágens desde un formulario?¿Como hago para que ese mismo formulario me envíe a la BD la referencia de esa imagen? Me explico, cuando se busca la imagen en el disco duro del usuario, la ruta que sale es C:/misdocumentos/fotomia.jpg. Sirve para subir la imagen, ¿pero como hacer para que en la BD me guarde el registro con la ruta válida para el servidor, o sea <a href=http://misitio.com/imagenes/fotomia.jpg?
Gracias de antemano.
  #2 (permalink)  
Antiguo 05/03/2003, 21:43
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
1.- indica la ruta en tu funcion copy() o move_uploaded_file() que uses .. tipo:

copy($origen,"./imagenes/".$imagen)
(ahora no recuerdo el orden de origen y destino .. pero es para q veas el ejemplo ... Si usas rutas absolutas tipo /home/sitiotal/www/html/imagenes .. mejor todavía .. )

Cita:
..."que yo subía manualmente a un archivo /imagenes"...
Diras directorio ?

2.- ... Cuando haces el Upload del archivo tienes a tu disposición varias propiedades del archivo que estas subiendo .. Una es el propio nombre (mame) .. otra el tamaño (size) .. tambien el tipo o formato MIME que es (type) y no se si alguna mas ..

Tan solo tienes que guardate esos datos en tu BD haciendo una simple consulta INSERT o UPDATE segun corresponda .. Junto con el "name" del archivo puedes guardar la ruta donde lo ubiques en tu Servidor (directorio concreto) o solo el nombre y la ruta se la das cuando presentes ese archivo ...

Un saludo,
  #3 (permalink)  
Antiguo 06/03/2003, 07:15
Avatar de festeiro  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago
Mensajes: 48
Antigüedad: 21 años, 5 meses
Puntos: 0
Viva la vida

El primer problema de archivo donde guardar las imágenes está solucionado, pero sigo con dudas.

move_uploaded_file($HTTP_POST_FILES['userfile']['tmp_name'], $HTTP_POST_FILES['userfile']["./foticos/".'name']);
echo "SU ARCHIVO HA SIDO COPIADO";

Así no me funciona, ¿qué pasa?. La verdad es que la solución que encontré fue poner el script en el propio directorio "foticos" donde quiero estén las imágenes. No ser porque no me va con tu consejo, supongo será algo de la 'userfile', que es el name del input del formulario.

Voy a por la segunda cuestión de la inclusión de la ruta en mysql.

Gracias y que los bytes te acompañen.
  #4 (permalink)  
Antiguo 06/03/2003, 07:35
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Tienes que diferenciar lo que son parámetros de una función y lo que son por ejemplo en este caso "indices" de un array!!!! ..

Si visitas el manual de PHP oficial . y ves la sintax de move_uploaded_file veras su sintax .. Tambien si te preguntas que obtienes de hacer: $HTTP_POST_FILES ['userfile']['name'] .. verias q es el nombre de tu fichero q has subido .... (haciendo un echo por ejemplo a eso)

La ruta y nombre de tu archivo -destino- que vas a mover desde el directorio temporal donde suben tus archivos via PHP sería:

"./foticos/".$HTTP_POST_FILES['userfile']['name']

(como veras .. se concatena el nombre del directorio con el nombre del archivo q subío q lo tienes en el array $HTTP_POST_FILES de ese campo file y en ese parámetro 'name'

Código PHP:
move_uploaded_file($HTTP_POST_FILES['userfile']['t
mp_name'
], "./foticos/".$HTTP_POST_FILES['userfile']['name']); 
Un saludo,
  #5 (permalink)  
Antiguo 06/03/2003, 12:57
Avatar de festeiro  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago
Mensajes: 48
Antigüedad: 21 años, 5 meses
Puntos: 0
Camarada Cluster...no tengo palabras, pero ¡ole tus huevos!.
El inglés no es lo mio, y aunque hago pinitos en php.net tengo dificultades para la comprensión general de los textos.
Sobre todo, gracias mil, razón tenías. El parámetro que me indicaste lo puse antes de los indices del array (¿voy bien?), y ahora funciona de la manera correcta.
Voy a seguir con la introducción de la ruta en la BD.
Gracias de nuevo.

NUNCA MAIS (grito ciudadano en Galicia contra las autoridades por la catástrofe del petrolero "(des)PRESTIGE".

PD: En Santiago de Compostela tienes una cama para cuando quieras. Saludos afectuosos.

Saude, terra e liberdade. Que los bytes te acompañen.
  #6 (permalink)  
Antiguo 07/03/2003, 10:46
Avatar de festeiro  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago
Mensajes: 48
Antigüedad: 21 años, 5 meses
Puntos: 0
Estoy ya con el segundo paso, y de momento no lo doy.
Si le asigno un name al input del formulario donde sale la ruta de la imagen, me guarda el C:/escritorio/misimagenes/foto1.jpg
y en la BD quiero que la ruta sea http://midominio.com/foticos/foto1.jpg

Ayuda para conseguirlo, por favor

Gracias mil
NUNCA MAIS
  #7 (permalink)  
Antiguo 07/03/2003, 10:56
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Usa:
Código PHP:
$nombre_archivo_solo=basename($URI); 
Siendo $URI ese path (ruta) q lo obtienes con tus $_FILE['archivo']['name']

Ademas .. si la ruta es fija .. sería recomendable que te guardes solo el nombre del URL de la imagen .. y la ruta se la añadas a la hora de presentar esa imgagen tipo:

echo "<a href="\./foticos/".$row['imagen'].""\></a>";

Un saludo,
  #8 (permalink)  
Antiguo 07/03/2003, 11:18
Avatar de festeiro  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago
Mensajes: 48
Antigüedad: 21 años, 5 meses
Puntos: 0
Soy muy novato aún. No te pillo algunas cosas.
Este es el código:
((((((((((Formulario))))))))))
<html>
<HEAD>
<TITLE>SUBIR FOTO JPG O GIF</TITLE>
</HEAD>
<BODY>
<H1 align="center"> </H1>
<H1 align="center">SUBIR FOTO</H1>
<H1> </H1>
<form enctype="multipart/form-data" action="graba.php?" method="post">
<div align="center">IDENTIFIQUE FOTO:
<input name="userfile" type="file" value="Busca Imagen">
<input type="submit" value="Manda foto" name="mandafoto">
</div>
</form>

</body>
</html>

(((((((((((((((((((Graba.php)))))))))))))))))
<html>
<HEAD>
<TITLE>Graba foto</TITLE>
</HEAD>
<BODY>
<?php
if (is_uploaded_file($HTTP_POST_FILES['userfile']['tmp_name']))
{
//copy($HTTP_POST_FILES['userfile']['tmp_name'], $HTTP_POST_FILES['userfile']['name']);


move_uploaded_file($HTTP_POST_FILES['userfile']['tmp_name'], "./foticos/".$HTTP_POST_FILES['userfile']['name']);
echo "SU ARCHIVO HA SIDO COPIADO";
}
else
{
echo "K.O. file upload. Filename: " . $HTTP_POST_FILES['userfile']['name'];
}

?>
Hasta aquí bien
<?
//Establecimiento de la conexión
$conex = mysql_connect("localhost", "data", "pass")
or die("NO se pudo realizar la conexión");
mysql_select_db("table", $conex);
$cons = "INSERT INTO `foticos` (`foticos`) VALUES (`$mandafoto`)";
?>
</body>
</html>

Así sí me copia la imagen pero no me hace el insert en la BD.

Gracias mil.
NUNCA MAIS
  #9 (permalink)  
Antiguo 07/03/2003, 11:33
 
Fecha de Ingreso: febrero-2002
Ubicación: ¿donde vivo? pues en mi casa, ¿donde voy a vivir?...
Mensajes: 214
Antigüedad: 22 años, 1 mes
Puntos: 0
y el mysql_query?
__________________
Linux, es para los que odian Microsoft/Windows, BSD, es para los que amamos *IX.
  #10 (permalink)  
Antiguo 07/03/2003, 11:48
Avatar de festeiro  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago
Mensajes: 48
Antigüedad: 21 años, 5 meses
Puntos: 0
Soy muy novato aún. No te pillo algunas cosas.
Este es el código:
((((((((((Formulario))))))))))
<html>
<HEAD>
<TITLE>SUBIR FOTO JPG O GIF</TITLE>
</HEAD>
<BODY>
<H1 align="center"> </H1>
<H1 align="center">SUBIR FOTO</H1>
<H1> </H1>
<form enctype="multipart/form-data" action="graba.php?" method="post">
<div align="center">IDENTIFIQUE FOTO:
<input name="userfile" type="file" value="Busca Imagen">
<input type="submit" value="Manda foto" name="mandafoto">
</div>
</form>

</body>
</html>

(((((((((((((((((((Graba.php)))))))))))))))))
<html>
<HEAD>
<TITLE>Graba foto</TITLE>
</HEAD>
<BODY>
<?php
if (is_uploaded_file($HTTP_POST_FILES['userfile']['tm
p_name']))
{
//copy($HTTP_POST_FILES['userfile']['tmp_name'], $HTTP_POST_FILES['userfile']['name']);


move_uploaded_file($HTTP_POST_FILES['userfile']['t
mp_name'], "./foticos/".$HTTP_POST_FILES['userfile']['name']);
echo "SU ARCHIVO HA SIDO COPIADO";
}
else
{
echo "K.O. file upload. Filename: " . $HTTP_POST_FILES['userfile']['name'];
}

?>
Hasta aquí bien
<?
//Establecimiento de la conexión
$conex = mysql_connect("localhost", "data", "pass")
or die("NO se pudo realizar la conexión");
mysql_select_db("table", $conex);
$cons = "INSERT INTO `foticos` (`foticos`) VALUES (`$mandafoto`)";
$resultado=mysql_query($cons,$conex)?>
</body>
</html>

Parece que mi problema es el VALUE del segundo input del formulario

Gracias mil.
NUNCA MAIS
  #11 (permalink)  
Antiguo 07/03/2003, 14:39
Avatar de festeiro  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago
Mensajes: 48
Antigüedad: 21 años, 5 meses
Puntos: 0
Creo por fin que el "tema" esta en el NAME del segundo input del formulario. ¿Qué tengo que poner para que grabe en la BD las mismas rutas con la que se guardó la foto?

Gracias
  #12 (permalink)  
Antiguo 07/03/2003, 15:21
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

El segundo <input> es el boton de enviar el formulario, no tiene nada que ver con el upload.

Haz lo que te comento Cluster. Si guardas todas las imagenes en un mismo directorio (ej, 'foticos'), guarda en la base de datos $HTTP_POST_FILES['userfile']['name'] (el nombre de la imagen). Luego en los <img> solo tendras que poner el directorio a mano, pe:
Código PHP:
<img src="/foticos/<?php echo $row['foticos']; ?>">
Espero haber sido de ayuda.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #13 (permalink)  
Antiguo 07/03/2003, 23:38
Avatar de MSDark  
Fecha de Ingreso: noviembre-2002
Ubicación: Talca VII región
Mensajes: 337
Antigüedad: 21 años, 5 meses
Puntos: 1
Cita:
Mensaje Original por festeiro
Soy muy novato aún. No te pillo algunas cosas.
Este es el código:
Hasta aquí bien
<?
//Establecimiento de la conexión
$cons = "INSERT INTO foticos (foticos) VALUES (`$mandafoto`)";
mysql_query($cons,$conex) or die("Error MySQL dice : <b>".mysql_error()."</b>");?>
</body>
</html>

Parece que mi problema es el VALUE del segundo input del formulario

Gracias mil.
NUNCA MAIS

Prueba eso

Saludos
__________________
DelirioLinux.. Software Libre y tecnología.. php también..
Saludos :arriba:
Usuario Linux #198486 y Ubuntu #12791
Gutsy Gibbon
  #14 (permalink)  
Antiguo 08/03/2003, 10:16
Avatar de festeiro  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago
Mensajes: 48
Antigüedad: 21 años, 5 meses
Puntos: 0
Si pongo este Insert

$cons ="INSERT INTO foticos VALUES(`". $_FILES['userfile']['name'] ."`)";
mysql_query($cons,$conex) or die("Error MySQL dice : <b>".mysql_error()."</b>");

Me dice que "Column count doesn't match value count at row 1"

Si en el value ('" .$userfile ."') lo mismo

No sé, me estoy liando. ¿Puede ser que el gestor, al tener la BD tres campos (uno nulo, y otro de autoincremento, además del de la ruta de la imagen) tenga problemas para introducir los datos?

O será que he dado mal algún paso anterior. El formulario está igual, solo que sin el name en el segundo input.

Gracias a todos.

NUNCA MAIS
  #15 (permalink)  
Antiguo 08/03/2003, 10:30
Avatar de festeiro  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago
Mensajes: 48
Antigüedad: 21 años, 5 meses
Puntos: 0
Gracias a todos por hacerme pensar. Mil gracias.
Lo resolví así:

<?
//Establecimiento de la conexión
$conex = mysql_connect("llda188.servidoresdns.net", "qh863", "c1d2f3")
or die("NO se pudo realizar la conexión");
mysql_select_db("qh863", $conex);
$userfile=$_FILES['userfile']['name'];
$cons ="INSERT INTO foticos (fotico) VALUES('$userfile')";
mysql_query($cons,$conex) or die("Error MySQL dice : <b>".mysql_error()."</b>");
?>

Con la contribución de todos ¡¡¡lo conseguí!!! Gracias de nuevo

VIVA LA VIDA y NUNCA MAIS
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 13:23.