Upload d'image en php

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Upload d'image en php

par Hywan » 12 juin 2008, 09:14

Fatigué moi hier soir :P.
Merci AB de m'avoir repris.

par AB » 12 juin 2008, 03:04

Euh, j'ai été mauvais sur le coup. C'est si le tableau n'est pas vide qu'on effectue le script :
if(!empty($_FILES['tof1'])) {

    // ça ira mieux.
}
et pas de bidouille à ce niveau là au moins :).

Désolé :oops:.
Ben si petite bidouille quand même :lol:
Parce qu'après l'envoi du formulaire le tableau $_FILES['tof1'] ne sera jamais vide :wink: même si aucun fichier n'a été sélectionné.

Pour faire la différence entre un champ renseigné ou non il faudrait faire
if(!empty($_FILES['tof1']['name'])){

    // ça ira bien.
}

par sylver » 12 juin 2008, 00:12

Ok, j'avais déjà testé ça aussi en fait (j'ai fait tellement de tests, je m'embrouille moi-même). Et ça m'affiche quand même le message d'erreur "Photo 1 : Veuillez sélectionner un fichier de type png, gif ou jpg !". Encore une fois je ne sais pas pourquoi, mais j'ai abandonné l'idée même qu'il y ait une logique dans tout ça :s Merci quand même :)

par Hywan » 11 juin 2008, 23:51

Euh, j'ai été mauvais sur le coup. C'est si le tableau n'est pas vide qu'on effectue le script :
if(!empty($_FILES['tof1'])) {

    // ça ira mieux.
}
et pas de bidouille à ce niveau là au moins :).

Désolé :oops:.

par sylver » 11 juin 2008, 23:39

Alors tout d'abord, merci. Je viens d'essayer ce que tu me dis et le formulaire se valide bien, sans aucun message d'erreur... mais aucune image n'a réellement été uploadée et aucune donnée n'a été envoyé dans la base :s

Mais heureusement, je n'ai pas lâché l'affaire en me disant que quelqu'un trouverait bien la solution pour moi. J'ai donc continué à chercher et à tester pendant tout ce temps et je crois que j'ai enfin trouvé ! Je comprends pas comment, mais ça fonctionne ! Je vous dis ce que j'ai fait, ça servira peut-être à quelqu'un d'autre :

Donc c'est toujours avec le code que j'ai mis en premier, et il faut juste ajouter cette ligne avant :
if($_FILES['tof1']['name']) {
// script ici, sans oublier de refermer l'accolade :p
}
Par contre je déconseille quand même de réutiliser mon code, parce que je crois que j'ai bidouillé un tas de choses (avec le "rand" notamment), le script original est facilement trouvable sur internet ;) (je pense que je l'ai trouvé sur php.net)

par Hywan » 11 juin 2008, 23:22

Hey :),

Si tu envoies un formulaire qui contient un champ de type fichier, le tableau $_FILES existera forcément, excepté … qu'il sera vide. Il faut donc utiliser empty et pas isset :
if(empty($_FILES['tof1'])) {

    // …
}
Normalement, c'est ça :).

Upload d'image en php

par sylver » 11 juin 2008, 21:21

Bonjour bonjour !

Alors voilà, je travaille en ce moment sur un formulaire php avec base de données MySQL. L'internaute peut envoyer ses données et uploader 3 photos sur le serveur s'il le souhaite (tout en envoyant l'url de l'image dans la base de données). Je suis arrivée à faire tout ça, mais là où ça bug, c'est si l'internaute choisi de ne pas envoyer d'image (laissant donc le champ vide).

Voilà le script utilisé pour traiter l'upload :
if(isset($_FILES['tof1'])) {
  // params
  $rand = rand (1000, 9999);
  unset($erreur);  
  $extensions_ok = array('png', 'gif', 'jpg', 'jpeg');
  $taille_max = 500000;
  $dest_dossier = 'gall/';
  // vérifications
  if( !in_array( substr(strrchr($_FILES['tof1']['name'], '.'), 1), $extensions_ok ) )
  {
    $erreur = 'Photo 1 : Veuillez sélectionner un fichier de type png, gif ou jpg !';  
  }
  elseif( file_exists($_FILES['tof1']['tmp_name']) 
          and filesize($_FILES['tof1']['tmp_name']) > $taille_max)
  {
    $erreur = 'Photo 1 : Votre fichier doit faire moins de 500Ko !';
  }
  // copie du fichier
  if(!isset($erreur))
  {
    $dest_fichier = basename($_FILES['tof1']['name']);
    // formatage nom fichier
    // enlever les accents
    $dest_fichier = strtr($dest_fichier, 'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
    // remplacer les caracteres autres que lettres, chiffres et point par _
    $dest_fichier = preg_replace('/([^.a-z0-9]+)/i', '_', $dest_fichier);
    // copie du fichier
    move_uploaded_file($_FILES['tof1']['tmp_name'], $dest_dossier . $rand . $dest_fichier);
	$photo1= $rand.$dest_fichier; 
  }
}
Dans le formulaire le champs concerné est :

Code : Tout sélectionner

<b>Photo 1 :</b> <input type="file" name="tof1" id="tof1" size="45" />
Et si je laisse ce champs vide, j'arrive au premier message d'erreur qui est "Photo 1 : Veuillez sélectionner un fichier de type png, gif ou jpg !". J'ai essayé plusieurs codes, comme entourer tout ce script avec :
if (empty($_POST['tof1'])) {echo ("pas de photo 1");}
else {
[i]le code ci-dessus[/i]
}
Voilà, je précise que je débute vraiment en php (je sais que je m'attaque à du lourd). J'avance à coup de "tests", en utilisant des scripts trouvés par-ci par-là. Mais ce que je voudrais ne doit pas être si compliqué à faire si ? Cela fait des heures que je tourne en rond avec ça. Et ce que je trouve sur internet ne s'applique pas à mon code. Peut-être qu'il existe une solution évidente à vos yeux mais que je n'arrive pas à trouver à force d'y réfléchir. Donc si vous avez quelque chose à me proposez, n'hésitez pas. Merci beaucoup !