Upload une image

Résolu
daryle -  
 daryle -
Bonjour,
j'ai un formulaire avec plusieurs donnees a enregistrer dans la base de donnee donc une image en fait j' ai bel et bien suivi les procedure mais mon probleme que je ne trouve pas l'image dans mon dossier ( qui a pour nom uploads)
pourtant jai le nom dans la base de donnee
voici le coe pour le formulaire je vais vous envoye juste la ligne de 'image
<div class="md-form mb-5">
<label for="text">image illustatif</label>
<input name="g" value="100000" style=" border: 2px solid skyblue;" type="file" id="form3" class="form-control validate"required >
</div>

et voici le php
pour soumetre mon formulaire
<?php
$bd=new PDO('mysql:host=localhost;dbname=afrijob','root','manuella2001');
$request="SELECT * FROM emploie";
$resultat=$bd->query($request);
$a=isset($_POST["a"])?$_POST["a"]:"";
$b=isset($_POST["b"])?$_POST["b"]:"";
$c=isset($_POST["c"])?$_POST["c"]:"";
$z=isset($_POST["z"])?$_POST["z"]:"";
$d=isset($_POST["d"])?$_POST["d"]:"";
$e=isset($_POST["e"])?$_POST["e"]:"";
$f=isset($_POST["f"])?$_POST["f"]:"";
$g=isset($_FILES["g"]["name"])?$_FILES["g"]["name"]:"";
$h=isset($_POST["h"])?$_POST["h"]:"";
$i=isset($_POST["i"])?$_POST["i"]:"";
$j=isset($_POST["j"])?$_POST["j"]:"";
$k=isset($_POST["k"])?$_POST["k"]:"";
$l=isset($_POST["l"])?$_POST["l"]:"";
move_uploaded_file($g,'uploads/'.$g);
$requete= "INSERT INTO emploie(nom_entr, poste, ville, type_contrat,nbre,img_emploi,date_limite,cmt_post,email_emploi,site,whatsapp,sms,appel) VALUES ('".$a."','".$b."','".$c."','".$z."','".$d."','".$g."','".$e."','".$f."'
,'".$h."','".$i."','".$j."','".$k."','".$l."')";
$params=array($a,$b,$c,$z,$d,$g,$e,$f,$h,$i,$j,$k,$l);
$resultat=$bd->prepare($requete);
$resultat->execute($params);
header( 'location:index.php?reg_err=offre_publier_avec_succes');
?>
je tiens a preciser que tous les autres elements s'enregistre parfaitement

8 réponses

  1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
     
    Bonjour,

    Comme je te l'ai déjà indiqué ....
    Tu dois utiliser les balises de code pour poster du code sur le forum.
    Explications ( à lire entièrement !! ) disponibles ici :
    https://codes-sources.commentcamarche.net/faq/11288-poster-un-extrait-de-code

    Pour ce qui est de ton souci...
    Ajoute donc un IF autour de la fonction moveuploadedfile ...
    $tmp_name = !empty($_FILES["g"]['tmp_name']) ? $_FILES["g"]['tmp_name']: NULL;
    if (! move_uploaded_file($tmp_name, 'uploads/'.$g)) {
      echo " Error :" . $tmp_name ;
    }
    


    et met en commentaire la redirection pour voir les éventuelles erreurs.

    Pense aussi à activer l'affichage des erreurs php.
    Je t'invite, par ailleurs, à lire et à appliquer le contenu de ce lien https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
    Et pour éviter tout souci futur (même si ce n'est pas le cas pour l'instant... ) avec tes requêtes, le contenu de ce lien :
    https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
    1
  2. daryle
     
    j'ai essayer mais sa ne fonctionne toujours pas
    1
    1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
       
      Si tu ne nous montres pas le code modifié que tu as essayé... Impossible de trouver ce qui n'est pas bon..
      0
  3. daryle
     
    $g=isset($_FILES["g"]["tmp_name"])?$_FILES["g"]["tmp_name"]:"";if(!move_uploaded_file($g,'uploads/'.$g)){
        echo "error:".$g;
    }
    $requete= "INSERT INTO emploie(nom_entr, poste, ville, type_contrat,nbre,img_emploi,date_limite,cmt_post,email_emploi,site,whatsapp,sms,appel) VALUES ('".$a."','".$b."','".$c."','".$z."','".$d."','".$g."','".$e."','".$f."'
    ,'".$h."','".$i."','".$j."','".$k."','".$l."')";
    $params=array($a,$b,$c,$z,$d,$g,$e,$f,$h,$i,$j,$k,$l);
    $resultat=$bd->prepare($requete);
    $resultat->execute($params);
    header( 'location:index.php?reg_err=offre_publier_avec_succes');
    ?>
    1
    1. daryle
       
      voici le code que j'ai tester avec vos modification
      0
      1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832 > daryle
         
        alors bon..; c'est le code COMPLET qu'il nous faut .. pas juste quelques morceaux .. sinon on ne s'en sortira jamais.
        0
  4. daryle
     
    voici mon formulaire
    <form action="envoie.php" method="POST" enctype="multipart/form-data">
          <div class="container my-4"  style=" text-align: center; ">
            <div class="modal fade" id="modalSubscriptionForm" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"
                    aria-hidden="true">
              <div class="modal-dialog" role="document">
                  <div class="modal-content" style="overflow-y:scroll;">
                    <div class="modal-header text-center">
                      <h4 class="modal-title w-100 font-weight-bold">crée l'annonce</h4>
                      <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                      <span aria-hidden="true">×</span>
                    </button>
                  </div>
                  <div class="modal-body mx-3">
                    <div class="md-form mb-5">
                      <label for="text">nom de l'entreprise</label>
                      <input name="a" style=" border: 2px solid skyblue;" type="text" id="form3" class="form-control validate" placeholder="entrer le nom de votre entreprise" required >
                    </div>
    
                    <div class="md-form mb-5">
                      <label for="text">poste</label>
                      <input style=" border: 2px solid skyblue;" name="b" type="text" id="form3" class="form-control validate" placeholder="nom du poste"required >
                    </div>
    
                    <div class="md-form mb-5">
                      <label for="text">ville</label>
                      <input name="c" style=" border: 2px solid skyblue;" type="text" id="form3" class="form-control validate" placeholder="entrer la ville de l'offre'"required >
                    </div>
    
                    <div class="md-form mb-5">
                       <select name="z" style=" border: 2px solid skyblue; height: 50px;" id="form3" class="form-control validate"required >
                        <option > type de contrat</option>
                        <option > CDI</option>
                        <option > CDD</option>
                        <option > stage accademique</option>
                        <option> stage proffesionnel</option>
                        <option > stage pre-emploi</option>
                      </select>
                    </div>
    
                    <div class="md-form mb-5">
                      <label for="text">nombre de place</label>
                      <input name="d" style=" border: 2px solid skyblue;" type="number" id="form3" class="form-control validate" placeholder=" le nombre de place disponible"required >
                    </div>
                    <div class="md-form mb-5">
                      <label for="text">date limite</label>
                    
                      <input name="e" style=" border: 2px solid skyblue;" type="date" id="form3" class="form-control validate" placeholder="date limite pour postuler"required >
                    </div>
    
                    <div class="md-form mb-5">
                      <label for="text">comment postulerr</label>
                      <!-- <input type="text" id="form3" class="form-control validate" placeholder=" decrivez les conditions et comment postulez "> -->
                    <textarea name="f"  required  placeholder=" decrivez les conditions pour postuler et comment postulez " style="  width: 400px;height: 150px; border: 2px solid skyblue;"></textarea>
                    </div>
    
                    <div class="md-form mb-5">
                      <label for="text">image illustatif</label>
                      <input name="g" value="100000" style=" border: 2px solid skyblue;" type="file" id="form3" class="form-control validate"required >
                    </div>
                    <div class="md-form mb-5">
                      <label for="text">comment vous contacter</label><br><br>
                      <label for="text">email</label>
                      <input name="h" style=" border: 2px solid skyblue;" type="email" id="form2" class="form-control validate" placeholder="votre adresse email">
    
                      <label for="text">site internet</label>
                      <input name="i" style=" border: 2px solid skyblue;" type="url" id="form2" class="form-control validate" placeholder="le lien de votre site web">
    
                      <label for="text"> whatsapp</label>
                      <input name="j" style=" border: 2px solid skyblue;" type="tel" id="form2" class="form-control validate" placeholder=" votre numero whatsapp">
    
                      <label for="text">sms</label>
                      <input name="k" style=" border: 2px solid skyblue;" type="tel" id="form2" class="form-control validate" placeholder=" votre numero pour sms">
    
                      <label for="text" >appel</label>
                      <input name="l"  style=" border: 2px solid skyblue;"type="tel" id="form2" class="form-control validate" placeholder=" vottre numero pour appel">
                      
                    </div>
                </div>
                  <div class="modal-footer d-flex justify-content-center">
                    
                    <input type="submit" name="submit" value="publiez votre annonce"style=" background-color:rgb(7, 196, 48);  border-radius: 10px;   width: 200px;  height: 50px; "> 
                  </div>
              </div>
            </div>
          </div>
          <div class="text-center">
            <a href="" class="btn btn-default btn-rounded mb-4" data-toggle="modal" data-target="#modalSubscriptionForm" style=" background-color: orchid; border:black; color:white; ">publiez votre offre</a>
          </div>
    
        </div>
    </form> 
    1
    1. daryle
       
      voici mon code php
      <?php
      error_reporting(E_ALL);
      ini_set('display_errors', TRUE);
      ini_set('display_startup_errors', TRUE);
      $bd=new PDO('mysql:host=localhost;dbname=afrijob','root','manuella2001');
      $request="SELECT * FROM emploie";
      $resultat=$bd->query($request);
      $a=isset($_POST["a"])?$_POST["a"]:"";
      $b=isset($_POST["b"])?$_POST["b"]:"";
      $c=isset($_POST["c"])?$_POST["c"]:"";
      $z=isset($_POST["z"])?$_POST["z"]:"";
      $d=isset($_POST["d"])?$_POST["d"]:"";
      $e=isset($_POST["e"])?$_POST["e"]:"";
      $f=isset($_POST["f"])?$_POST["f"]:"";
      $g=isset($_FILES["g"]["tmp_name"])?$_FILES["g"]["tmp_name"]:"";
      $h=isset($_POST["h"])?$_POST["h"]:"";
      $i=isset($_POST["i"])?$_POST["i"]:"";
      $j=isset($_POST["j"])?$_POST["j"]:"";
      $k=isset($_POST["k"])?$_POST["k"]:"";
      $l=isset($_POST["l"])?$_POST["l"]:"";
      if(!move_uploaded_file($g,'uploads/'.$g)){
          echo "error:".$g;
      }
      $requete= "INSERT INTO emploie(nom_entr, poste, ville, type_contrat,nbre,img_emploi,date_limite,cmt_post,email_emploi,site,whatsapp,sms,appel) VALUES ('".$a."','".$b."','".$c."','".$z."','".$d."','".$g."','".$e."','".$f."'
      ,'".$h."','".$i."','".$j."','".$k."','".$l."')";
      $params=array($a,$b,$c,$z,$d,$g,$e,$f,$h,$i,$j,$k,$l);
      $resultat=$bd->prepare($requete);
      $resultat->execute($params);
      header( 'location:index.php?reg_err=offre_publier_avec_succes');
      ?>
      0
      1. daryle > jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention  
         
        pour les erreurs j'ai fais mais pour la redirection j'ai pas compris comment faire
        0
      2. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832 > daryle
         
        Ben tu supprimes ou tu lets en commentaire la ligne 29
        0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. daryle
     
    je fais et voici le message que j'ai reçu

    Avertissement : move_uploaded_file(uploads//tmp/phppaSu7D) : échec de l'ouverture du flux : Aucun fichier ou répertoire de ce type dans /var/www/public/afrijob/envoie.php à la ligne 21

    Avertissement : move_uploaded_file() : Impossible de déplacer '/tmp /phppaSu7D' vers 'uploads//tmp/phppaSu7D' dans /var/www/public/afrijob/envoie.php à la ligne 21 erreur :/tmp/phppaSu7D

    normalement l'image doit être transferer a ladresse /var/www/public/afrijob/uploads mais la c'est plutôt /var/www/public/afrijob/envoie.php
    1
  7. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
     
    Peux tu tester ce script

    <?php
    
    //---------------------------------//
    // Affichage des erreurs PHP
    //---------------------------------//
    error_reporting(E_ALL);
    ini_set('display_errors', TRUE);
    ini_set('display_startup_errors', TRUE);
    
    //---------------------------------//
    //connexion à la base avec activation des erreurs PDO
    //---------------------------------//
    try {
      $bdd = new PDO('mysql:host=localhost;dbname=afrijob', 'root', 'manuella2001');
    // 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());
    }
    
    //---------------------------------//
    // FONCTIONS
    //---------------------------------//
    function getPost($varName, $defaultValue = "") {
      return isset($_POST[$varName]) ? $_POST[$varName] : $defaultValue;
    }
    
    function getFiles($fieldFileName) {
      return !empty($_FILES[$fieldFileName]) ? $_FILES[$fieldFileName] : NULL;
    }
    
    function moveFile($fieldFileName, $uploadDir = 'upload/') {
    
      $maxUploadFileSize = 100000;
    
      $phpFileUploadErrors = array(
          0 => 'There is no error, the file uploaded with success',
          1 => 'The uploaded file exceeds the upload_max_filesize directive in php.ini',
          2 => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form',
          3 => 'The uploaded file was only partially uploaded',
          4 => 'No file was uploaded',
          6 => 'Missing a temporary folder',
          7 => 'Failed to write file to disk.',
          8 => 'A PHP extension stopped the file upload.',
      );
    
      // récupération propre des variables avant de les utiliser
      $F = getFiles($fieldFileName);
      $fileTmpPath = $F['tmp_name'];
      $fileName = $F['name'];
      $fileSize = $F['size'];
      $fileType = $F['type']; // Si tu veux vérifier le type mime du fichier..
    
    
      //on vérifie qu'il n'y a pas d'erreur dans le $_FILES
      $error = !empty($F['error']) ? $phpFileUploadErrors[$F['error']] : NULL;
      if ($error) {
        echo $error;
        return false;
      }
    
    
      if (!is_dir($uploadDir)) {
        // si le dossier de destination n'existe pas on le créé !
        mkdir($uploadDir, 0755, true);
      }
    
      // on vérifie que le répertoire de déstination est accessible en écriture
      if (!is_writable($uploadDir)) {
        echo "Permission denied on " . $uploadDir;
        return false;
      }
    
    
    // on vérifie la taille du fichier envoyé
      if ($fileSize > $maxUploadFileSize) {
        echo "file Size Error : " . $fileSize;
        return false;
      }
    
      $dest_path = $uploadDir . $fileName;
    
    //On vérifie que le fichier s'est chargé sur le serveur
      if (!is_uploaded_file($fileTmpPath)) {
        echo "upload file error ";
        return false;
      }
    
    //On déplace le fichier dans son répertoire finale
      if (move_uploaded_file($fileTmpPath, $dest_path)) {
        return $fileName;
      } else {
        echo 'There was some error moving the file to upload directory. Please make sure the upload directory is writable by web server.';
        return false;
      }
    }
    
    //---------------------------------//
    // Début du script :
    //---------------------------------//
    //récupération des variables POST et FILES
    $a = getPost('a');
    $b = getPost('b');
    $c = getPost('c');
    $d = getPost('d');
    $e = getPost('e');
    $f = getPost('f');
    $h = getPost('h');
    $i = getPost('i');
    $j = getPost('j');
    $k = getPost('k');
    $l = getPost('l');
    $z = getPost('z');
    
    //on upload le fichier
    $g = moveFile('g', 'uploads/');
    
    //Si il s'est bien uploadé...
    if ($g) {
    
      try {
        $requete = "INSERT INTO emploie(nom_entr, poste, ville, type_contrat,nbre,img_emploi,date_limite,cmt_post,email_emploi,site,whatsapp,sms,appel) 
                VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)";
        $params = array($a, $b, $c, $z, $d, $g, $e, $f, $h, $i, $j, $k, $l);
      } catch (Exception $ex) {
        $resultat = $bdd->prepare($requete);
        $resultat->execute($params);
        header('location:index.php?reg_err=offre_publier_avec_succes');
      }
      
    } else {
      echo "<br>Error !";
      exit;
    }
    
    
    


    Bien sûr, Si le souci persiste.. il faudra également vérifier que ton répertoire temp existe et a les droits en écriture par le user php
    Ton serveur web est sous quel OS ? ( tu es en LOCAL sur ton ordi ou sur un "vrai" serveur ? )
    Qu'as tu dans le php.ini au niveau de la ligne upload_tmp_dir

    1
    1. daryle
       
      je vous remercie et m'excuse du temps que je vous fais perdre
      je suis sur ubuntu 20.04 et je travail en local sur mon ordinateur
      j'ai essayer ton code mais j'ai reçu cette erreur

      Permission denied on uploads/
      Error !
      0
      1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832 > daryle
         
        Et bien ça veut dire que ton répertoire n'a pas les autorisations en écriture
        Assure-toi qu'il ait les permissions en 7 5 5 par exemple
        0
  8. daryle
     
    merciiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii beaucoup avec le message d'erreur je suis aller dans mon dossier uploads sur propriété et j'ai réglé le partage en local et j'ai ressaye et cela fonctionne normalement
    en fait le pb venais de mon OS
    merci pour votre aide vraiment c'etais ma première fois dans un forum et j'ai été satisfaite
    0
    1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
       
      Pour tes prochains codes, inspires toi quand même de celui que je t'ai donné...
      Bonne soirée.
      0