Imágenes en la base de datos

Hola a todos, he hecho un formulario para ingresar los datos en la base de datos mysql, el formulario esta hecho en php, pero no logro hacer que las imágenes se suban, quiero hacer que se suban en una carpeta del servidor, que se llama fotos, y guardar la ruta en la base de datos, pero me da error en if(! Copy($_FILES['foto1']['tmp_name'], $ruta)) {
El código del script es el siguiente:
<HTML>
<HEAD>
<TITLE>Insertar.php</TITLE>
</HEAD>
<BODY>
<?php
$ruta = "fotos/{$_FILES['foto1'][name]}"
if(!copy($_FILES['foto1']['tmp_name'], $ruta)) {
echo "error al copiar el archivo";
} else {
echo "archivo subido con exito";
mysql_connect("localhost","root","*****");
mysql_select_db("tabla");
$referencia = $_POST["referencia"];
$inmueble = $_POST["inmueble"];
$ciudad = $_POST["ciudad"];
$zona = $_POST["zona"];
$operacion = $_POST["operacion"];
$titulo= $_POST["titulo"];
$descripcion = $_POST["descripcion"];
$amueblado = $_POST["amueblado"];
$solana = $_POST["solana"];
$habitaciones = $_POST["habitaciones"];
$aseos = $_POST["aseos"];
$baños = $_POST["baños"];
$metrosconstruidos = $_POST["metrosconstruidos"];
$metrosutiles = $_POST["metrosutiles"];
$terraza = $_POST["terraza"];
$garaje = $_POST["garaje"];
$jardin = $_POST["jardin"];
$piscina = $_POST["piscina"];
$extras = $_POST["extras"];
$comunidad = $_POST["comunidad"];
$precio = $_POST["precio"];
mysql_query("insert into propiedades (referencia,inmueble,ciudad,zona,operacion,titulo,descripcion,amueblado,solana,habitaciones,aseos,baños,metrosconstruidos,metrosutiles,terraza,garaje,jardin,piscina,extras,comunidad,foto1,foto2,foto3,foto4,precio) values ('$referencia','$inmueble','$ciudad','$zona','$operacion','$titulo','$descripcion','$amueblado','$solana','$habitaciones','$aseos','$baños','$metrosconstruidos','$metrosutiles','$terraza','$garaje','$jardin','$piscina','$extras','$comunidad','$foto1','$foto2','$foto3','$foto4','$precio')");
?>
<h1><div align="center">Registro Insertado</div></h1>
<div align="center"><a href="propiedades.php">Ver el lisato completo</a></div>
</BODY>
</HTML>
La carpeta fotos esta dentro de la carpeta imágenes, ¿debo poner la ruta completa?, gracias.

1 respuesta

Respuesta
1
Lo primero te recomendaría que utilices forma de hacaer esta tarea actual, no el viejo método del php3.
Es decir, no hagas copy y luego un unlink (que el unlink en ese código ni lo realizas, por lo que el temp se te puede quedar majo, majo)
Utiliza la función move_uploaded_file
Tienes más información en
http://es.php.net/manual/en/features.file-upload.php
Un ejemplo, en la siguiente dirección:
http://www.marklar-co.com/docamen/#upload
Aunque el ejemplo está desfasado en como accede al nombre de la variable, lo mejor es como lo haces en tu código con el $_FILES
El error te da por que me imagino que al menos será un php4 y estará el safe_mode activado, por lo que no debes acceder directamente al directorio temporal, para eso está la función move_uploaded_file
En principio, sólo con cambiar esa línea conflictiva por la siguiente sería suficiente:
if(!move_uploadede_file($_FILES['foto1']['tmp_name'], $ruta)) {
Verifica que el directorio destino tenga permisos de escritura para el usuario con el que se ejecuta el php o servidor web, y que esté dentro de los directorios permitidos
En las consultas utilizas variables $fotos1, etc.. que al menos en ese código no están definidas.
También te recomendaría que todo lo que pases a mysql obtenido desde el exterior, lo protejas, sino resultaría fácil hacer "otras" cosas sobre la base de datos. Al menor por ejemplo dónde das valor a las variables locales obteniendolas del $_POST que le hagas un mysql_real_escape_string, ej:
mysql_real_escape_string($_POST["titulo"]);
También sería idóneo verificación de datos, si un dato es numérico, y no lo es, no pasar, si debe ser on o off, verificar que tiene esos valores, etc...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas