PHP - Insertar imagen en la base de datos

 
Vista:
Imágen de perfil de Mosiah

Insertar imagen en la base de datos

Publicado por Mosiah (42 intervenciones) el 15/11/2013 00:12:37
Hola, sigo trabajando en mi sistema de noticias, pero tengo una duda, utilizo un script para insertar la imagen a la base de datos, pero este no está funcionando, les dejo el código:

agregar.php

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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
<?php
// incluimos el archivo de conexion
include ('../../config/conexion.php');
 
// recibimos el formulario
if(isset($_POST['enviar']) && $_POST['enviar'] == 'Enviar'){
    // comprobamos que el formulario no envie campos vacios
    if(!empty($_POST['titulo']) && $_POST['texto'] &&
    $_POST['descripcion'] && $_POST['id_categoria']){
        // creamos las variables y les asignamos los valores a insertar
        $titulo = $_POST['titulo'];
        $texto = $_POST['texto'];
        $descripcion = $_POST['descripcion'];
        $id_categoria = $_POST['id_categoria'];
        $fecha =date("t-M");
        $tiempo = $fecha;
        $hora=date('H:i:s');
        $horario= $fecha." a las ".$hora;
        $autor = $_POST['autor'];
        $_FILES['img'];
        // hacemos el INSERT en la BD
        $sqlInsertNot = mysqli_query($con, "INSERT INTO noticias
                                     (titulo, texto, descripcion, id_categoria, fecha, horario, imagen, autor)
                                     VALUES ('$titulo', '$texto', '$descripcion', '$id_categoria', '$tiempo', '$horario','$noticia','$autor')") or die(mysqli_error($con));
        // enviamos un mensaje de exito
        echo "Los datos fueron gurdados correctamente";
 
        require_once('subir.php');
    }else{
        // si el formulario envia algun campo vacio
        // enviamos un mensaje de error
        echo "Debe llenar todos los campos del formulario";
    }
}
?>
<!-- el formulario -->
<form action="<?php $_SERVER['PHP_SELF']; ?>" name="noticia"  method="post">
    <p>
    Autor:
    <input type="text" name="autor" value="OT Hosting" readonly>
    <p>
    T&iacute;tulo de la Noticia<br />
    <input type="text" name="titulo" size="50" />
    </p>
    <p>
    Texto de la Noticia<br />
    <textarea name="texto" rows="10" cols="50"></textarea>
    </p>
    <p>
    Descripcion<br />
    <textarea name="descripcion" rows="10" cols="50"></textarea>
    </p>
        <p>Seleccione una imagen para el tema
    <input type="file" name="img">
    </p>
    <p>
    Categor&iacute;a<br />
    <select name="id_categoria">
        <option value="">Escoger de la Lista</option>
    <?php
    // asignamos una categoria a la noticia
    // mediante un select
    $sqlQueryCat = mysqli_query($con,"SELECT * FROM categorias_noticias") or die (mysqli_error($con));
    // creamos un bucle while
    // que nos muestre todas las categorias
    // que tenemos guardadas en la BD
    while($rowCat = mysqli_fetch_array($sqlQueryCat)){
        echo "<option value=".$rowCat['id'].">".$rowCat['categoria']."</option>";
    }
    ?>
    </select>
    </p>
    <p>
    <input type="submit" name="enviar" value="Enviar" />
    </p>
</form>
 
 
<?php
 
mysqli_close($con);
 
?>



subir.php:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
error_reporting(E_ALL ^ E_NOTICE);
  $id=$_GET['id'];
$directorio = $_SERVER['DOCUMENT_ROOT'].'../../images/blog/';
 
    // Recibo los datos de la imagen
	$nombre = $_FILES['img']['name'];
  $tipo = $_FILES['img']['type'];
       $tamano = $_FILES['img']['size'];
    // Muevo la imagen desde su ubicación
    // temporal al directorio definitivo
    move_uploaded_file($_FILES['img']['tmp_name'],$directorio.$nombre);
	$query=mysqli_query($con,"UPDATE noticias SET imagen='$nombre'WHERE id_noticia='$id'");
?>

1
2
3
$con=mysqli_connect("localhost","root","","base") or die
 ("Error en la conexión a la base de datos");
 ?>

Muchas gracias!! =)

conexion.php
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
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Insertar imagen en la base de datos

Publicado por xve (6935 intervenciones) el 15/11/2013 07:24:32
Hola Mosiah, por lo que veo, quieres guardar el nombre de la imagen verdad?

Lo que me parece que te esta fallando, creo que son dos cosas:

1.- En el archivo subir.php no veo que te conectes a la base de datos... si no te conectas....

2.- En la instrucción sql, que te faltaria poner un espacio delante del WHERE, creo que no debe ir pegado a la variable:
1
$query=mysqli_query($con,"UPDATE noticias SET imagen='$nombre' WHERE id_noticia='$id'");

Coméntanos, ok?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Insertar imagen en la base de datos

Publicado por Mari Carmen (145 intervenciones) el 15/11/2013 17:26:17
Yo veo otro fallo en la sentencia :
1
$sqlInsertNot = mysqli_query($con, "INSERT INTO noticias (titulo, texto, descripcion, id_categoria, fecha, horario, imagen, autor) VALUES ('$titulo', '$texto', '$descripcion', '$id_categoria', '$tiempo', '$horario','$noticia','$autor')") or die(mysqli_error($con));

Si te fijas donde tienes el campo imagen le estas pasando una variable no definida en ese script $noticia
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Mosiah

Insertar imagen en la base de datos

Publicado por Mosiah (42 intervenciones) el 16/11/2013 00:48:57
Si, toda la razón, era una variable que utilizaba anteriormente, ya la he quitado, muchas gracias.
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
Imágen de perfil de Mosiah

Insertar imagen en la base de datos

Publicado por Mosiah (42 intervenciones) el 16/11/2013 00:50:45
Eso también se me había pasado por improvisto, ya lo repare.

Saludos!
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
sin imagen de perfil

Insertar imagen en la base de datos

Publicado por Elier (92 intervenciones) el 15/11/2013 17:52:15
Lo que veo es que te falto en el formulario enctype="multipart/form-data

<form enctype="multipart/form-data" action="<?php $_SERVER['PHP_SELF']; ?>" method="post">

Lo otro es que estás usando el nombre del archivo que se sube, y podría suceder que subas dos archivos con el mismo nombre por lo que se sobreescribiría el anterior. Te sugiero que le añadas al nombre del archivo el id de la noticia.

$nombre = $id.$_FILES['img']['name'];

Veo que pones que el id de la noticia es $id=$_GET['id'] y no me parece correcto el id en ese caso es el ultimo que acabas de insertar con la sentencia INSERT por tanto para poder actualizar la imagen de esa noticia que acabas de insertar debes obtener ese id

$id = mysqli_insert_id($con) o también $id = mysqli_query($con, "SELECT LAST_INSERT_ID()")

Creo que lo mejor sería que movieras el archivo antes de realizar el INSERT y le añadieras a esa consulta el campo imagen, de esa manera no tendrías que ejecutar el UPDATE, en ese caso como todavia no tienes el id de la noticia y no puedes concatenarselo al nombre de la imagen, por lo que podrías usar la fecha y hora (timestamp).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Mosiah

Insertar imagen en la base de datos

Publicado por Mosiah (42 intervenciones) el 16/11/2013 00:50:07
Muchas gracias por los consejos, se me había olvidado agregar el enctype y por lo demás obviamente no estaba obteniendo el id

Saludos cordiales,

Mosiah.
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