PHP - como mostrarías una imagen subida directamente a mysql?

 
Vista:

como mostrarías una imagen subida directamente a mysql?

Publicado por maquinistas (3 intervenciones) el 12/09/2012 10:10:14
Resulta, q tengo un formulario para subir datos a una base de datos de mysql. Suben bien con un UPDATE ya que antes yo, pongo un valor en un campo contraseña.

Los campos de la base de datos son: "id","imagen"(donde sube una imagen;por ejemplo 1.jpg),"nombre"(el nombre que cada persona le pone a la imagen que sube),"titulo"(como quiere llamar a la todo lo que sube"),"marca".....y otros

El formulario es este,....

<form enctype="multipart/form-data" action="x3.php" method="post">

<p align="center" font size="4">Nombre de la imagen (opcional):</font>
<input type="text" class="required" size="60" name="titulo" size="30">
</p>
<p align="center">
Ubicación del archivo
<input type="file" class="required" name="archivito">
<p align="center">Nombre del apunte (ejemplo: Manolo):
<input type="text" class="required" size="60" name="marca">
</p>...........


El archivo que se encarga de subir, el x3.php, es este......


<?php
require("congg.php"); ESTO ES EL ARCHIVO QUE CONECTA A LA BASE DE DATOS

$fecha = time();
$archivo = $_FILES["archivito"]["tmp_name"];
$tamanio = $_FILES["archivito"]["size"];
$tipo = $_FILES["archivito"]["type"];
$nombre = $_FILES["archivito"]["name"];
$titulo = $_POST["titulo"];
$marca = $_POST["marca"];
$direccion = $_POST["direccion"];
............
.......
........
if ( $archivo != "none" )
{
$fp = fopen($archivo, "rb");
$contenido = fread($fp, $tamanio);
$contenido = addslashes($contenido);
fclose($fp);

$qry = "UPDATE apuntes SET imagen='$nombre', marca='$marca' WHERE usuario='$usuario' "; AQUI LE DIGO DE INSERTAR DATOS SIEMPRE Y CUANDO TENGA UN CAMPO USUARIO DONDE HAY UNA CONTRASEÑA VALIDA

mysql_query($qry);

if(mysql_affected_rows() > 0)
......
......

EL PROBLEMA ESTA EN MOSTRAR LA IMAGEN, que estoy haciendo mal?, este es la consulta que hago que solo me muestra lo que tengo dentro del campo "marca" y "direccion" perfectamente pero no me muestra el contenido de la imagen, es decir, no veo la foto, solo el cuadradito pequeño....

$consulta = "SELECT * FROM apuntes ";
$_pagi_sql = $consulta;
$_pagi_cuantos = 3;
$_pagi_nav_num_enlaces = 2;
include("pag.inc.php");
$resultado= @mysql_query($consulta) or die(mysql_error());
echo "<center><table border = '0' WIDTH='100%' bgcolor='#ff0000'>\n";
while ($row = @mysql_fetch_assoc($_pagi_result) ){
//ruta va a obtener un valor parecido a "imagenes/nombre_imagen.jpg" por ejemplo
$ruta['archivito'] = "imagen/" . $row['archivito'];
echo "<table border = '0' width='0%' aling='center' bgcolor='##CCFFFF' span style='color:#80BFFF' font size='3'>";
//ahora solamente debemos mostrar la imagen
echo" <p>&nbsp;</p>";
echo "<tr><td align = center><font color=#0101DF>".$row['marca']."</font></a></td></tr>";
echo "<tr><td align = center><img src=".$ruta."width='600' heigth='421' title='$ruta'></a></td></tr>";
echo "<tr><td align = center><font color=#0101DF>".$row['direccion']."</font></a></td></tr>";


Te pediria que me ayudaras a ver que tendria que poner para mostrar la imagen. No sabria como agradecerlo, llevo dias y no consigo ver la imagen que he subido de prueba de este script. Muchas gracias,
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

como mostrarías una imagen subida directamente a mysql?

Publicado por Pablo (33 intervenciones) el 12/09/2012 15:15:49
De entrada te digo que no soy un avezado programador en php, pero como ando en los comienzos tropiezo en las cosas mas tontas.
Me temo que tu $ruta['archivito'] = "imagen/" . $row['archivito']; hace que /" sea una secuencia de escape para decirle a la aplicación que busque en imagen"archivito, en lugar de imagen/arcivito.
Prueba algo así como "imagen" . '/' . $row['archivito'] o a colocar la imagen en el mismo directorio para verificar que el problema es el slash.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

como mostrarías una imagen subida directamente a mysql?

Publicado por maquinistas (3 intervenciones) el 12/09/2012 15:23:54
muchas gracias por responder.
Parece que la imagen sube al servidor porque cuando voy al campo "imagen" se muestra por ejemplo 1.jpg.
Pero el problema , me he dado cuenta tras horas de estar modificando este script, que si busco la imagen que ha subido un usuario directamente a la base de datos, ni la encuentro ni en la carpeta imagenes del servidor ni en la carpeta archivito. Y no entiendo la razon, hasta esta en un campo varchar.
No se que puede ser.
Muchas gracias Pablo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

como mostrarías una imagen subida directamente a mysql?

Publicado por Pablo (33 intervenciones) el 12/09/2012 15:40:03
El usuario debe tener permisos de escritura en el directorio donde almacenas las imágenes, o darle permiso de escritura en un directorio temporal y que el script se encargue de pasarlos del temporal al definitivo, y así evitas el acceso no deseado.
Te busco información al respecto con mas seguridad, que he estado haciendo un curso hace poco y me surgieron problemas similares.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

como mostrarías una imagen subida directamente a mysql?

Publicado por maquinistas (3 intervenciones) el 12/09/2012 16:42:58
pues te lo agradeceria mucho Carlos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

como mostrarías una imagen subida directamente a mysql?

Publicado por Pablo (44 intervenciones) el 15/09/2012 17:31:29
No sé como de importante es para ti almacenar el fichero de imagen en la BD.
Lo que te prometí consiste en lo siguiente:
El usuario entra en un formulario, rellena una serie de datos, selecciona un archivo de su equipo y lo sube al servidor.
La aplicación no detecta si es una imagen u otra cosa, ni tampoco el tamaño. He encontrado muy buena documentación por ahí para verificar tipo y tamaño de archivo.
En la base de datos solo almaceno el nombre del archivo completo, con su extensión. Y las otras características, ya que son caratulas de películas pongo el título, la duración, el género y el argumento.
El archivo se almacena en un directorio temporal, pero lo copio a una carpeta del servidor web, que es desde dónde se mostrará mas tarde.
Tengo un script que detecta si te dejas en blanco algún campo, como curiosidad.
En fin el código es este:
Formulario:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<form name="formulario_1" action="subepeli.php" method="post" enctype="multipart/form-data">
	<table width="425" border="0" cellspacing="0" align="center">
	<?php
            // Si es la primera vez muestra un mensaje, si hemos introducido una pelicula, otro.
                if (isset($_GET["volver"]) == "si"){
			echo "<caption><strong>Introduce una nueva pel&iacute;cula.</strong><br></caption>";
                } else {
			echo "<caption><strong>Formulario de registro de pel&iacute;culas</strong><br></caption>";
		}
        ?>
	<tr><td colspan="2"></td></tr>
  <tr>
  <td>Pel&iacute;cula: </td><td><input type="text" size="50"  maxlength="75" name="titulo" /></td>
  </tr>
  <tr>
  <td>Duraci&oacute;n: </td><td><input type="text" size="3"  maxlength="3" name="duracion" /></td>
  </tr>
  <tr>
  <td>G&eacute;nero: </td><td><input type="text" size="50"  maxlength="75" name="genero" /></td>
  </tr>
  <tr>
  <td>Sinopsis: </td><td><textarea cols="50" rows="5" label="Etiqueta" name="sinopsis"></textarea></td>
  </tr>
  <tr>
  <td>Car&aacute;tula: </td><td><input type="file" name="foto" /><input name="action" type="hidden" value="upload" /></td>
  </tr>
  <tr><td align="center" colspan="2"><input type="button"  onClick="validar()" name="envio" value="  Enviar  "  /><INPUT type="reset" value="  Limpiar  "></td></tr>
</table>
</form>

El script en javascript, que hace el submit:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<script language="JavaScript" type="text/JavaScript">
/*
Función que llama la atención al usuario cuando este se deja campos sin rellenar.
*/
function validar(){
    if (formulario_1.titulo.value=="")
    {
        alert ("Debes introducir un nombre de pelicula")
        formulario_1.titulo.focus()
    }
    else if (formulario_1.duracion.value=="")
    {
        alert ("Debes introducir la duracion de la pelicula")
        formulario_1.duracion.focus()
    }
    else if (formulario_1.genero.value=="")
    {
        alert ("Debes introducir el genero  de la pelicula")
        formulario_1.genero.focus()
    }
    else if (formulario_1.sinopsis.value=="")
    {
        alert ("Debes introducir la trama o sinopsis de la pelicula")
        formulario_1.sinopsis.focus()
    }
    else if (formulario_1.foto.value=="")
    {
        alert ("Debes seleccionar una imagen de la caratura de la pelicula")
        formulario_1.foto.focus()
    }
    else
    formulario_1.submit()
}
</script>

el archivo de comandos que se ejecuta al hacer submit() se conecta a la base de datos haciendo referencia a un archivo de parámetros config.ini que me da los valores de login, password, etc.
Si todo va bien, los datos introducidos en el formulario pasan a la BD y retornamos al formulario con una variable GET "que dirá introduce otra pelicula":
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<?php
// Vamos a empezar por copiar el fichero a la carpeta de destino.
                //iniciamos las variables a nada para que no haya errores.
                $nombre = "";
		$temp = "";
 
       if (isset($_POST["action"]) == "subepeli.php") {
                // Este es el array que contiene los parámetros del fichero elegido.
		@$filename = $_FILES['foto'];
 
		$nombre = $filename['name'];
		$temporal = $filename['tmp_name'];
 
		} else {
			echo "No se ha recibido el fichero";
		}
        if (file_exists($temporal)){
            copy($temporal, "./caratulas". '/' . $nombre);
            unlink($temporal);
        }else{
            echo    "El archivo no existe o no se ha podido copiar.";
        }
    // Nos conectamos a la base de datos a través del fichero parametros.ini
    $parametros = parse_ini_file("config.ini",TRUE);
 
    $usuario =      $parametros["BaseDeDatos"]["user"];
    $host =         $parametros["BaseDeDatos"]["server"];
    $pass =         $parametros["BaseDeDatos"]["pass"];
    $basededatos =  $parametros["BaseDeDatos"]["database"];
 
    $titulo =   $_REQUEST['titulo'];
    $duracion = $_REQUEST['duracion'];
    $sinopsis = $_REQUEST['sinopsis'];
    $genero =   $_REQUEST['genero'];
 
    $conexion = mysql_connect($host,$usuario,$pass) or die("No se ha realizado la conexión al servidor");
 
    //Abrimos una sesión en la base de datos para introducir los valores.
    mysql_select_db($basededatos,$conexion) or die("No se ha realizado la conexión a la base de datos");
 
    //Generamos una consulta de inserción
    $insercion = "INSERT INTO peliculas (
    Titulo, Sinopsis, Duracion, Foto, Genero
    ) VALUES (
    '$titulo', '$sinopsis', '$duracion', '$nombre', '$genero')";
 
    $query = mysql_query($insercion);
    mysql_close($conexion);
 
	//Nos vamos a la página de inicio con un mensaje.
	header ("Location: form_entrada.php?volver=si");
 
?>

Los resultados los veo en esta otra tabla:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?php
        // Nos conectamos a la base de datos a través del fichero parametros.ini
    $parametros = parse_ini_file("config.ini",TRUE);
 
    $usuario =      $parametros["BaseDeDatos"]["user"];
    $host =         $parametros["BaseDeDatos"]["server"];
    $pass =         $parametros["BaseDeDatos"]["pass"];
    $basededatos =  $parametros["BaseDeDatos"]["database"];
 
    $conexion = mysql_connect($host,$usuario,$pass) or die("No se ha realizado la conexión al servidor");
    mysql_select_db($basededatos,$conexion) or die("No se ha realizado la conexión a la base de datos");
    $consulta = "SELECT * FROM peliculas";
    $resultado = mysql_query($consulta, $conexion);
    if(!$resultado){
        echo "No se ha ejecutado la consulta!!";
        exit;
    }
        while($pelicula = mysql_fetch_row($resultado)){
 
    ?>
    <table width="700" border="1" cellspacing="0" align="center">
	<tr>
	<td>T&iacute;tulo</td><td><?php echo $pelicula[1];?></td>
	</tr>
	<tr>
	<td>Duraci&oacute;n</td><td><?php echo $pelicula[3];?> minutos</td>
	</tr>
        <tr>
	<td>G&eacute;nero</td><td><?php echo $pelicula[5];?></td>
	</tr>
	<tr>
	<td>Sinopsis</td><td><?php echo $pelicula[2];?></td>
	</tr>
        <tr><td>Car&aacute;tula</td>
	    <td><img src="caratulas/<?php echo $pelicula[4];?>" alt="" width="271" height="400" /></td>
        </tr>
 
    <?php
    }
    ?>

Espero que te sirva.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar