Bonjour,

Tout d'abord, c'est mon premier message ici et je débute en PDO, donc, en tant que débutante, j'aimerais faire appel à votre indulgence ;).
Concrêtement, je fais de la pdo pour permettre à mon site web statique d'avoir des fonctions dynamiques telles que des rédactions, supressions ou éditions d'articles. Comme ces articles sont des articles de portfolio, il peut y avoir une abondance de fichiers d'images pour une mise en page "single.php" potable ;).

L'upload se passe très bien. L'ennui, c'est l'update de mes fichiers image. Déjà, dans ma page "single.php", les images après l'update n'apparaissent pas, mais en plus; leur url n'apparaît pas sur ma bdd, contrairement à l'upload.

Voici Editform.php où toutes les données enregistrées apparaissent (fichiers comme données) :


// Connection à la BDD
<?php

if(isset($_GET['id']) && !empty($_GET['id']))
{
 $id = $_GET['id'];
 $stmt_edit = $bdd->prepare('SELECT * FROM articles WHERE id =:id');
 $stmt_edit->execute(array(':id'=>$id));
 $row = $stmt_edit->fetch(PDO::FETCH_ASSOC);
 extract($row);
}

 ?>
<?php

include '../inc/top.inc.php';

?>

<body class="nav-home" data-aos-easing="ease-out-back" data-aos-duration="1000" data-aos-delay="0">

  <?php

  include '../inc/menu.inc.php';

  ?>

<div id="layout6">
<div id="layout">

  <div class="main-articles">
    <ul id="header-contact">

    <li><h3 class="title-contact">Editer un Article</h3></li>

      </ul>

    <div class="articles-block">

  <?php

    $id=$_GET['id'];
    $result = $bdd->prepare("SELECT * FROM articles WHERE id= :id");
    $result->bindParam(':id', $id);
    $result->execute();
    for($i=0; $row = $result->fetch(); $i++){
  ?>

  <form method="post" action="edit.php" enctype="multipart/form-data" class="form-horizontal">
    <table class="articles-form" action="" method="POST" enctype="multipart/form-data">

  <label for="domaine">Domaine de l'article</label><br>
  <input type="text" name="domaine" value="<?php echo $row['domaine']; ?>" /> <br />
  <input type="hidden" name="id" value="<?php echo $id; ?>" />
  <label for="titre">Titre de l'article</label><br>
  <input type="text" name="titre" value="<?php echo $row['titre']; ?>" /> <br />
  <label for="legend">Brêve description du site web</label><br>
  <input type="text" name="legend" value="<?php echo $row['legend']; ?>"><br>
  <label for="quote">Intro de l'article du site web</label><br>
  <input type="text" name="quote" value="<?php echo $row['quote']; ?>"><br>

  <label for="img-upload">Fichier image (PNG, JPEG ou JPG | max. 8 Mo) :</label><br /><br>

            <p><img src="<?php echo $row['image']; ?>" height="150" width="150" /></p>
                <p><img src="<?php echo $pic; ?>" height="150" width="150" /></p>

  <input type="file" name="image" id="img-upload" /><br><br>

  <label for="img-upload">Fichier mockup (PNG, JPEG ou JPG | max. 8 Mo) :</label><br /><br>
            <p><img src="<?php echo $row['mockup']; ?>" height="150" width="150" /></p>
                            <p><img src="<?php echo $pic3; ?>" height="150" width="150" /></p>
  <input type="file" name="mockup" id="img-upload" /><br><br>

  <label for="img-upload">Fichier miniature (PNG, JPEG ou JPG | max. 8 Mo) :</label><br /><br>
            <p><img src="<?php echo $row['miniature']; ?>" height="150" width="150" /></p>
                            <p><img src="<?php echo $pic2; ?>" height="150" width="150" /></p>
  <input type="file" name="miniature" id="img-upload" /><br><br>

  <label for="video">Fichier vidéo:</label><br /><br>
  <video width="585" height="326.828" controls="controls">

<source src="<?php echo $vid; ?>" type='video/mp4'/> <br>
</video>
  <input type="file" name="video" id="video-upload" /><br><br>

  <label for="contenu">Votre Article</label><br><br>
  <textarea name="contenu" rows="10" cols="50"><?php echo $row['contenu']; ?></textarea><br /><br>
  <label for="lien">Lien externe du site web</label><br>
  <input type="text" name="lien" value="<?php echo $row['lien']; ?>"><br>

  <br><br>
  <input type="submit" name="save" value="Sauvegarder" /><input type="button" class="cancelbtn" value="annuler" onclick="history.back()"  />
    </table>
  </form>

  </form>
  <?php
    }

  ?>

  </div>

  </div>

</div>

</div>
                    <?php

                    include '../inc/footer1.inc.php';
                    ?>

Et voici ensuite le fameux edit.php qui me pose problême. Hormis les fichiers, toutes les autres données sont udpdatées :

// Connection BDD
<?php

$titre= isset($_POST['titre']) ? $_POST['titre']:'';
$contenu= isset($_POST['contenu']) ? $_POST['contenu']:'';
$image=isset($_FILES['image']) ? $_FILES['image']:'';
$mockup=isset($_FILES['mockup']) ? $_FILES['mockup']:'';
$lien=isset($_POST['lien']) ? $_POST['lien']:'';
$legend= isset($_POST['legend']) ? $_POST['legend']:'';
$miniature=isset($_FILES['miniature']) ? $_FILES['miniature']:'';
$domaine= isset($_POST['domaine']) ? $_POST['domaine']:'';
$quote= isset($_POST['quote']) ? $_POST['quote']:'';
$video= isset($_POST['video']) ? $_POST['video']:'';

 ?>

 <?php

 $dossier = 'uploads/';
 $fichier = basename($_FILES['image']['name']);
 $taille_maxi = 8000000;
 $taille = filesize($_FILES['image']['tmp_name']);
 $extensions = array('.png', '.gif', '.jpg', '.jpeg');
 $extension = strrchr($_FILES['image']['name'], '.');

 $fichier2 = basename($_FILES['miniature']['name']);
 $taille2 = filesize($_FILES['miniature']['tmp_name']);
 $extension2 = strrchr($_FILES['miniature']['name'], '.');

 $fichier3 = basename($_FILES['video']['name']);
 $taille3 = filesize($_FILES['video']['tmp_name']);
 $extension3 = strrchr($_FILES['video']['name'], '.');

 $fichier4 = basename($_FILES['mockup']['name']);
 $taille4 = filesize($_FILES['mockup']['tmp_name']);
 $extension4 = strrchr($_FILES['mockup']['name'], '.');
  ?>

 <?php

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

     $id = $_POST['id'];
     $titre = $_POST['titre'];
     $legend = $_POST['legend'];
     $contenu = $_POST['contenu'];
     $lien = $_POST['lien'];
     $domaine= $_POST['domaine'];
     $quote= $_POST['quote'];

     $fichier = $_FILES['image']['name'];
     $fichier2 = $_FILES['miniature']['name'];
     $fichier3 = $_FILES['video']['name'];
     $fichier4 = $_FILES['mockup']['name'];
     $tmp_fichier = $_FILES['image']['tmp_name'];
     $tmp_fichier2 = $_FILES['miniature']['tmp_name'];
     $tmp_fichier3 = $_FILES['video']['tmp_name'];
     $tmp_fichier4 = $_FILES['mockup']['tmp_name'];
     $taille = $_FILES['image']['size'];
     $taille2 = $_FILES['miniature']['size'];
     $taille3 = $_FILES['video']['size'];
     $taille4 = $_FILES['mockup']['size'];

     if($fichier)
     {
         $dossier = 'uploads/'; // uploads/
         $extension = strtolower(pathinfo($fichier,PATHINFO_EXTENSION)); // avoir l'extension de l'img
         $extensions = array('jpeg', 'jpg', 'png', 'gif', 'mp4');  // extensions valides
         $pic = rand(1000,1000000).".".$extension;
         if(in_array($extension, $extensions))
         {
             if($taille < 8000000)
             {
                 unlink($dossier.$row['image']);
                 move_uploaded_file($tmp_fichier,$dossier.$pic1);
             }
             else
             {
                 $erreur = "Désolé, le fichier est trop lourd, il ne doit pas être supérieur à 8MB";
             }
         }
         else
         {
             $erreur = "Désolé, seuls les fichiers d'extensions JPG, JPEG, PNG, MP4 & GIF files sont autorisés.";
         }
     }
     if($fichier2)
     {
     $dossier = 'uploads/'; // uploads/
     $extension2 = strtolower(pathinfo($fichier2,PATHINFO_EXTENSION)); // avoir l'extension de l'img
     $extensions = array('jpeg', 'jpg', 'png', 'gif', 'mp4'); // extensions valides
     $pic2 = rand(1000,1000000).".".$extension2;
         if(in_array($extension2, $extensions))
         {
             if($taille2 < 8000000)
             {
                 unlink($dossier.$row['miniature']);
                 move_uploaded_file($tmp_fichier2,$dossier.$pic2);
             }
             else
             {
                 $erreur = "Désolé, le fichier est trop lourd, il ne doit pas être supérieur à 8MB";
             }
         }
         else
         {
             $erreur = "Désolé, seuls les fichiers d'extensions JPG, JPEG, PNG, MP4 & GIF files sont autorisés.";
         }
     }

   if($fichier4)
     {
     $dossier = 'uploads/'; // uploads/
     $extension4 = strtolower(pathinfo($fichier4,PATHINFO_EXTENSION)); // avoir l'extension de l'img
     $extensions = array('jpeg', 'jpg', 'png', 'gif', 'mp4'); // extensions valides
     $pic3 = rand(1000,1000000).".".$extension4;
         if(in_array($extension4, $extensions))
         {
             if($taille4 < 8000000)
             {
                 unlink($dossier.$row['mockup']);
                 move_uploaded_file($tmp_fichier4,$dossier.$pic3);
             }
             else
             {
                 $erreur = "Désolé, le fichier est trop lourd, il ne doit pas être supérieur à 8MB";
             }
         }
         else
         {
             $erreur = "Désolé, seuls les fichiers d'extensions JPG, JPEG, PNG, MP4 & GIF files sont autorisés.";
         }
     }

   if($fichier3)
   {

     $tmp_name=$_FILES['uploadvideo']['tmp_name'];
     $target_path="video/";
     $target_path=$target_path.basename($cname);
     if(move_uploaded_file($_FILES['uploadvideo']['tmp_name'],$target_path))
     {
     echo $sql="INSERT INTO tbl_video(name,type) VALUE('".$cname."','".$type."')";
     $result=mysql_query($sql);
     echo "Your video ".$cname." has been successfully uploaded";
     }
     }

      $dossier = 'uploads/'; // uploads/
      $extension3 = strtolower(pathinfo($fichier3,PATHINFO_EXTENSION)); // avoir l'extension de la vidéo
      $extensions = array('jpeg', 'jpg', 'png', 'gif', 'mp4'); // extensions valides
      $vid = rand(1000,1000000).".".$extension3;
      if(in_array($extension3, $extensions))
     {
       if($taille3 < 100000000000000)
       {
         unlink($dossier.$row['video']);
         move_uploaded_file($tmp_fichier3,$dossier.$vid);
       }
       else
       {
         $erreur = "Désolé, le fichier est trop lourd, il ne doit pas être supérieur à 8MB";
       }
     }
     else
     {
       $erreur = "Désolé, seuls les fichiers d'extensions JPG, JPEG, PNG, MP4 & GIF files sont autorisés.";
     }

     else
     {
         // s'il n'y a pas de fichiers sélectionnés, laisser tel quel
     $pic = $row['image']; // ancienne image de la bdd
     $pic2 = $row['miniature']; // ancienne image de la bdd
     $pic3 = $row['mockup']; // ancienne image de la bdd
     $vid = $row['video']; // ancienne vidéo de la bdd
     }
   }

     // si pas d'erreurs, continue ....
     if(!isset($erreur))
     {

     $id = $_POST['id'];
     $titre = $_POST['titre'];
     $legend = $_POST['legend'];
     $contenu = $_POST['contenu'];
     $image = $_POST['image'];
     $mockup = $_POST['mockup'];
     $miniature = $_POST['miniature'];
     $lien = $_POST['lien'];
     $domaine = $_POST['domaine'];
     $quote = $_POST['quote'];
     $video = $_POST['video'];

   $queryupdate = "UPDATE articles SET titre = :titre, legend = :legend, contenu = :contenu, image = :image, mockup = :mockup, miniature = :miniature, lien = :lien, domaine = :domaine, quote = :quote, video = :video WHERE id = :id";
   $q = $bdd->prepare($queryupdate);
   $q->execute(array(

           'id' => $id,
           'titre' => $titre,
           'legend' => $legend,
           'contenu' => $contenu,
           'image' => $dossier . $fichier,
            'mockup' => $dossier . $fichier4,
            'miniature' => $dossier . $fichier2,
           'lien' => $lien,
            'domaine' => $domaine,
            'quote' => $quote,
            'video' => $video

         ));

         header('Location: web.php');

         if($q->execute()){

                echo "article modifié avec succès";

         }
         else{
             $erreur = "Désolé, les données n'ont pas pu être mises à jour!";
         }

     }

?>

Bon comme j'ai fait beaucoup de tests, il y a beaucoup de variables qui se trimballent. J'espère que mon code restera relativement visible.

D'avance; je vous remercie de m'avoir lue et de m'avoir consacré un peu de votre temps ;)

6 réponses


Sorry mais je ne comprend vraiment pas ton code. Pourrais tu nous dire où tu penses que ça bloque ? Déjà vois tu bien la variable $_FILE avec des valeurs ? Ton fichier est il physiquement au bon endroit ? ($target_path ?) ? As tu une quelconque erreur PHP ?

mysql_query([...]); // un moment tu executes une requête mais tu ne te connectes pas à la BDD avant.

Dans l'attente de tes informations.

Marni
Auteur

Bonjour Yanis-git,

Et merci pour m'avoir accordé un peu de temps. Pour la requête mysql_query, tu parles bien du deuxième code où je m'occupe d'insérer la vidéo ? Oui effectivement c'est une boulette; cela venait d'un second test PDO que j'avais fait et je l'ai rajouté optionnellement car je n'ai pas spécialement besoin de vidéos dans le résultat single de cette rubrique là :) je vais regarder ça, il est possible que cela n'arrange rien si je ne fonctionne pas sur la même bdd ^^.

Pour le fichier, me demanderais tu si à la vue de editform.php il serait présent ?
Car sinon; dans le formulaire, oui, tous les fichiers sont présents et affichés, dans ma bdd c'est pareil. Et ils sont physiquement tous là.
C'est plus quand je cherche à éditer ces paramêtres, donc, quand le traitement se fait que je m'apperçois que ces dits-fichiers disparaissent quand les autres données sont, elles, sauvegardées et updatées.

J'espère avoir pu répondre à toutes tes questions.

Bon je reposte mon nouveau code après avoir enlevé cette boulette honteuse ^^:


<?php

$titre= isset($_POST['titre']) ? $_POST['titre']:'';
$contenu= isset($_POST['contenu']) ? $_POST['contenu']:'';
$image=isset($_FILES['image']) ? $_FILES['image']:'';
$mockup=isset($_FILES['mockup']) ? $_FILES['mockup']:'';
$lien=isset($_POST['lien']) ? $_POST['lien']:'';
$legend= isset($_POST['legend']) ? $_POST['legend']:'';
$miniature=isset($_FILES['miniature']) ? $_FILES['miniature']:'';
$domaine= isset($_POST['domaine']) ? $_POST['domaine']:'';
$quote= isset($_POST['quote']) ? $_POST['quote']:'';
$video= isset($_POST['video']) ? $_POST['video']:'';

 ?>

 <?php

 $dossier = 'uploads/';
 $fichier = basename($_FILES['image']['name']);
 $taille_maxi = 8000000;
 $taille = filesize($_FILES['image']['tmp_name']);
 $extensions = array('.png', '.gif', '.jpg', '.jpeg');
 $extension = strrchr($_FILES['image']['name'], '.');

 $fichier2 = basename($_FILES['miniature']['name']);
 $taille2 = filesize($_FILES['miniature']['tmp_name']);
 $extension2 = strrchr($_FILES['miniature']['name'], '.');

 $fichier3 = basename($_FILES['video']['name']);
 $taille3 = filesize($_FILES['video']['tmp_name']);
 $extension3 = strrchr($_FILES['video']['name'], '.');

 $fichier4 = basename($_FILES['mockup']['name']);
 $taille4 = filesize($_FILES['mockup']['tmp_name']);
 $extension4 = strrchr($_FILES['mockup']['name'], '.');
  ?>

 <?php

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

     $id = $_POST['id'];
     $titre = $_POST['titre'];
     $legend = $_POST['legend'];
     $contenu = $_POST['contenu'];
     $lien = $_POST['lien'];
   $domaine= $_POST['domaine'];
   $quote= $_POST['quote'];

     $fichier = $_FILES['image']['name'];
     $fichier2 = $_FILES['miniature']['name'];
   $fichier3 = $_FILES['video']['name'];
   $fichier4 = $_FILES['mockup']['name'];
     $tmp_fichier = $_FILES['image']['tmp_name'];
     $tmp_fichier2 = $_FILES['miniature']['tmp_name'];
   $tmp_fichier3 = $_FILES['video']['tmp_name'];
   $tmp_fichier4 = $_FILES['mockup']['tmp_name'];
     $taille = $_FILES['image']['size'];
     $taille2 = $_FILES['miniature']['size'];
   $taille3 = $_FILES['video']['size'];
   $taille4 = $_FILES['mockup']['size'];

     if($fichier)
     {
         $dossier = 'uploads/'; // uploads/
         $extension = strtolower(pathinfo($fichier,PATHINFO_EXTENSION)); // avoir l'extension de l'img
         $extensions = array('jpeg', 'jpg', 'png', 'gif', 'mp4');  // extensions valides
         $pic = rand(1000,1000000).".".$extension;
         if(in_array($extension, $extensions))
         {
             if($taille < 8000000)
             {
                 unlink($dossier.$row['image']);
                 move_uploaded_file($tmp_fichier,$dossier.$pic1);
             }
             else
             {
                 $erreur = "Désolé, le fichier est trop lourd, il ne doit pas être supérieur à 8MB";
             }
         }
         else
         {
             $erreur = "Désolé, seuls les fichiers d'extensions JPG, JPEG, PNG, MP4 & GIF files sont autorisés.";
         }
     }
     if($fichier2)
     {
     $dossier = 'uploads/'; // uploads/
         $extension2 = strtolower(pathinfo($fichier2,PATHINFO_EXTENSION)); // avoir l'extension de l'img
         $extensions = array('jpeg', 'jpg', 'png', 'gif', 'mp4'); // extensions valides
         $pic2 = rand(1000,1000000).".".$extension2;
         if(in_array($extension2, $extensions))
         {
             if($taille2 < 8000000)
             {
                 unlink($dossier.$row['miniature']);
                 move_uploaded_file($tmp_fichier2,$dossier.$pic2);
             }
             else
             {
                 $erreur = "Désolé, le fichier est trop lourd, il ne doit pas être supérieur à 8MB";
             }
         }
         else
         {
             $erreur = "Désolé, seuls les fichiers d'extensions JPG, JPEG, PNG, MP4 & GIF files sont autorisés.";
         }
     }

   if($fichier4)
     {
     $dossier = 'uploads/'; // uploads/
         $extension4 = strtolower(pathinfo($fichier4,PATHINFO_EXTENSION)); // avoir l'extension de l'img
         $extensions = array('jpeg', 'jpg', 'png', 'gif', 'mp4'); // extensions valides
         $pic3 = rand(1000,1000000).".".$extension4;
         if(in_array($extension4, $extensions))
         {
             if($taille4 < 8000000)
             {
                 unlink($dossier.$row['mockup']);
                 move_uploaded_file($tmp_fichier4,$dossier.$pic3);
             }
             else
             {
                 $erreur = "Désolé, le fichier est trop lourd, il ne doit pas être supérieur à 8MB";
             }
         }
         else
         {
             $erreur = "Désolé, seuls les fichiers d'extensions JPG, JPEG, PNG, MP4 & GIF files sont autorisés.";
         }
     }

   if($fichier3)
   {

      $dossier = 'uploads/'; // uploads/
     $extension3 = strtolower(pathinfo($fichier3,PATHINFO_EXTENSION)); // avoir l'extension de la vidéo
     $extensions = array('jpeg', 'jpg', 'png', 'gif', 'mp4'); // extensions valides
     $vid = rand(1000,1000000).".".$extension3;
     if(in_array($extension3, $extensions))
     {
       if($taille3 < 100000000000000)
       {
         unlink($dossier.$row['video']);
         move_uploaded_file($tmp_fichier3,$dossier.$vid);
       }
       else
       {
         $erreur = "Désolé, le fichier est trop lourd, il ne doit pas être supérieur à 8MB";
       }
     }
     else
     {
       $erreur = "Désolé, seuls les fichiers d'extensions JPG, JPEG, PNG, MP4 & GIF files sont autorisés.";
     }
   }

     else
     {
         // s'il n'y a pas de fichiers sélectionnés, laisser tel quel
         $pic = $row['image']; // ancienne image de la bdd
         $pic2 = $row['miniature']; // ancienne image de la bdd
     $pic3 = $row['mockup']; // ancienne image de la bdd
     $vid = $row['video']; // ancienne vidéo de la bdd
     }
   }

     // si pas d'erreurs, continue ....
     if(!isset($erreur))
     {

     $id = $_POST['id'];
     $titre = $_POST['titre'];
     $legend = $_POST['legend'];
     $contenu = $_POST['contenu'];
     $image = $_POST['image'];
     $mockup = $_POST['mockup'];
     $miniature = $_POST['miniature'];
     $lien = $_POST['lien'];
     $domaine = $_POST['domaine'];
     $quote = $_POST['quote'];
     $video = $_POST['video'];

   $queryupdate = "UPDATE articles SET titre = :titre, legend = :legend, contenu = :contenu, image = :image, mockup = :mockup, miniature = :miniature, lien = :lien, domaine = :domaine, quote = :quote, video = :video WHERE id = :id";
   $q = $bdd->prepare($queryupdate);
   $q->execute(array(

           'id' => $id,
           'titre' => $titre,
           'legend' => $legend,
           'contenu' => $contenu,
           'image' => $dossier . $fichier,
            'mockup' => $dossier . $fichier4,
            'miniature' => $dossier . $fichier2,
           'lien' => $lien,
            'domaine' => $domaine,
            'quote' => $quote,
            'video' => $video

         ));

         header('Location: web.php');

         if($q->execute()){

                echo "article modifié avec succès";

         }
         else{
             $erreur = "Désolé, les données n'ont pas pu être mises à jour!";
         }

     }

?>

Toujours le même résultat; à savoir :

1) si je n'édite que les données : les données sont éditées avec succès mais mes fichiers ne restent pas tels quels comme mon code le souhaiterait, les fichiers se retrouvent supprimés y compris de ma base de données. Donc factuellement, ces lignes ne marchent pas :

 // s'il n'y a pas de fichiers sélectionnés, laisser tel quel
         $pic = $row['image']; // ancienne image de la bdd
         $pic2 = $row['miniature']; // ancienne image de la bdd
     $pic3 = $row['mockup']; // ancienne image de la bdd
     $vid = $row['video']; // ancienne vidéo de la bdd

2) si je n'édite qu'un seul fichier sur les 3 requis, celui-ci sera effectivement mis à jour mais cela effacera les autres fichiers de la bdd.
nb : si je veux pouvoir garder les 3 fichiers requis intacts, je suis obligée de tous les éditer en même temps.

Mon souhait : J'aurais le contenu à éditer et j'aimerais bien pouvoir l'éditer seul, sans ques les fichiers s'en aillent. J'aimerais bien pouvoir éditer un fichier seul sans que les deux autres s'en aillent. Sinon, cela ferait comme si je rédigeais carrément un nouvel article : la perte de temps ....

Je pense qu'il y a une erreur dans mes conditions. En bougeant le '}' tout en bas de la 1ère condition save qui est la suivante :

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

le résulat revient au même.
Je dois trouver une condition permettant l'indépendance de l'édit de l'un des fichiers sur les autres. Mais aussi une condition permettant l'indépendance des édits de données textes sur les fichiers.

Je ne sais pas si c'est clair.

Marni
Auteur

Bonjour,

J'ai passé une bonne partie de mon temps à essayer de trifouiller mes conditions et le résultat est toujours le même, je dois toujours m'obliger à éditer les 3 fichiers d'image quand j'update quoi que ce soit sinon celles-ci disparaissent, même si le reste de l'édition se fait correctement. De même que si je veux éditer une image, je suis obligée de resélectionner et éditer les deux autres sinon elles disparaissent toutes. Je suis désemparée.

Bonjour Marni,

Tu sembles un peu confuse, je vais tacher de t'aider.

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

     $id = $_POST['id'];
    // [..]
     $fichier = $_FILES['image']['name'];
     $fichier2 = $_FILES['miniature']['name'];
     $fichier3 = $_FILES['video']['name'];
     $fichier4 = $_FILES['mockup']['name'];
   // [..]

Je me trompe peut-être, mais ton souci est relativement simple et tu as casiment mis le doigt dessus,

la partie que je t'ai mis ci-dessus reprend systématiquement le name de tes fichiers depuis le formulaire, hors tu veux pouvoir mettre à jour sans avoir à toujours changer l'ensemble des fichiers.

Il te faut donc quelques choses tel que tu l'as fait plus loin :

// [...]
     else
     {
         // s'il n'y a pas de fichiers sélectionnés, laisser tel quel
         $pic = $row['image']; // ancienne image de la bdd
         $pic2 = $row['miniature']; // ancienne image de la bdd
     $pic3 = $row['mockup']; // ancienne image de la bdd
     $vid = $row['video']; // ancienne vidéo de la bdd
     }
// [...]

Sauf que tu ne réutilises jamais les variables.. préfères donc.

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

     $id = $_POST['id'];
    // [..]
    //si le fichier existe alors on prend son name, sinon on prend celui de la base.
     $fichier = (!empty($_FILES['image']['name']))?$_FILES['image']['name']:$image; 
     $fichier2 = (!empty($_FILES['miniature']['name']))?$_FILES['miniature']['name']:$miniature;
     $fichier3 = (!empty($_FILES['video']['name']))?$_FILES['video']['name']:$video;
     $fichier4 = (!empty($_FILES['mockup']['name']))?$_FILES['mockup']['name']:$mockup;
   // [..]
Marni
Auteur

Bonjour et merci Yanis-git,

J'avais réglé le problème hier soir, mais du coup; ma technique est bourrine, mais ça marche très bien :)


<?php

$id= isset($_POST['id']) ? $_POST['id']:'';
$titre= isset($_POST['titre']) ? $_POST['titre']:'';
$contenu= isset($_POST['contenu']) ? $_POST['contenu']:'';
$image=isset($_FILES['image']) ? $_FILES['image']:'';
$mockup=isset($_FILES['mockup']) ? $_FILES['mockup']:'';
$lien=isset($_POST['lien']) ? $_POST['lien']:'';
$legend= isset($_POST['legend']) ? $_POST['legend']:'';
$miniature=isset($_FILES['miniature']) ? $_FILES['miniature']:'';
$domaine= isset($_POST['domaine']) ? $_POST['domaine']:'';
$quote= isset($_POST['quote']) ? $_POST['quote']:'';
$video= isset($_POST['video']) ? $_POST['video']:'';

 ?>

 <?php

 $dossier = 'uploads/';
 $fichier = basename($_FILES['image']['name']);
 $taille_maxi = 8000000;
 $taille = filesize($_FILES['image']['tmp_name']);
 $extensions = array('.png', '.gif', '.jpg', '.jpeg');
 $extension = strrchr($_FILES['image']['name'], '.');

 $fichier2 = basename($_FILES['miniature']['name']);
 $taille2 = filesize($_FILES['miniature']['tmp_name']);
 $extension2 = strrchr($_FILES['miniature']['name'], '.');

 $fichier3 = basename($_FILES['video']['name']);
 $taille3 = filesize($_FILES['video']['tmp_name']);
 $extension3 = strrchr($_FILES['video']['name'], '.');

 $fichier4 = basename($_FILES['mockup']['name']);
 $taille4 = filesize($_FILES['mockup']['tmp_name']);
 $extension4 = strrchr($_FILES['mockup']['name'], '.');
  ?>

<?php

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

        $id = $_POST['id'];
        $titre = $_POST['titre'];
        $legend = $_POST['legend'];
        $contenu = $_POST['contenu'];
        $lien = $_POST['lien'];
        $domaine= $_POST['domaine'];
        $quote= $_POST['quote'];

        $fichier = $_FILES['image']['name'];
        $fichier2 = $_FILES['miniature']['name'];
        $fichier3 = $_FILES['video']['name'];
        $fichier4 = $_FILES['mockup']['name'];
        $tmp_fichier = $_FILES['image']['tmp_name'];
        $tmp_fichier2 = $_FILES['miniature']['tmp_name'];
        $tmp_fichier3 = $_FILES['video']['tmp_name'];
        $tmp_fichier4 = $_FILES['mockup']['tmp_name'];
        $taille = $_FILES['image']['size'];
        $taille2 = $_FILES['miniature']['size'];
        $taille3 = $_FILES['video']['size'];
        $taille4 = $_FILES['mockup']['size'];

        if(!$fichier)
         {
          // s'il n'y a pas de fichiers sélectionnés, laisser tel quel
          $pic = $row['image']; // ancienne image de la bdd
        }
        if(!$fichier2)
        {
          // s'il n'y a pas de fichiers sélectionnés, laisser tel quel
          $pic2 = $row['miniature']; // ancienne image de la bdd
        }
        if(!$fichier3)
        {
        // s'il n'y a pas de fichiers sélectionnés, laisser tel quel
         $vid = $row['video']; // ancienne vidéo de la bdd
        }

        if(!$fichier4)
        {
          // s'il n'y a pas de fichiers sélectionnés, laisser tel quel
          $pic3 = $row['mockup']; // ancienne image de la bdd
        }

   $queryupdate5 = "UPDATE articles SET id = :id, titre = :titre, contenu = :contenu, lien = :lien, legend = :legend, domaine = :domaine, quote = :quote WHERE id = :id";
   $maj5 = $bdd->prepare($queryupdate5);
   $maj5->execute(array(
        'id' => $id,
        'titre' => $titre,
        'contenu' => $contenu,
        'lien' => $lien,
        'legend' => $legend,
        'domaine' => $domaine,
        'quote' => $quote

         ));

    header('Location: web-admin.php');

    if($maj5->execute()){

       echo "article modifié avec succès";

    }
    else{

      $erreur = "Désolé, les données n'ont pas pu être mises à jour!";

        }
}

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

  $id = $_POST['id'];
  $titre = $_POST['titre'];
  $legend = $_POST['legend'];
  $contenu = $_POST['contenu'];
  $lien = $_POST['lien'];
  $domaine= $_POST['domaine'];
  $quote= $_POST['quote'];

  $fichier = $_FILES['image']['name'];
  $fichier2 = $_FILES['miniature']['name'];
  $fichier3 = $_FILES['video']['name'];
  $fichier4 = $_FILES['mockup']['name'];
  $tmp_fichier = $_FILES['image']['tmp_name'];
  $tmp_fichier2 = $_FILES['miniature']['tmp_name'];
  $tmp_fichier3 = $_FILES['video']['tmp_name'];
  $tmp_fichier4 = $_FILES['mockup']['tmp_name'];
  $taille = $_FILES['image']['size'];
  $taille2 = $_FILES['miniature']['size'];
  $taille3 = $_FILES['video']['size'];
  $taille4 = $_FILES['mockup']['size'];

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

    $id = $_POST['id'];
    $titre = $_POST['titre'];
    $legend = $_POST['legend'];
    $contenu = $_POST['contenu'];
    $lien = $_POST['lien'];
    $domaine= $_POST['domaine'];
    $quote= $_POST['quote'];

    $fichier = $_FILES['image']['name'];
    $fichier2 = $_FILES['miniature']['name'];
    $fichier3 = $_FILES['video']['name'];
    $fichier4 = $_FILES['mockup']['name'];
    $tmp_fichier = $_FILES['image']['tmp_name'];
    $tmp_fichier2 = $_FILES['miniature']['tmp_name'];
    $tmp_fichier3 = $_FILES['video']['tmp_name'];
    $tmp_fichier4 = $_FILES['mockup']['tmp_name'];
    $taille = $_FILES['image']['size'];
    $taille2 = $_FILES['miniature']['size'];
    $taille3 = $_FILES['video']['size'];
    $taille4 = $_FILES['mockup']['size'];

    if($fichier)
    {
      $dossier = 'uploads/'; // uploads/
      $extension = strtolower(pathinfo($fichier,PATHINFO_EXTENSION)); // avoir l'extension de l'img
      $extensions = array('jpeg', 'jpg', 'png', 'gif', 'mp4');  // extensions valides
      $pic = rand(1000,1000000).".".$extension;
      if(in_array($extension, $extensions))
      {
        if($taille < 8000000)
        {
          unlink($dossier.$row['image']);
          move_uploaded_file($tmp_fichier,$dossier.$pic);
          $req1 = $bdd->prepare('UPDATE articles SET id = :id, image = :image WHERE id = :id');
          $req1->execute(array(
            'image' => $dossier . $fichier,
            'id' => $id,
          ));
        }
        else
        {
          $erreur = "Désolé, le fichier est trop lourd, il ne doit pas être supérieur à 8MB";
        }
      }
      else
      {
        $erreur = "Désolé, seuls les fichiers d'extensions JPG, JPEG, PNG, MP4 & GIF files sont autorisés.";
      }
    }

    if($fichier2)
    {
      $dossier = 'uploads/'; // uploads/
      $extension2 = strtolower(pathinfo($fichier2,PATHINFO_EXTENSION)); // avoir l'extension de l'img
      $extensions = array('jpeg', 'jpg', 'png', 'gif', 'mp4'); // extensions valides
      $pic2 = rand(1000,1000000).".".$extension2;
      if(in_array($extension2, $extensions))
      {
        if($taille2 < 8000000)
        {
          unlink($dossier.$row['miniature']);
          move_uploaded_file($tmp_fichier2,$dossier.$pic2);
          $req2 = $bdd->prepare('UPDATE articles SET id = :id, miniature = :miniature WHERE id = :id');
          $req2->execute(array(
            'miniature' => $dossier . $fichier2,
            'id' => $id,
          ));
        }
        else
        {
          $erreur = "Désolé, le fichier est trop lourd, il ne doit pas être supérieur à 8MB";
        }
      }
      else
      {
        $erreur = "Désolé, seuls les fichiers d'extensions JPG, JPEG, PNG, MP4 & GIF files sont autorisés.";
      }
    }

    if($fichier4)
    {
      $dossier = 'uploads/'; // uploads/
      $extension4 = strtolower(pathinfo($fichier4,PATHINFO_EXTENSION)); // avoir l'extension de l'img
      $extensions = array('jpeg', 'jpg', 'png', 'gif', 'mp4'); // extensions valides
      $pic3 = rand(1000,1000000).".".$extension4;
      if(in_array($extension4, $extensions))
      {
        if($taille4 < 8000000)
        {
          unlink($dossier.$row['mockup']);
          move_uploaded_file($tmp_fichier4,$dossier.$pic3);
          $req3 = $bdd->prepare('UPDATE articles SET id = :id, mockup = :mockup WHERE id = :id');
          $req3->execute(array(
            'mockup' => $dossier . $fichier4,
            'id' => $id,
          ));
        }
        else
        {
          $erreur = "Désolé, le fichier est trop lourd, il ne doit pas être supérieur à 8MB";
        }
      }
      else
      {
        $erreur = "Désolé, seuls les fichiers d'extensions JPG, JPEG, PNG, MP4 & GIF files sont autorisés.";
      }
    }

    if($fichier3)
    {
      $dossier = 'uploads/'; // uploads/
      $extension3 = strtolower(pathinfo($fichier3,PATHINFO_EXTENSION)); // avoir l'extension de la vidéo
      $extensions = array('jpeg', 'jpg', 'png', 'gif', 'mp4'); // extensions valides
      $vid = rand(1000,1000000).".".$extension3;
      if(in_array($extension3, $extensions))
      {
        if($taille3 < 100000000000000)
        {
          unlink($dossier.$row['video']);
          move_uploaded_file($tmp_fichier3,$dossier.$vid);
          $req4 = $bdd->prepare('UPDATE articles SET id = :id, video = :video WHERE id = :id');
          $req4->execute(array(
            'video' => $dossier . $fichier3,
            'id' => $id,
          ));
        }
        else
        {
          $erreur = "Désolé, le fichier est trop lourd, il ne doit pas être supérieur à 8MB";
        }
      }
      else
        {
        $erreur = "Désolé, seuls les fichiers d'extensions JPG, JPEG, PNG, MP4 & GIF files sont autorisés.";
        }
    }
  }

     // si pas d'erreurs, continue ....
     if(!isset($erreur))
     {

   $queryupdate = "UPDATE articles SET id = :id, ordre = :ordre, titre = :titre, legend = :legend, contenu = :contenu, lien = :lien, domaine = :domaine, quote = :quote WHERE id = :id";
   $q = $bdd->prepare($queryupdate);
   $q->execute(array(

           'id' => $id,
           'ordre' => $ordre,
           'titre' => $titre,
           'legend' => $legend,
           'contenu' => $contenu,
           'lien' => $lien,
            'domaine' => $domaine,
            'quote' => $quote

         ));

         header('Location: web-admin.php');

         if($q->execute()){

                echo "article modifié avec succès";

         }

     }
 }

?>

Pour l'instant je continue le php mais en faisant en même temps du css. Cela me change un peu, mais j'essayerai ton code et te tiendrai au courrant. Je suis contente car j'ai également enfin trouvé comment on traite le NULL dans myqsl avec PDO et ça m'embêtait depuis un certain moment. Sinon, j'ai bien conscience de la redondance de mon code ^^ mais je peux modifier n'importequoi et no problem ;)

Je vais tester ton code demain et te tiendrais au courrant, mais ce que je lis me parle, effectivement; ces variables je ne les ai pas réutilisées ;)

Bonjour à toi :)

Il te faudrait travailler un peu plus avec des tableaux pour mutualiser ton code, comme tu le dis si bien, tu copy-past beaucoup de code. Je me suis permis de te fournir une version alléger de ton code (moins de champ, moins de code, et quelques traitements retiré). Cela permettra de travailler une un même code.

Partie DB :

--
-- Structure de la table `article`
--

CREATE TABLE `article` (
  `id` int(11) NOT NULL,
  `title` varchar(255) NOT NULL,
  `content` text NOT NULL,
  `image` varchar(255) NOT NULL,
  `mockup` varchar(255) NOT NULL,
  `thumbnail` varchar(255) NOT NULL,
  `link` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Contenu de la table `article`
--

INSERT INTO `article` (`id`, `title`, `content`, `image`, `mockup`, `thumbnail`, `link`) VALUES
(1, 'lorem 2', 'lorem', 'images/Capture d’écran 2017-04-07 à 14.28.05.png', '/path/to/lorem.jpg', '/path/to/lorem.jpg', 'http://google.com');

ALTER TABLE `article`
  ADD PRIMARY KEY (`id`);

Partie formulaire :

<?php 
$db = new PDO('mysql:host=localhost;dbname=grafikart_26067', 'root', 'root');
$stmt = $db->prepare('SELECT * FROM article WHERE id = :id');
$stmt->bindParam(':id',$_GET["id"],PDO::PARAM_INT);
$stmt->execute();
$article = $stmt->fetch(PDO::FETCH_ASSOC);
/**
 * Cette partie est importante car elle te permet d'assumer, après la condition, que tu traites bien un article existant en base.
 **/
if(empty($article)){
    //DO YOUR 404 here.
    echo 'Article : '.$_GET["id"].'doesn\'t exist'; 
    exit;
}
?>
<!DOCTYPE html>
<html>
<head>
    <title>Edit : article</title>
</head>
<body>
<form action="server.php" method="post" enctype="multipart/form-data">
    <input type="hidden" name="id" value="<?=$article['id']?>">
    <p><input type="text" name="title" placeholder="title" value="<?=$article['title']?>"></p>
    <p><input type="text" name="link" placeholder="link" value="<?=$article['link']?>"></p>
    <p><textarea name="content"><?=$article['content']?></textarea></p>
    <p><input type="file" name="image"></p>
    <p><input type="file" name="mockup"></p>
    <p><input type="file" name="thumbnail"></p>
    <input type="submit" name="">
</form>
</body>
</html>

Partie traitement edit.php :

<?php
//Cette partie est importante, elle permet d'assurer que tu traites bien un POST avec la donnée minimum "id"
if(empty($_POST) || empty($_POST['id'])){
    header("Location: somewhere.php");
    exit;
}

$db = new PDO('mysql:host=localhost;dbname=grafikart_26067', 'root', 'root');
$stmt = $db->prepare('SELECT * FROM article WHERE id = :id');
$stmt->bindParam(':id',$_POST["id"],PDO::PARAM_INT);
$stmt->execute();
$article = $stmt->fetch(PDO::FETCH_ASSOC);
/**
 * Cette partie est importante car elle te permet d'assumer, après la condition, que tu traites bien un article existant en base.
 **/
if(empty($article)){
    //DO YOUR 404 here.
    header("Location: somewhere.php");
    exit;
}

/**
 * ici tu as bien ton article !
 * Faisons les traitments.
 **/
//un referentiel de tes fields. On va assumer que tes input front portent le même nom que tes champs en base de donnée.
$fields = ['title','link','content'];
$values = [];
foreach($fields as $field){
    if(!empty($article[$field]))//vérifie si le champ existe bien dans la structure de la bdd.
        $values[$field] = (!empty($_POST[$field]))?$_POST[$field]:$article[$field];//si la valeur est bien dans POST, on la prend, sinon on garde l'encienne valeur
}

/**
 * Ici on fait le traitement pour les fichiers à upload.
 **/

$fileFields = [
    'image' => ['type' => 'image'],
    'mockup' => ['type' => 'image'],
    'thumbnail' => ['type' => 'image']
];
foreach ($_FILES as $field => $file) {
    if(empty($fileFields[$field]))
        continue;//si on connait pas le field courant, alors on le traite même pas.
    //si on est sur un type image ET que l'extension correspond bien à ce que l'on veut.
    if($fileFields[$field]['type'] === 'image' && in_array(getExt(basename($file['name'])),['jpg','jpeg','png'])){
        $files[] = $file; // on ajoute à la pile pour déplacer le fichier.
        $values[$field] = "images/".basename($file['name']); // on ajoute au champ qu'on va sauvegarder. Tu peux faire ton post traitment renommer ici.
        uploadFile($file['tmp_name'],$values[$field]);
    }
}

// ici on craft dynamiquement la requête.
$query = "UPDATE article SET ";
$cpt = 0;
$last = count($values) - 1;
foreach ($values as $field => $value) {
    $query .= $field.' = :'.$field;
    //on rajoute une virgule SAUF pour le dernier.
    if($cpt < $last)
        $query .= ', ';
    $cpt++;
}
$query .= " WHERE id = :id";
$stmt = $db->prepare($query);
$stmt->execute(array_merge($values,['id' => $article['id']]));//on execute la requête en ajoutant l'id à la collection.

/***
 * Section Utils
***/

function getExt($file){
    //on divise la chaine de caractère avec un '.' comme séparateur
    $tmp = explode(".",$file);
    return $tmp[count($tmp) - 1];// on retourne le dernier element qu'on trouve : mon.fichier.mp4 retournera mp4
}

function uploadFile($tmpPath,$newPath){
    move_uploaded_file($tmpPath,$newPath);
}

Je t'ai mis vraiment partout des commentaires pour t'aider à comprendre, hésite si tu as des questions :)