Despues de darle una miradita al codigo he encontrado el fallo:
Echale un vistazo a esta parte:
Código PHP:
//Generar el nuevo nombre para la imagen, asociado con el id del registro, para luego moverla a su posicion final
$nuevo_nombre = ( string ) $id. "_" .$_FILES['foto']['name'];
//Con la funcion move_uploaded_file mover el archivo a su posicion final, ojo con las rutas
move_uploaded_file($_FILES['foto']['tmp_name'], "fotos/$nuevo_nombre");
//Insercion de los datos, ojo la imagen se graba con su nombre original en la tabla (es un campo varchar)
$sql_ins = "INSERT INTO foto VALUES ('','$archivo')";
Efectivamente mueves el archivo a "fotos/$nuevo_nombre" ... Pero al guardar la ruta ...
No haces lo mismo.
Guardas solamente el nombre de la imagen como fue subida.
Deberia ser:
$sql_ins = "INSERT INTO foto VALUES ('','fotos/$nuevo_nombre')";