Используйте PDO
Не используйте подавление ошибок (@)
Добавьте проверку MIME загружаемого файла
Ознакомьтесь с
fkn.ktu10.com/?q=node/7015
Постарайтесь отделить хотя бы формирование html от логики
И решение вашей проблемы:
Не используйте оригинальное имя файла. Генерируйте случайное достаточной длины или формируйте его другим образом. Кроме проблемы с кодировкой и проблемными символами которые могут быть в имени файла, вам надо так же позаботиться, чтобы имена файлов в одной директории не совпадали.
Для манипуляции изображением, ресайза и тд используйте специализированную библиотеку, хороший вариант:
image.intervention.io