Problème pour telecharger l'image

Résolu/Fermé
delavega470 Messages postés 298 Date d'inscription dimanche 9 février 2014 Statut Membre Dernière intervention 24 mars 2020 - 5 juil. 2017 à 10:11
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 - 5 juil. 2017 à 18:18
Bonjour à tous , j'essaye de uploader une photo mais je n'arrive pas je pourrai avoir un coup svp !
move_uploaded_file($file_tmp_name,$files_dest) je crois qu'il ya un souci la bas on dirai la variable est vide


<style type="text/css">
.error
{
	color: red;
} 
.success
{
	color:green;
	}</style>
<?php 
$bd = new PDO ('mysql:host=localhost; dbname=macom_bd','root','');
  if (isset($_POST['ok'])) {
  

  if(!empty( $_POST['nom_marq']))
  {
    if (!empty($_FILES)) {
  $file_name = $_FILES["image"]["name"];
  $file_extension = strrchr($file_name,".");
  $file_tmp_name = $_FILES['image']['tmp_name'];
  $files_dest = 'image/'.$file_name;
  $extension_autorisees = array('.jpeg','.JPEG','.png','.PNG','.gif','.GIF','.jpg','.JPG');
  $nom_marq = $_POST['nom_marq'];
  $statu = 1;
  echo $_FILES["image"]["size"];
  echo $file_tmp_name;
  //test si l'extension fait partie des extensions autorisées
   if(in_array($file_extension,$extension_autorisees))
   { 
     if($_FILES["image"]["size"] < 5000000)
     {
      //envoi du fichier
    if (move_uploaded_file($file_tmp_name,$files_dest) AND $_FILES["image"]["error"]==0) {
      
      //verification du fichier existant 
      $reponse = $bd->query('SELECT id from marque where img_marq="'.$file_name.'" ');
      $resultat = $reponse->fetch();
      if ($resultat) {
        echo "<font color='red'>Cette image existe déjà...</font>";
      } else {
        $req = $bd->prepare( 'INSERT INTO marque(nom_marq,im_marq,statu_img) VALUES (?,?,?)');
      $req->execute(array($nom_marq,$file_name,$statu));
      echo "<font color='green'>image envoyé avec succès</font>";
      }
      
    }  else {
      echo "<font color='red'>Une erreur est survenue lors de l'envoi de l'image</font>";
    }
  } else {
      echo "<font color='red'> Taille de l'image doit être inferieur a 5Mo </font>";
    }
    

   } else {
    echo "<font color='red'>seul les images jpeg,jpg,gif et png sont autorisés...</font>";
   }
} 
   else
      {
    echo "<span class ='error'>Veuillez remplir  les champs !</span>";
        }
    
    }
   
     else
      {
 	  echo "<span class ='error'>Veuillez remplir  les champs !</span>";
        }
 
}  

?>
A voir également:

8 réponses

jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
5 juil. 2017 à 10:16
Bonjour,

1 - commence par ça :https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs

2 - dis nous ce que tes echo t'affichent
0
delavega470 Messages postés 298 Date d'inscription dimanche 9 février 2014 Statut Membre Dernière intervention 24 mars 2020 48
5 juil. 2017 à 10:28
on me met ceux ci Warning: move_uploaded_file(image/vlcsnap-2017-03-03-09h23m18s102.png): failed to open stream: No such file or directory in C:\wamp\www\macom\pages\marque\send_marque.php on line 33
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649 > delavega470 Messages postés 298 Date d'inscription dimanche 9 février 2014 Statut Membre Dernière intervention 24 mars 2020
5 juil. 2017 à 11:13
le repertoire image existe ?
Il y a quels droits dessus ?

Tu peux aussi, avant de faire le move, t'assurer que le fichier est bien uploadé
https://www.php.net/manual/fr/function.is-uploaded-file.php
0
delavega470 Messages postés 298 Date d'inscription dimanche 9 février 2014 Statut Membre Dernière intervention 24 mars 2020 48
5 juil. 2017 à 12:05
le repertoire existe !
0
delavega470 Messages postés 298 Date d'inscription dimanche 9 février 2014 Statut Membre Dernière intervention 24 mars 2020 48
5 juil. 2017 à 12:09
j'ai fais le test le fichier est uploader
0
delavega470 Messages postés 298 Date d'inscription dimanche 9 février 2014 Statut Membre Dernière intervention 24 mars 2020 48
5 juil. 2017 à 13:18
une idée?
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
5 juil. 2017 à 13:21
une idée ? .... Oui.... mais je vais commencer par aller manger ....

Ensuite.. je verrai pour "améliorer" ton code et voir ce qui pourrait bloquer.

En attendant .. tu peux déjà répondre à ça :
- Au passage... tu es en local sur ton ordi ou sur un serveur ?
- Tu utilises quoi comme serveur ?
- As tu vérifié les droits sur le répertoire image ?
- Où se trouve ce répertoire dans ton calorescence ?
- Où se situe ton script par rapport à ce répertoire ?
0
delavega470 Messages postés 298 Date d'inscription dimanche 9 février 2014 Statut Membre Dernière intervention 24 mars 2020 48
5 juil. 2017 à 13:58
je suis en local sur mon ordi, j'utilise wampserver mon repertoir 'image' est juste au même endroit que mon script , juste a coté de send.php
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
5 juil. 2017 à 14:10
Et ton send.php il est où ? dans un sous répertoire ou à la racine de ton site ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
5 juil. 2017 à 15:17
Essayes ça :
<style type="text/css">
.error{
   color: red;
  } 
.success{
   color:green;
 }
</style>

<?php
//-------------------------------------------------------//
// Fonction d'insertion en BDD
//-------------------------------------------------------//
  function insertFileIntoBdd($file_name,$nom_marq,$statu){
    global $bd;
    
    //verification du fichier existant 
      $sql = 'SELECT id from marque where img_marq="'.$file_name.'" ';
      $reponse = $bd->query($sql);
      $resultat = $reponse->fetch();
      if ($resultat) {
        $result['err'] = "<font color='red'>Cette image existe déjà...</font>";
      } else {
        $sql =  'INSERT INTO marque(nom_marq,im_marq,statu_img) VALUES (?,?,?)';
        $datas = array($nom_marq,$file_name,$statu);
        try{
          $req = $bd->prepare($sql);
          $req->execute($datas);
          $result = true;
        }catch(Exception $e){
          $result['err'] = " Erreur ! " .$e->getMessage();
        }
      }
      return $result;
  }
  

//-------------------------------------------------------//  
 // connexion à la bdd
 // ici tu remets le code de connexion à la bdd
//-------------------------------------------------------//


//-------------------------------------------------------//
// traitement du formulaire
//-------------------------------------------------------//
  if (isset($_POST['ok'])) {
    
    //récupération PROPRE des variables AVANT de les utiliser
    $files = !empty($_FILES) ? $_FILES : NULL;
    $F = !empty($_FILES["image"]) ? $_FILES["image"] : NULL;
    $nom_marq = !empty($_POST['nom_marq']) ? $_POST['nom_marq'] : NULL;
    
    //parametres :
     $rep_dest = "image/";
     $extension_autorisees = array('.jpeg','.JPEG','.png','.PNG','.gif','.GIF','.jpg','.JPG');
        
    
    if($F){
         
      $error = $F["error"];
      $file_name = $F['name'];
      $size = $F['size'];
      $file_tmp_name = $F['tmp_name'];
      
      if(!$error){           
        if(is_dir($re_dest) && is_writable($re_dest)){
          $files_dest = $re_dest.$file_name;       
          $file_extension = strrchr($file_name,".");  
          if(in_array($file_extension,$extension_autorisees)) {
            if($size  < 5000000){
              if(is_uploaded_file($file_tmp_name)){
                if (move_uploaded_file($file_tmp_name,$files_dest)){
                   $statu = 1;
                   $result_insert = insertFileIntoBdd($file_name,$nom_marq,$statu);
                   if($result_insert === true){
                     echo "<font color='green'>image envoyé avec succès</font>";
                   }else{
                     $err[] = $result['err'];
                   } 
                }else{
                  $err[] = "Impossible de déplacer le fichier $file_tmp_name  vers $files_dest";
                }
              }else{
                $err[] = "Une erreur est survenue durant l'upload du fichier";
              }
            }else{
              $err[] = "($size) : Taille maximum autorisée dépassée ";
            }
          }else{
            $err[] = "Extension $file_extension non autorisée ";
          }
        }else{
          $err[] = "Repertoire de destination ($rep_dest )absent ou droits insufisants";
        }   
      }
    }    
  }
 
 //Affichage des erreurs si il y en a :
  if(!empty($err)){
    foreach($err as $_r){
      echo "<font color='red'>".$_r."</font>";
    }
  } 

0
delavega470 Messages postés 298 Date d'inscription dimanche 9 février 2014 Statut Membre Dernière intervention 24 mars 2020 48
5 juil. 2017 à 16:03
selon l'affichage le repertoir 'image' est absent mais il n'est pas absent !
0
delavega470 Messages postés 298 Date d'inscription dimanche 9 février 2014 Statut Membre Dernière intervention 24 mars 2020 48
5 juil. 2017 à 16:05
le dossier image est a coté de send.php le tout dans un dossier appelé marque
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649 > delavega470 Messages postés 298 Date d'inscription dimanche 9 février 2014 Statut Membre Dernière intervention 24 mars 2020
Modifié le 5 juil. 2017 à 16:21
et le dossier marque ... il se trouve où par rapport à la racine de ton site ????
car là :
$rep_dest = "image/";

voudrait dire que le dossier "image" se trouve A LA RACINE de ton site.

Donc.. soit tu passes par du chemin relatif ..... soit tu mets le chemin absolu en partant DE LA RACINE de ton site.
Donc :
Soit :
$rep_dest = "./image/";


Soit : (si le dossier marque est, lui même dans un dossier2 qui est lui dans un dossier dossier1 .. enfin.. tu comprends le principe..... )
$rep_dest = "dossier1/dossier2/marque/image/";
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649 > jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024
5 juil. 2017 à 16:22
perso.. je préconise le chemin ABSOLU depuis la racine du site....
0
delavega470 Messages postés 298 Date d'inscription dimanche 9 février 2014 Statut Membre Dernière intervention 24 mars 2020 48
5 juil. 2017 à 16:49
je crois c'est c'est bon mais j'ai maintenant ce message
Fatal error: Call to a member function fetch() on a non-object in C
0
delavega470 Messages postés 298 Date d'inscription dimanche 9 février 2014 Statut Membre Dernière intervention 24 mars 2020 48
5 juil. 2017 à 17:17
oui ça va maintenant mais la photo ne vas pas dans le dossier
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
5 juil. 2017 à 17:19
La photo ne va pas dans le dossier mais tu as aucun message d'erreur ???
Tu as quand même le message comme quoi ca c'est bien chargé et inséré dans la bdd ?
0
delavega470 Messages postés 298 Date d'inscription dimanche 9 février 2014 Statut Membre Dernière intervention 24 mars 2020 48
5 juil. 2017 à 17:25
oui le nom de la photo est dans la bd mais la photo ne se trouve pas dans le dossier voulu et en plus c'est renommer 'image'HP.jepg il ya tjrs image devant associé au vrai nom
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
5 juil. 2017 à 17:28
Tu dis : dans le bon dossier... c'est à dire ? Elle se trouve ailleurs ??
Ensuite tu nous dis :c'est renommer 'image'HP.jepg ... c'est renommé où ? Dans la BDD ? Dans le répertoire où elle se trouve ????

Faudrait aussi que tu nous montres ton code (celui que tu as désormais avec toutes les corrections que nous avons effectué...) pour qu'on sache si tu n'aurais pas fait une erreur en recopiant.......
0
delavega470 Messages postés 298 Date d'inscription dimanche 9 février 2014 Statut Membre Dernière intervention 24 mars 2020 48
5 juil. 2017 à 17:51
j'ai mis dans le dossier voulu c'est juste renommer dans le dossier pas dans la bd
0
delavega470 Messages postés 298 Date d'inscription dimanche 9 février 2014 Statut Membre Dernière intervention 24 mars 2020 48
Modifié le 5 juil. 2017 à 17:55
 <style type="text/css">
.error
{
 color: red;
} 
.success
{
 color:green;
 }</style>
<?php  
try{
$bd =new PDO('mysql:host=localhost;
 dbname=macom_bd; charset=utf8', 'root', '');
// Activation des erreurs PDO
 $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH
 $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
} catch(PDOException $e) {
    die('Erreur : ' . $e->getMessage());
}

  if (isset($_POST['ok'])) {
  

  if(!empty( $_POST['nom_marq']))
  {
    if (!empty($_FILES)) {
  $file_name = $_FILES["image"]["name"];
  $file_extension = strrchr($file_name,".");
  $file_tmp_name = $_FILES['image']['tmp_name'];
  $files_dest = 'marque/image/image'.$file_name;
  $extension_autorisees = array('.jpeg','.JPEG','.png','.PNG','.gif','.GIF','.jpg','.JPG');
  $nom_marq = $_POST['nom_marq'];
  $statu = 1;
  //test si l'extension fait partie des extensions autorisées
   if(in_array($file_extension,$extension_autorisees))
   { 
     if($_FILES["image"]["size"] < 5000000)
     {
      //envoi de l'image

    if (move_uploaded_file($file_tmp_name,$files_dest) AND $_FILES["image"]["error"]==0) {
      
      //verification de l'image existante
      $req =  'SELECT id_marq from marque where img_marq="'.$file_name.'" ';
      $reponse = $bd->query($req);
     // echo $req;
      $resultat = $reponse->fetch();
      if ($resultat) {
        echo "<font color='red'>Cette image existe déjà...</font>";
      } else {
        $req = $bd->prepare( 'INSERT INTO marque(nom_marq,img_marq,statu_marq) VALUES (?,?,?)');
      $req->execute(array($nom_marq,$file_name,$statu));
      echo "<font color='green'>image envoyé avec succès</font>";
      }
      
    }  else {
      echo "<font color='red'>Une erreur est survenue lors de l'envoi de l'image</font>";
    }
  } else {
      echo "<font color='red'> Taille de l'image doit être inferieur a 5Mo </font>";
    }
    

   } else {
    echo "<font color='red'>seul les images jpeg,jpg,gif et png sont autorisés...</font>";
   }
} 
   else
      {
    echo "<span class ='error'>Veuillez remplir  les champs !</span>";
        }
    
    }
   

      }

     else
      {
    echo "<span class ='error'>Veuillez remplir  les champs !</span>";
        } 
?>
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
5 juil. 2017 à 17:57
Regarde bien ton code
$files_dest = 'marque/image/image'.$file_name;
0
delavega470 Messages postés 298 Date d'inscription dimanche 9 février 2014 Statut Membre Dernière intervention 24 mars 2020 48
5 juil. 2017 à 18:05
merci pour coup d'oeil !!
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649 > delavega470 Messages postés 298 Date d'inscription dimanche 9 février 2014 Statut Membre Dernière intervention 24 mars 2020
5 juil. 2017 à 18:18
par contre je vois que je t'ai fait un code propre ... et que finalement tu as remis le tien... c'est dommage quand même...
0