PHP - Ayuda con un código php que me repite el mismo nombre al subir un archivo

 
Vista:
sin imagen de perfil
Val: 9
Ha aumentado su posición en 15 puestos en PHP (en relación al último mes)
Gráfica de PHP

Ayuda con un código php que me repite el mismo nombre al subir un archivo

Publicado por Daniel (9 intervenciones) el 27/08/2022 05:44:58
Hola, espero que estén bien, quisiera saber si me pueden dar una mano con el siguiente código que esta en php mysqli, el cual me esta dando un problema que al subir la imagen se repite varias veces en distintas noticias. Lo que he notado es que al momento de subir la imagen se vuelve a repetir el nombre de otra imagen que ya esta subida y la reemplaza.
Este es código para subir.

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
include "cnx/conexion.php";
if(!empty($_POST))
{
	$alert='';
	if(empty($_POST['titulo']) || empty($_POST['copete']) || empty($_POST['categoria']))
	{
		$alert='<p class="msg_error">Todos los campos son oblitorios.</p>';
	}else{
		$categoria = $_POST['categoria'];
		$titulo = $_POST['titulo'];
		$copete = $_POST['copete'];
		$cuerpo = $_POST['cuerpo'];
		$fuente = $_POST['fuente'];
		$epigrafe = $_POST['epigrafe'];
		$volanta = $_POST['volanta'];
 
		$foto = $_FILES['foto'];
		$nombre_foto = $foto['name'];
		$type = $foto['type'];
		$url_temp = $foto['tmp_name'];
 
		$imgProducto = 'img_producto.png';
 
		if($nombre_foto != '')
		{
			$destino = '../img_noticias/';
			$img_nombre = 'img_'.md5(date('d-m-Y H:m:s'));
			$imgProducto = $img_nombre.'.jpg';
			$src = $destino.$imgProducto;
		}
 
		$query_insert = mysqli_query($conection,"INSERT INTO noticias(titulo,copete,cuerpo,fuente,epigrafe,volanta,foto,categoria) VALUES('$titulo','$copete','$cuerpo','$fuente','$epigrafe','$volanta','$imgProducto','$categoria')");
 
		if($query_insert){
			if($nombre_foto != ''){
				move_uploaded_file($url_temp,$src);
			}
				$alert='<p class="msg_save">Noticia subida correctamente.</p>';
			}else{
				$alert='<p class="msg_error">Error al guardar la noticia.</p>';
			}
		}
	}

En esta línea creo está el problema $img_nombre = 'img_'.md5(date('d-m-Y H:m:s')); que al momento de cambiar el nombre de la imagen vuelve a poner el mismo nombre de otra imagen ya subida.
Espero haberme hecho entender.
Desde ya muchas gracias por su ayuda.
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
sin imagen de perfil

Ayuda con un código php que me repite el mismo nombre al subir un archivo

Publicado por antonio (16 intervenciones) el 27/08/2022 08:50:50
Hola buenas no repite el nombre lo he probado varias veces quizás es que tu estas subiendo la misma foto o te la esta leyendo con el mismo nombre en $nombre_foto = $foto['name']; .
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
Val: 9
Ha aumentado su posición en 15 puestos en PHP (en relación al último mes)
Gráfica de PHP

Ayuda con un código php que me repite el mismo nombre al subir un archivo

Publicado por Daniel (9 intervenciones) el 29/08/2022 04:04:05
Muchas gracias Antonio por contestar. Te comento lo he probado todo el fin de semana mientras me va subiendo las imagenes, que son diferentes, en algunas que ya están subida fueron reemplazada por las nuevas subidas.
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

Ayuda con un código php que me repite el mismo nombre al subir un archivo

Publicado por antonio (16 intervenciones) el 29/08/2022 13:59:36
No debería darte problemas ya que la hora, día del año, hora minuto y segundos es diferente por lo que la única posibilidad es que la encriptación md5 no este funcionando bien o el servidor te lo lea con el mismo nombre y lo sobrescriba (para esto ultimo no se cual sería la solución). Un saludo.
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 Ivan

Ayuda con un código php que me repite el mismo nombre al subir un archivo

Publicado por Ivan (118 intervenciones) el 29/08/2022 18:28:33
Hola,

aparentemente no parece que tengas ningún error pero sí que los hay ... y gordos ;)

Basas toda la subida de la imagen únicamente en si existe un dato en $_POST['foto'] y esto no funciona así.

En PHP hay unos mecanismos y funciones básicas que determinan si la subida fué correcta o no, al margen de que exista un dato en el formulario. Estamos hablando de un archivo de hasta varios MB no de un simple campo de formulario.

Estas funciones además se deben tratar con la variable global $_FILES, por lo que no debes utilizar tus propias variables hasta el final de todas las comprobaciones. Porque si existe un error, tus variables no lo saben y estás tratándolas como si todo fuera correcto.

Te pongo un código básico de cómo se hacen estas comprobaciones, pero repito lo de básico, porque se deberían hacer más comprobaciones de seguridad o corres el riesgo de hackeo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<!DOCTYPE html>
<head>
  <meta charset="utf-8">
</head>
<body>
<?php
// Si no recibimos formulario no entramos
if(!empty($_POST)) {
  // Preguntamos si se subió un archivo, en caso afirmativo el servidor le ha dado un nombre temporal
  if (is_uploaded_file($_FILES["mi_imagen"]['tmp_name'])) {
    // Aquí se deberían hacer más validaciones y saneamiento del fichero
    // Si todo está correcto movemos el archivo del área temporal a nuestro "directorio + nombre"
    move_uploaded_file($_FILES["mi_imagen"]["tmp_name"], 'img_noticias/img_'.md5(date('Y-m-d H:m:s')).'.jpg');
  } else {
    echo $_FILES["mi_imagen"]['error'];
  }
}
?>
<form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post" enctype="multipart/form-data">
  <label>Imagen: <input type="file" name="mi_imagen" /></label>
  <input type="submit" value="Guardar" name="submit">
</form>
</body>
</html>

Un último detalle, date('Y-m-d H:m:s') suele ser la forma de guardar fechas y que al mismo tiempo se ordene alfabéticamente (aunque aquí no haga falta)

Un saludo!
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