Magazine Gadgets

Téléchargement d'images multiples avec légende – PHP – SitePoint Forums

Publié le 25 décembre 2023 par Mycamer



esu

5 juillet 2022, 16h00


1

J'essaie de télécharger plusieurs images avec légende, légende où l'utilisateur peut modifier et mettre à jour la légende.
Je n'ai aucun problème pour le téléchargement de plusieurs images, mais je n'arrive pas à comprendre comment ajouter une légende pour chaque image téléchargée avec l'option d'édition/mise à jour.

Page d'index des images pour le téléchargement du formulaire

<div class="container">
  <div class="row">
     <div class="col-md-3"></div>
      <div class="col-md-6">
        <div class="alert alert-success alert-dismissible" id="success" style="display: none;">
          <button type="button" class="close" data-dismiss="alert">&times;</button>
          File uploaded successfully
        </div>
      <form id="submitForm">
        <div class="form-group">
          <div class="custom-file mb-3">
            <input type="file" class="custom-file-input" name="multipleFile[]" id="multipleFile" required="" multiple>
            <label class="custom-file-label" for="multipleFile">Choose Multiple Images to Upload</label>
          </div>
        </div>
        <div class="form-group">
          <button type="submit" name="upload" class="btn btn-success btn-block">Upload File</button>
        </div>  
      </form>
    </div>
  </div>
  <!-- gallery view of uploaded images -->
  <div id="gallery"></div>
</div>

Code de téléchargement de plusieurs images

$sernamename = "localhost";
    $username    = "root";
    $passoword   = "";
    $databasename= "my_db";

    // Create database connection
    $con = mysqli_connect($sernamename, $username,$passoword,$databasename);

    // Check connection
    if ($con->connect_error) {
        die("Connection failed". $con->connect_error);
    }

  // Upload multiple image in Database using PHP MYSQL

  if (!empty($_FILES['multipleFile']['name'])) {

    $multiplefile = $_FILES['multipleFile']['name'];

    foreach ($multiplefile as $name => $value) {
      
    $allowImg = array('png','jpeg','jpg',''); 

    $fileExnt = explode('.', $multiplefile[$name]);

    if (in_array($fileExnt[1], $allowImg)) {

        if ($_FILES['multipleFile']['size'][$name] > 0 & $_FILES['multipleFile']['error'][$name]== 0) {
          
      $fileTmp = $_FILES['multipleFile']['tmp_name'][$name];
          
      $newFile =  rand(). '.'. $fileExnt[1];

      $target_dir="uploads/".$newFile; 

      if (move_uploaded_file($fileTmp, $target_dir)) {
          $query  = "INSERT INTO table_images (images) VALUES('$newFile')";
          mysqli_query($con, $query);
      }
        }
    }
      }
  } 

Récupérer les données pour afficher l'image soumise à partir de la base de données


  $query = "SELECT * FROM table_images";

  $result = mysqli_query($con, $query);
  
  if (mysqli_num_rows($result) > 0) {

      while ($row = mysqli_fetch_assoc($result)) {
    $images = $row['images'];
   
      

      ?>
        <div class="image" style="display:inline-block;width: 320px;">
          <div class="rt">
            <img src="https://www.sitepoint.com/community/t/multiple-image-upload-with-caption/uploads/<?php echo $images; ?>" class="img-thumbnail" width="220px" height="220px" style="margin:10px;" />;
          </div>
          <div class="caption">
            <label>Caption</label><br>
            <input type="text" name="caption" placeholder="caption to be insert/update">
            <input type="submit" name="submit" value="update" >
          </div>
          

        </div>

      <?php
}
  }else{
      echo "<h3 style="text-align:center">No Image found</h3>";
  }

L'image peut être téléchargée et affichée facilement, mais comment puis-je ajouter une légende pour les images que l'utilisateur peut modifier/mettre à jour.

comment puis-je obtenir cette option de légende avec plusieurs options de téléchargement d'images où l'utilisateur peut modifier la légende et mettre à jour

name="caption"

Le nom du champ doit être un tableau, comme le nom du champ type='file', l'index du tableau étant l'identifiant (index primaire à incrémentation automatique) correspondant à la ligne de la table de base de données dans laquelle se trouve l'image. les données sont soumises, vous pouvez utiliser une boucle foreach() pour obtenir à la fois l'index du tableau (id) et la valeur soumise.

Votre code de gestion de fichier de téléchargement DOIT détecter si la taille totale des données du formulaire dépasse le paramètre post_max_size (les tableaux $_FILES et $_POST seront vides), puis il doit tester pour s'assurer que chaque fichier individuel a été téléchargé sans aucune erreur. erreur, le [‘error’] l'élément sera un zéro, avant d'en utiliser un pour les informations du fichier téléchargé.

rand()

Les ordinateurs ne fonctionnent pas très bien au hasard. Votre code existant doit détecter et gérer les doublons.

Une meilleure façon de nommer les choses de manière unique consiste à insérer la ligne de données, à obtenir le dernier identifiant d'insertion auto-incrémenté à partir de cette requête et à utiliser l'identifiant dans le cadre du nom. Étant donné que l'index primaire à incrémentation automatique est garanti unique, il n'y a aucun risque de doublon.

Vous devez également utiliser une requête préparée chaque fois que vous fournissez des valeurs externes, inconnues et dynamiques à une requête lors de son exécution afin que les caractères spéciaux SQL dans une valeur ne cassent pas la syntaxe de la requête SQL, qui est la manière dont l'injection SQL est effectuée. Si vous évitez de faire cela en raison de la difficulté avec l'extension mysqli, passez à l'extension PDO, beaucoup plus simple.

Modifier : Un autre problème avec le code de téléchargement est que vous devez afficher un message d'erreur utile pour chaque fichier téléchargé dont le téléchargement ou la validation a échoué, afin que l'utilisateur puisse corriger le problème et télécharger à nouveau le(s) fichier(s) ayant échoué.


esu

5 juillet 2022, 16h46


3

comment cela donne-t-il à l'utilisateur la possibilité de modifier la légende… ???

j'ai essayé d'insérer un formulaire et d'essayer la mise à jour avec le code suivant mais cela n'a aucun effet de mise à jour

if (mysqli_num_rows($result) > 0) {

      while ($row = mysqli_fetch_assoc($result)) {
    $images = $row['images'];
   $caption= $row['caption'];
   $id = $row['id'];
      

      ?>
        <div class="image" style="display:inline-block;width: 320px;">
          <div class="rt">
            <img src="https://www.sitepoint.com/community/t/multiple-image-upload-with-caption/uploads/<?php echo $images; ?>" class="img-thumbnail" width="220px" height="220px" style="margin:10px;" />;
          </div>
          
          <?php 
          if(isset($_POST['update'])){
              $id      = $_POST['id'];
              $caption  = $_POST['caption'];
              
           $query= "UPDATE `table_images` SET `caption` ='hello' WHERE `id` = 7 ";
           $result = mysqli_query($con, $query);

           if(!$result){
              die('Query failed' . mysqli_error($con));
           }
         }
          ?>
          <div class="caption">
            <p><?php echo $caption;?></p>
            <form method="post" action="">
              <input type="text" name="id" value="<?php echo $id; ?>">
            <label>Caption</label><br>
            <input type="text" name="caption"  value="<?php echo $caption;?>">
            <input type="submit" name="update" value="update" >
            </form>
          </div>
          

        </div>

      <?php

la requête de mise à jour n'est-elle pas affectée en raison d'ajax… ???

il n'a aucun effet de mise à jour

UPDATE table_imagesSETlégende='hello' WHEREidentifiant= 7

Valeurs codées en dur dans la requête de mise à jour au lieu des valeurs de publication.


esu

6 juillet 2022, 12h41


5

je vérifiais juste la saisie aléatoire de la valeur du code en dur…

la requête de mise à jour n'est-elle pas affectée en raison d'ajax… ???

Étant donné que la balise

Si vous utilisez également ajax pour soumettre les données du formulaire de modification/mise à jour de légende, quel débogage avez-vous effectué pour savoir si des données ont été soumises, quelles valeurs ont été soumises et ce que le code côté serveur a fait ?

Et en fait, cela m’a fait voir le problème le plus probable. Lorsque vous utilisez ajax pour soumettre un formulaire, le bouton Soumettre n'est pas un champ de formulaire réussi et ne sera pas automatiquement défini dans les données du formulaire. C’est la raison pour laquelle nous disons continuellement aux gens de toujours détecter si un formulaire de méthode de publication a été soumis.

De plus, placer le code de traitement du formulaire au milieu du formulaire « peut » fonctionner (le code actuel interrompra la sortie des formulaires de légende en raison de la réutilisation des noms de variables), mais le code de traitement du formulaire post-méthode doit toujours être au-dessus du début de le document html et dans le cas de l'utilisation d'ajax, vous devrez alors renvoyer toutes les erreurs d'utilisateur/validation ou messages de réussite vers le code ajax et mettre fin à l'exécution du code php.


esu

6 juillet 2022, 14h58


7

Je le résous en insérant le nom de l'image dans les lignes de légende de la base de données, mais je ne suis pas sûr que cela fonctionnera avec l'identifiant de la page, je développe le projet…

ajouter une nouvelle page…
champ de titre, champ de contenu, champ autres et enfin champ de téléchargement multiple

table de pages
insérer dans page_parent (champ-1, champ-2, champ-3) valeurs (champ-1 champ-2,champ-3)
dernière insertion->id est généré

table-galerie
insérer dans galerie-image (images multiples) valeurs (images multiples) parent_id = lastinsert->id

je mettrai à jour le résultat une fois que j'atteindrai cette section.

Plusieurs images avec légende sont résolues sans lien vers d’autres identifiants de tables…


esu

8 juillet 2022, 17h17


8

dans la base de données, je stocke juste le nom de l'image sans son extension… par exemple pciture-1 mais je veux un nom avec une extension dans la table de la base de données comme image-1.jpg comment puis-je obtenir une image avec une extension


système

Fermé

8 octobre 2022, 00h18


9

Ce sujet a été automatiquement fermé 91 jours après la dernière réponse. Les nouvelles réponses ne sont plus autorisées.

to www.sitepoint.com


Suivez-nous sur Facebook : https://web.facebook.com/mycamer.net/
Pour recevoir les dernières nouvelles sur votre téléphone grâce à l’application Telegram, cliquez ici : https://t.me/+KMdLTc0qS6ZkMGI0
Envoyez-nous un message par Whatsapp : Whatsapp +237 650 50 31 31


The post Téléchargement d'images multiples avec légende – PHP – SitePoint Forums first appeared on Technique de pointe.


Retour à La Une de Logo Paperblog

A propos de l’auteur


Mycamer Voir son profil
Voir son blog

l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte

Magazines