Ton script php est appelé par le navigateur quand il tente d'afficher l'image :
<img src='afficher_image.php?prenom=Dorian'/>
En l'état actuel, il faut donc que ton script retourne obligatoirement une image (c'est à dire le flux binaire correspondant à l'image sollicitée par la balise <img>. Le problème, c'est que lorsque l'image n'est pas en base, tu retournes une balise html et non pas l'image qu'elle doit afficher...
Au niveau de ton code, tu peux soit faire un simple header('Location:...') lorsque l'image n'est pas stockée en base, pour que le navigateur soit redirigé vers l'image physique (il récupérera donc le flux de l'image et l'affichera à l'endroit souhaité).
Soit, pour rester cohérent, mais c'est nettement moins optimisé, lorsque l'image n'est pas stockée en base, aller lire l'image physique sur le disque avec php, et retourner le flux de celle-ci comme lorsque celui-ci provient de ta base.
Dans les deux cas, le navigateur recevra bien une image et pourra l'afficher à l'écran
