Subir imagen a la base de datos

Quisiera insertar la ruta donde va la imagen a la base de datos pero no se como se hace. Ademas tengo varias dudas.

1). He creado un directorio subirimagenes, donde irán todas las imagenes, pero no se como se hace para que cuando se registra un nuevo usuario se cree un subdirectorio con el nombre del usuario y en este vayan las imagenes del propio usuario. ¿Ya qué pienso al no crear un subdirectorio se pueden confundir los nombres de las imagenes con otros usuarios es así?.

Esta es mi base de datos:

-----------------------

dato_empresa

----------------------

id_empresa

Empresa

Cif

Usuario

Passwd1

Idcategoria

Direccion

Imagen1

-------------------------------------------

Index.php esta es la pagina principal y hay una parte donde entra el usuario registrado

Agrego solo una parte de esta

----------------------------------------------------

<div id="column2">
</br><h2> Acceso usuarios</h2>
<form id="acceso" method="post" action="validausuario.php">
</br><p> Empresa:
<input type="text" name="empresa" id="empresa" />
</p>
<p> Clave:
<input name="passwd1" type="password" id="passwd1" value="" />
</p>
<p>
<center>
<input type="submit" name="enviar" id="enviar" value="Entrar" />
</center>
<br/>
</p>
<a href="registro.php"> Clica aqui para registrate gratis</center></a>
</form>

---------------------------

esta es la pagina donde entra el usuario registrado

pagina_usuario.php

-----------------------------------------------------------------

<?php include("menuprincipal.php");?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="keywords" content="" />
<meta name="description" content="" />
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
<title>pagina usuarios</title>
<link href="http://fonts.googleapis.com/css?family=Oswald" rel="stylesheet" type="text/css" />
<link href="css/style.css" rel="stylesheet" type="text/css" media="screen" />
<script type="text/javascript" src="jquery/jquery-1.4.2.min.js"></script>
<script type="text/javascript" src="jquery/jquery.gallerax-0.2.js"></script>
<style type="text/css">
@import "gallery.css";
</style>
</head>
<body>
<?php
// include conexion.php esto lo he tenido que suprimir porque me da error
session_start();
// Validar si se esta ingresando con session correcta
if (!$_SESSION) {
echo '<script language = javascript>
alert ("usuario no autenticado")
self.location = "index.html"  //en  esta parte no se si esta bien ya que mi pagina principal                      es               index.php y si pongo index.php me da error y no funciona antes sellamaba index.html
</script>';
}
?>
<div id="wrapper">
<div id="header">
<div id="logo">
<h1><?php echo $_SESSION['empresa'];?></h1><hr/><br/>
</div>
</div>
<div id="usuario">
<p> <img src="images/diagram-47.png" width="32" height="32" alt="usuario" /> Usuario conectado: <?php echo $_SESSION['usuario'];?></p>
<p style="color:red"> Cerrar conexi&oacute;n </p>
</div>
</div>
<br><br>
<form action="compimage.php" method=post enctype="multipart/form-data">
<b>Agregar Fotos:</b>
<br>
<span class="hint">Tamaño máximo del archivo: 1000KB</span><br>
<br>
<input type="file" size="69" name="imagen1">
<br>
<input type="submit" value="Guardar">
</form>
</body>
</html>

-----------------------------------------------

Este es el que verifica el tipo de imagenes y guarda la informacion en el directorio subir imagenes esto lo hace bien pero falta que me guarde la ruta en la base de datos

compimage.php

--------------------------------------------------

¿

<?php
session_start();
if (!$_SESSION) {
echo '<script language = javascript>
alert ("usuario no autenticado")
self.location = "index.html"
</script>';
}
$nameimagen = $_FILES['imagen1']['name'];
$tmpimagen = $_FILES['imagen1']['tmp_name'];
$extimagen = pathinfo($nameimagen);
$ext = array("png", "gif","jpg");
$urlnueva = "subirimagenes/".$nameimagen;
print_r($urlnueva);
if (is_uploaded_file($tmpimagen)) {
if(array_search($extimagen['extension'],$ext)){
copy ($tmpimagen,$urlnueva);
echo "Se ha guardado ok";
} else {
echo "Error: solo puede cargar imagenes con formato (jpg, png o gif)";
}
} else {
echo "Elija una imagen";
}
?>

Agradeciendo de antemano su disposicion

Cordiales saludos

Mariano

1 respuesta

Respuesta
1

Ok amigo disculpa la tardanza primero el error del include conexión ponlo mas abajo de seguro el error es por el sesión start que debería estar siempre de primero sin nada arriba,

2do en cuanto a las carpetas de imágenes, la verdad no se como crear directorios por php pero no es necesario puedes montarlos todos en un solo directorio, recuerda que en la tabla guardaras (para ese usuario) su link de imagen y si no quieres que hayan problemas con los nombres de las imágenes d dos Soluciones.

Imaginemos que dos usuarios registrados suben su imagen con el mismo nombre.

imagen.png usuario 1

imagen.png usuario 2

Solución 1

Entonces puedes concatenar y agregar datos al nombre de la imagen como por ejemplo la clave del usuario que nunca se repite, y puedes poner algún código que diferencie de todas las imágenes por ejemplo

Quedaría algo así

Imagen perfil 1.png

Imagen perfil 2.png

Solución 2

O puedes generar ese código que se añada al nombre de la imagen con esta función

function cadena_aleatoria($numero){
$carácter= "ABCDEF GHIJKLMNOPQRSTUVWXYZa bcdefgh ijklmnopqrstuvwxyz012 3456789";
srand((double)microtime()*1000000);
for($i=0; $i<$numero; $i++) {
$rand.= $carácter[rand()%strlen($carácter)];
}
return $rand;
}

/ /la función genera una serie de códigos o claves combinando letras y números

y luego creas todo

$ruta='../../images/subidas/';

$perfil=$ruta.cadena _ aleatoria(10).$_ FILES['logo']['name'];

$perfil kedaria con unos datos como estos

$perfil="../../images/perfiles/SDFE23VE4Fimagen.png";

Cuando lo subas guardas $perfil (en mi caso) en la base de datos para consultarla imagen mas adelante.

¿Por otro lado no entendí bien sobre el error que mencionabas en negritas que error sale?

Hola,

muchas Gracias por responder.

Se refiere a esto:

self.location = "index.html" //en esta parte no se si esta bien ya que mi pagina principal es
index.php y si pongo index.php me da error y no funciona antes sellamaba
index.html


Bueno le explico antes tenia mi pagina principal como index.html con lo que en la parte de arriba self.location lo muestra. Lo que pasa es que cambie la pagina principal y ahora es index.php y lo he dejado así como esta arriba osea con index.html y funciona pero si quiero cambiar a index.php me da error.


Espero que se haya aclarado, probare lo que me ha indicado.

Muchas gracias por su ayuda.


Mariano Martelli

Indicame que error te lanza y verifica que el index.php existe

Buenos días,
Ok resuelto este problema.
Pero tengo otros en la pregunta que le hice al inicio si se
fija lo puse en negrita que es esto:
Quisiera insertar la ruta donde va la imagen a la base de
datos pero no se como se hace.
Bueno ahora lo explicare mejor. Gracias por su paciencia.
Primer problema
Tengo la pagina usuarionew.php que me muestra la pagina
cuando el usuario entra con su passwd mostrándome los datos con los cuales se
ha registrado.
En esta misma pagina le doy la opción de subir una imagen (envía
los datos a compimage.php) para adjuntar con los datos de la empresa, pero
quiero que esto lo haga una vez que el usuario haya efectuado el pago.
El programa compimage.php me guarda la imagen en el
directorio subirimagen, esto lo hace bien, el problema es que necesito que me guarde
la ruta
en el campo imagenprin de la
tabla
dato_empresa (que detallo
arriba) del usuario que está conectado. Este es el primer problema que tengo.
Este es el segundo
problema.

He agregado un campo en la tabla con el nombre payimgprn que
cuando el cliente se da de alta mueve “no” al campo payimgprn.
Quisiera que pregunte
si la opción = ‘no’ no vaya a buscar las imágenes.
Ademas como tendría que
hacer para el asunto del pago como lo conecto y hacer que una vez que el
usuario realizo el pago mueva la opción ‘si´ a payimgprn para que el usuario
este autorizado a subir la imagen.
------------------------------------------------------------------------------------------------------------------
Este es el programa
usuarionew.php
?php
//Proceso de
conexion con la base de datos
include("conexion.php");
//Incluye
menu principal
include("menuprincipal.php");
// iniciar
sesion
session_start();
// Validar
si se esta ingresando con sesion correctamente
if (!$_SESSION){
echo '<script language =
javascript>
alert
("usuario no autenticado")
self.location
= "formulario.html"
</script>';
}
$id_usuario
= $_SESSION['empresa'];
// Empieza a
mostrar resultados
$result = mysql_query("SELECT *
FROM dato_empresa WHERE empresa LIKE '%$id_usuario%' ORDER BY empresa");
if ($row =
mysql_fetch_array($result)){
echo "<table border = '0'> \n";
//Mostramos
los nombres de las tablas
echo
"<tr> \n";
$tr_empresas=" ";
while ($field =
mysql_fetch_field($result)){
}
echo "</tr> \n";
do {
$tr_empresas.="
<tr>
<td width=90 rowspan=3><img src=".$row['imagenprin']."
hspace=0 alt=Sin_imagen></td>
<td width='372' align='center'
><h4>".$row['empresa']."</h4></td>
<td width=240 rowspan=2><img
src=".$row['map_empresa']." hspace=80 ></td>
</tr>
<tr>
<td
align='center'>".$row['direccion']."</td>
</tr>
<tr>
<td align='center'>".$row['telefono']." </td>
<td><a
href='usuario.php?empresa=$row[empresa]'><img
src='$row[paginaweb]'style='border:none' hspace=80
height=20></td></tr><tr><td colspan='6'><hr>
</a></td>
</tr>";
} while ($row = mysql_fetch_array($result));
echo "</table>
\n";
} else {
echo "¡
No se ha encontrado ningún registro !";
}
?>
<html>
<head>
<link
href="css/style.css" rel="stylesheet"
type="text/css" media="screen" />
</head>
<body>
<div id="usuario"
<p>
<img src="images/diagram-47.png" width="32"
height="32" alt="usuario" />&nbsp;&nbsp;Usuario
conectado: &nbsp;&nbsp;<?php echo
$_SESSION['usuario'];?></p>
<p
style="color:red">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cerrar
conexi&oacute;n </p>
</div>
<div id=
"centrar_tabla"
<table class='tabla_empresa'>
<tr>
<th>Aquí la fotografia o logo de tu
empresa</th>
<th>Estos son los datos de tu
empresa</th>
<th>Mapa</th>
</tr>
<?php echo $tr_empresas;?>
</table>
<p style = "text-align:left">
Este servicio te permitira mostrar una Imagen para aumentar la visibilidad de
tu negocio </p>
<p style = "text-align:left">
Costo del servicio 3,50€ iva incluido</p>
<p style = "text-align:left">
Una vez recibido el pago después de 24hrs vuelve a entrar y estará disponible
el servicio </p></br></br>
<form action="compimage.php" method=post
enctype="multipart/form-data">
<b>Agregar
Fotos:</b>
<br>
<span
class="hint">Tamaño máximo del archivo:
1000KB</span><br>
<br>
<input type="file"
size="69" name="imagen1">
<br>
<input type="submit"
value="Guardar">
</form>
</body>
</html>
Este es el
otro programa compimage.php
<?php
session_start();
if (!$_SESSION) {
echo '<script language = javascript>
alert
("usuario no autenticado")
self.location
= "index.html"
</script>';
}
//Proceso de
conexion con la base de datos
include("conexion.php");
$ruta =
"subirimagenes";
$nameimagen =
$_FILES['imagen1']['name'];
$tmpimagen = $_FILES['imagen1']['tmp_name'];
$extimagen = pathinfo($nameimagen);
$ext = array("png",
"gif","jpg");
$urlnueva =
"subirimagenes/".$nameimagen;
print_r($urlnueva);
if (is_uploaded_file($tmpimagen)) {
if(array_search($extimagen['extension'],$ext)){
copy ($tmpimagen,$urlnueva);
echo "Se ha guardado ok";
} else {
echo "Error: solo puede cargar
imagenes con formato (jpg, png o gif)";
}
} else {
echo "Elija una imagen";
}
$insertar = mysql_query("INSERT INTO
dato_empresa VALUES('"$urlnueva"')");
?>
En la espera
de sus noticias
Cordiales
saludos.

Buenos días,

Con referencia al problema de guardar imágenes me funciona con la primera idea que me ha sugerido, osea con la id de la empresa. En cambio cuando he querido probar con la idea de insertar un numero aleatorio no he sido capaz de hacerla funcionar.

Me podría echar una mano para hacerlo funcionar.

Dejo aquí el código:

<?php
include "conexión.php";
$imagen=$_POST['imagen'];
$descripción=$_POST['nuevotexto'];
$id_empresa=$_POST['idimagen'];
$ruta="subirimagenes";
$archivo=$_FILES['nuevaimagen']['tmp_name'];
$nombrearchivo=$_FILES['nuevaimagen']['name'];
move_uploaded_file($archivo,$ruta."/".$id_empresa.$nombrearchivo);
$ruta=$ruta."/".$id_empresa.$nombrearchivo;
echo $ruta;
$actualizar=mysql_query("UPDATE dato_empresa SET imagenprin='".$ruta."',
descripción='".$descripción."' WHERE id_empresa='".$id_empresa."'",$conexión);
unlink ("$imagen");
if ($actualizar)
{
echo "
<html>
<head>
<meta http-equiv='REFRESH' content='0 ; url=pagina_usuarionew.php'>
<script>
alert ('Actualizada con éxito!!!');
</script>
</head>
</html>
";
}
else
{
echo "
<html>
<head>
<meta http-equiv='REFRESH' content='0 ; url=pagina_usuarionew.php'>
<script>
alert ('Error no se ha actualizado!!!');
</script>
</head>
</html>
";
}
?>

de antemano muchas gracias por su gentil ayuda

Saludos

Cierto disculpame en la función mas arriba donde indico las letras que quiero que mezcle la función tuve que separarlo porque el sistema no lo aceptaba todo pegado

function cadena_aleatoria($numero){
$carácter= "ABCDEF GHIJKLMNOPQRSTUVWXYZa bcdefgh ijklmnopqrstuvwxyz012 3456789";
srand((double)microtime()*1000000);
for($i=0; $i<$numero; $i++) {
$rand.= $carácter[rand()%strlen($carácter)];
}
return $rand;
}

lo que marco en negritas quedaría así...

y para concatenarlo con el nombre del archivo usas esto

$logo=$ruta.cadena_aleatoria(10).$nombre_archivo;

si lo quieres probar ejecuta un archivo .php

y colocas echo cadena_aleatoria(10);

Debería imprimir la cadena y cada vez que recargues debería ser difeernte

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas