Upload de fichier avec deux textarea

Messages postés
5
Date d'inscription
dimanche 1 septembre 2019
Statut
Membre
Dernière intervention
1 septembre 2019
-
Bonjour , je reposte ma question avec un peux plus de clarité, j'ai fait un script d'upload de fichier simplement , et cela marche tres bien , alors apresent je veux ajouter deux textarea , et donc lorsque je vais cliquer sur le bouton upload , le fichier (file) et les deux text present dans les deux textarea puissent etre stocker dans la meme base de donnee mais je n'arrive pas a stocker ces trois elements dans ma base de donnee (fichier, textarea1, textarea2) , voici mon code :

**Modifié par la modération, pour une lecture plus facile du code, à l'avenir, utilisez les balises, VOIR CETTE PAGE


<?php


   require_once "db.php";

      

   if(isset($_FILES['file'])){
      $errors = array();
      $file_name = $_FILES['file']['name'];
      $file_size = $_FILES['file']['size'];
      $file_tmp = $_FILES['file']['tmp_name'];
      $file_type = $_FILES['file']['type'];
      $file_type = $_FILES['prix']['text'];
      $file_type = $_FILES['tailles']['text'];
      $file_name_cmps = explode(".", $file_name);
      $file_ext = strtolower(end($file_name_cmps));

      $extensions= array("jpeg","jpg","png","pdf","txt","exe","apk","mp4","ogg","docx");

      if(in_array($file_ext,$extensions)=== false){
         $errors[]="extension not allowed, please choose a valid file.";
      }

      if($file_size > 2097152) {
         $errors[]='File size must be less than 2 MB';
      }

      if(empty($errors)==true) {

         $final_file_name = md5(time() . $file_name) . '.' . $file_ext;

         move_uploaded_file($file_tmp,"files/".$final_file_name);

         try {
            $sql = "INSERT INTO uploads (file, name, ext, prix, tailles) VALUES (?,?,?,?,?)";

            $stmt= $conn->prepare($sql);

            $stmt->execute([$final_file_name, $file_name, $file_ext]);

            $success = "File uploaded successfully !";
         }
         catch(PDOException $e)
         {
            echo $sql . "<br>" . $e->getMessage();
         }
          
      }
   }
?>
<!doctype html>
<html lang="en">
  <head>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

    <!-- Bootstrap CSS -->
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">

    <title>Upload PHP</title>
  </head>
  <body>

   <div id="uploadForm" class="my-3">
      <div class="container">
         <form action = "" method = "POST" enctype = "multipart/form-data">
            <div class="form-group">
               <input type = "file" name = "file" />

               prix du produit <input type="text" name="prix"><br>
            taille de l'article : <input type="text" name="tailles"><br>
            </div>
            
            
            <input class="btn btn-primary" type="submit" value="PUBLIER"/>
         </form>
         <?php
            if(isset($errors) && $errors != null){
         ?>
               <div class="my-2">
               <ul class="alert alert-danger">
               <?php foreach($errors as $error){
                  echo "<li>$error</li>";
               }?>
               </ul>
            </div>
         <?php
            }
            if(isset($success) && $success != null){
         ?>
               <div class="my-2">
               <ul class="alert alert-success">
                  <li><?php echo $success; ?></li>
               </ul>
            </div>
         <?php
            }
         ?>
         
      </div>
   </div>

   <div id="filters" class="my-3">
      <div class="container">
         <select id="select-ext" class="custom-select">
            <option selected value="all">All</option>
            <option value="pdf">pdf</option>
            <option value="txt">txt</option>
            <option value="png">png</option>
            <option value="jpg">jpg</option>
            <option value="exe">exe</option>
            <option value="apk">apk</option>
            <option value="mp4">mp4</option>
            <option value="docx">Word</option>
         </select>
      </div>
   </div>

   <div id="upladGallery" class="my-3">
      <div class="container">
      <div class="card-columns">
         <?php
            $data = $conn->query("SELECT * FROM uploads order by date desc")->fetchAll();
            foreach ($data as $row) {
               $date = new DateTime($row["date"]);
               $date = $date->format('Y-m-d');

               if($row["ext"] == "jpg" || $row["ext"] == "jpeg" || $row["ext"] == "png"){
                  echo '<div class="card" data-ext="' . $row["ext"] . '">
                           <img class="card-img-top" src="files/' . $row["file"] . '">
                           <div class="card-body">
                              <h5 class="card-title">' . $row["name"] . '</h5>
                              <a href="download.php?file=' . urlencode($row['file']) . '" class="btn btn-sm btn-outline-info">Download</a>
                              <h5 class="card-title">' . $row["prix"] . '</h5>
                           </div>
                           <div class="card-footer">
                              <small class="text-muted">Uploaded in :' . $date . '</small>
                           </div>
                        </div>';
               }
               elseif($row["ext"] == "mp4"){
                  echo '<div class="card" data-ext="' . $row["ext"] . '">
                           <video class="card-img-top" controls>
                              <source src="files/' . $row["file"] . '" type="video/mp4">
                           </video>
                           <div class="card-body">
                              <h5 class="card-title">' . $row["name"] . '</h5>
                              <a href="download.php?file=' . urlencode($row['file']) . '" class="btn btn-sm btn-outline-info">Download</a>
                           </div>
                           <div class="card-footer">
                              <small class="text-muted">Uploaded in :' . $date . '</small>
                           </div>
                        </div>';
               }
               elseif($row["ext"] == "ogg"){
                  echo '<div class="card" data-ext="' . $row["ext"] . '">
                           <video class="card-img-top" controls>
                              <source src="files/' . $row["file"] . '" type="video/ogg">
                           </video>
                           <div class="card-body">
                              <h5 class="card-title">' . $row["name"] . '</h5>
                              <a href="download.php?file=' . urlencode($row['file']) . '" class="btn btn-sm btn-outline-info">Download</a>
                           </div>
                           <div class="card-footer">
                              <small class="text-muted">Uploaded in :' . $date . '</small>
                           </div>
                        </div>';
               }
               else{
                  echo '<div class="card" data-ext="' . $row["ext"] . '">
                     <div class="card-body">
                        <h5 class="card-title">' . $row["name"] . '</h5>
                        <a href="download.php?file=' . urlencode($row['file']) . '" class="btn btn-sm btn-outline-info">Download</a>
                     </div>
                     <div class="card-footer">
                        <small class="text-muted">Uploaded in :' . $date . '</small>
                     </div>
                  </div>';
               }
            }
         ?>
      </div>
      </div>
   </div>

    <!-- Optional JavaScript -->
    <!-- jQuery first, then Popper.js, then Bootstrap JS -->
    <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
   <script>
      $('#select-ext').on('change', function() {
         if(this.value != "all"){
            $(".card[data-ext='"+ this.value +"']").show();
            $(".card").not(".card[data-ext='"+ this.value +"']").hide();
         }
         else{
            $(".card").show();
         }
      });
   </script>
   </body>
</html>



**Modifié par la modération, pour une lecture plus facile du code, à l'avenir, utilisez les balises, VOIR CETTE PAGE
Afficher la suite 

4 réponses

Messages postés
26230
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
8 septembre 2019
1777
0
Merci
Bonjour,

Déjà.. pour poster du code sur le forum, merci, à l'avenir, de le faire en utilisant les BALISES DE CODE.
Explications disponibles ici :
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

Ensuite, vu que tu codes en PDO, j'espère que tu as activé l'affichage des erreurs
(merci de lire et d'appliquer le contenu de ce lien : http://www.commentcamarche.net/faq/48399-php-gestion-des-erreurs-debogage-et-ecriture-du-code )

Si c'est le cas... tu dois avoir un joli message d'erreur qui apparait sur ta page quand tu fais un upload....
Un message indiquant que le nombre d'arguments n''est pas bon.
Et en effet, si tu regardes bien ta requête... tu verras qu'il attend 5 variables ( autant que de points d'interrogation )
INSERT INTO uploads (file, name, ext, prix, tailles) VALUES (?,?,?,?,?)


... mais que tu ne lui en envoies que 3 dans le execute
$stmt->execute([$final_file_name, $file_name, $file_ext]);


Commence par corriger ça...

.Je t'invite également à lire et à appliquer le contenu de ce lien à l'avenir, ce qui devrait t'éviter bon nombre de soucis : http://www.commentcamarche.net/faq/48399-php-gestion-des-erreurs-debogage-et-ecriture-du-code

lucer123
Messages postés
5
Date d'inscription
dimanche 1 septembre 2019
Statut
Membre
Dernière intervention
1 septembre 2019
-
merci
Commenter la réponse de jordane45
Messages postés
5
Date d'inscription
dimanche 1 septembre 2019
Statut
Membre
Dernière intervention
1 septembre 2019
0
Merci
je viens d'ajouter des variables mais toujour rien voici le nouveau code:

require_once "db.php";

 2097152) {
         
                     $errors[]='File size must be less than 2 MB';
                      }

           if(empty($errors)==true) {

                   $final_file_name = md5(time() . $file_name) . '.' . $file_ext;

                     move_uploaded_file($file_tmp,"files/".$final_file_name);

             try {
             
                  $sql = "INSERT INTO uploads (file, name, ext, prix, tailles) VALUES (?,?,?,?,?)";

                  $stmt= $conn->prepare($sql);
  
                  $stmt->execute([$final_file_name, $file_name, $file_ext, $file_prix, $file_tailles]);

                  $success = "File uploaded successfully !";
                   }
                  catch(PDOException $e)
                  {
                  echo $sql . "<br>" . $e->getMessage();
                }
          
          }
   }
?>>
lucer123
Messages postés
5
Date d'inscription
dimanche 1 septembre 2019
Statut
Membre
Dernière intervention
1 septembre 2019
-
desolé j'ai encore du mal a m'habitué avec la maniere d'ecrire le code ici , malgres que j'integre la balise
 mais cela s'affiche juste comme ça    
Commenter la réponse de lucer123
Messages postés
5
Date d'inscription
dimanche 1 septembre 2019
Statut
Membre
Dernière intervention
1 septembre 2019
0
Merci
et voici les erreures que j'obtiens


Notice: Undefined index: prix in /Applications/XAMPP/xamppfiles/htdocs/lu/index.php on line 15

Notice: Undefined index: tailles in /Applications/XAMPP/xamppfiles/htdocs/lu/index.php on line 16
INSERT INTO uploads (file, name, ext, prix, tailles) VALUES (?,?,?,?,?)
SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'prix' cannot be null
Commenter la réponse de lucer123
Messages postés
26230
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
8 septembre 2019
1777
0
Merci
Oh purée... encore un qui ne fait pas l'effort de lire ce qui est indiqué dans les liens qu'on lui donne... grrrrr...

Donc :
Pour les balises de code :
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

Pour l'écriture du code (et la récupération PROPRE des variables AVANT de les utiliser )
http://www.commentcamarche.net/faq/48399-php-gestion-des-erreurs-debogage-et-ecriture-du-code

A savoir que le message d'erreur indique que tu essais de faire référence à une variable "prix".. qui ne semble pas exister.
Qui se situe très certainement ici :
 $file_type = $_FILES['prix']['text'];
$file_type = $_FILES['tailles']['text'];

Car je doute que la variable $_FILES dispose d'une clé "prix" ni même d'une clé "text" ...
Et de plus.. tu utilises le même nom de variable file_type .. pour y stocker deux infos différentes ?? Oo ??

Je suppose que ton formulaire envois les données en POST
C'est donc $_POST qu'il faut utiliser pour ces variables là...
Un truc du genre
 $file_prix= !empty($_POST['prix']) ? $_POST['prix'] : 0 ;
 $file_tailles= !empty($_POST['tailles']) ? $_POST['tailles'] : 0 ;

Commenter la réponse de jordane45