Se connecter avec
S'enregistrer | Connectez-vous

php : interdire upload d'une image avec même nom

Dernière réponse : dans Programmation

bonjour à tous,

je tente désespérément d'empêcher un upload d'une image qui aurait le même nom qu'une autre déjà présente dans le dossier "photos" (du coup, logo.jpg est remplacé par une image qui a le même nom et que j'ai chargé ultérieurement).

ET je ne vois pas comment faire malgré les tuto !!!
Je me doute que c'est une condition mais laquelle et où ?

voici mon code php :

Citation :
<?php
$dossier = 'photos/';
$fichier = basename($_FILES['mon_image']['name']);
$taille_maxi = 1000000000;
$taille = filesize($_FILES['mon_image']['tmp_name']);
$extensions = array('.png', '.gif', '.jpg', '.jpeg');
$extension = strrchr($_FILES['mon_image']['name'], '.');

$connexion=mysql_connect ('localhost','root','') or die ("impossible de se connecter à la base de données");
mysql_select_db ('phototheque');

if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
{
$erreur = "Vous devez charger un fichier de type png, gif, jpg, jpeg";
}
if($taille>$taille_maxi)
{
$erreur = "le fichier est trop gros...";
}
if(!isset($erreur))
{
$fichier = strtr($fichier,
'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
$fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
if(move_uploaded_file($_FILES['mon_image']['tmp_name'], $dossier . $fichier))
{
echo "succès !";
}
else
{
echo "échec du chargement !";
}
}
else
{
echo $erreur;
}

mysql_close($connexion);

?>


si quelqu'un a une idée voire un superbe lien que j'ai pas encore trouvé...
merci d'avance

Autres pages sur : php interdire upload image nom

Lassé par la pub ? Créez un compte

ça marche pas en fait car tout les upload sont dégagés !!!
aucun ne passe à cause de la nouvelle condition.
pourtant mon code paraît bon :

Citation :

<?php
$dossier = 'photos/';
$fichier = basename($_FILES['mon_image']['name']);
$taille_maxi = 1000000000;
$taille = filesize($_FILES['mon_image']['tmp_name']);
$extensions = array('.png', '.gif', '.jpg', '.jpeg');
$extension = strrchr($_FILES['mon_image']['name'], '.');

$connexion=mysql_connect ('localhost','root','') or die ("impossible de se connecter à la base de données");
mysql_select_db ('phototheque');

if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
{
$erreur = "Vous devez charger un fichier de type png, gif, jpg, jpeg";
}
if($taille>$taille_maxi)
{
$erreur = "le fichier est trop gros...";
}
if (!file_exists ($dossier . $fichier))
{
$erreur = "déjà là";
}
if(!isset($erreur))
{
$fichier = strtr($fichier,
'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
$fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
if(move_uploaded_file($_FILES['mon_image']['tmp_name'], $dossier . $fichier))
{
echo "succès !";
}
else
{
echo "échec du chargement !";
}
}
else
{
echo $erreur;
}

mysql_close($connexion);

?>


j'vois vraiment pas là...
faute de syntaxe? petit oubli? :heink: 

merci pour votre aide

camzo a dit :
parfait parfait,, j'ai mis :

Citation :
if (!file_exists ($dossier . $fichier))
{
$erreur = "
déjà là
";
}


meri bien


tu as pas bien compris mon post, tu remarqueras que j'ai mis un ! avant le file_exists () ce qui veut dire n'existe pas
et c'est dans le else que j'affiche l'erreur

de plus dans ton programme, tu compares $fichier avant de le formater, il ne le trouvera donc pas dans le repertoire s'il contient un accent ou tout ce que tu enleves avant de le sauver


EDIT: d'ailleurs je ne comprends pas bien, pourquoi tu n'as pas simplement repris le squelette que j'ai mis au lieu de mettre un nieme variable ($erreur) que tu retestes dans le if avant le move_...?

pour le ! j'ai juste testé. et comme tu le dis, faut le laisser. Pour la suite, j'ai pas tout pigé (désolé, j'suis pas ben fort...). Mis, j'ai esaayé quand même et :

  1. if(!isset($erreur))
  2. if (!file_exists ($dossier . $fichier))
  3. {
  4. $fichier = strtr($fichier,
  5. 'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
  6. 'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
  7. $fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
  8. if(move_uploaded_file($_FILES['mon_image']['tmp_name'], $dossier . $fichier))
  9. {
  10. echo "succès !";
  11. }
  12. else
  13. {
  14. echo "fichier existe déjà\n";
  15. }


c'est plus ça...?
merci de me donner ton avis

je viens de relire ton code, j'ai pas remarqué que tu utilisais $erreur autre part :) 
essaye ca:
  1. $fichier = strtr($fichier,
  2. 'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
  3. 'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
  4. $fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
  5. // a ce stade $fichier devrait exactement correspondre au nom sur le disque
  6. if (file_exists ($dossier . $fichier))
  7. {
  8. $erreur = "le fichier existe déjà";
  9. }
  10. if(!isset($erreur))
  11. {
  12. if(move_uploaded_file($_FILES['mon_image']['tmp_name'], $dossier . $fichier))
  13. {
  14. echo "succès !";
  15. }
  16. else
  17. {
  18. echo "ehec du chargement\n";
  19. }
  20. }
  21. else
  22. echo $erreur;


et il faudrait ne pas tester le reste des conditions une fois qu'une erreur est détécté, c'est une perte de temps

ok ok... ça marche. et je crois comprendre maintenant quand tu disais qu'il fallait formater avant... effectivement, le strtr(fichier, était mal placé, etc.

bref, mes variables étaient mal placées (trop loin en fait). Mais j'avoue que j'aurais pas pensé à mettre le !isset...

merci en tout cas car ça m'éclairci (et m'aide) grandement !!!
Lassé par la pub ? Créez un compte
Tom's guide dans le monde