Uploader (et renommer) plusieurs photos dans le serveur

Résolu/Fermé
miltonis Messages postés 238 Date d'inscription mercredi 6 octobre 2004 Statut Membre Dernière intervention 30 septembre 2022 - Modifié le 19 juil. 2020 à 09:12
miltonis Messages postés 238 Date d'inscription mercredi 6 octobre 2004 Statut Membre Dernière intervention 30 septembre 2022 - 20 juil. 2020 à 04:29
Bonjour,

Même si je ne suis pas calé en développement, j'essaie de créer un formulaire qui permet d'uploader plusieurs photos sur le serveur et du texte dans la base de données.

Pour le texte, aucun souci. Pour uploader UNE photo aussi, j'y arrive bien.
  • Ce que je n'arrive pas à faire, c'est uploader PLUSIEURS photos en un seul envoi de formulaire.

Dois-je utiliser une boucle while ou for ou foreach ?
Si oui, comment récupérer les informations ?
Je précise que je ne cherche pas à utiliser la fonction "Multiple". Même si les fichiers sont uploadés dans le même formulaire, l'utilisateur doit utiliser des champs "File upload" séparés.
  • Je précise que je veux renommer les fichiers lors de l'upload.

Avec le code ci-dessous, l'upload fonctionne mais seul le renommage du premier fichier fonctionne. Le deuxième (et sûrement les suivants aussi) sont mal renommés. Exemple pour le deuxième :
78_One Plus_Nouveau test_FaceProduct_pic03.jpgpic04.jpg


Voici le code HTML :
Importer les photos du produit: 
<label for="fileFA" class="label-file" style="cursor:pointer; color:#00b1ca; font-weight:bold;">Couverture/face du produit</label>
<input id="fileFA" class="input-file" type="file" name="photoFA" style="display: none;">
<!--<input type="file" name="photo"><br>-->
<label for="fileNV" class="label-file" style="cursor:pointer; color:#00b1ca; font-weight:bold;">Tableau nutritionnel du produit</label>
<input id="fileNV" class="input-file" type="file" name="photoNV" style="display: none;">


Et le code PHP :
error_reporting(E_ALL);

// Then retrieve all the other information from the form: 
$productname = isset($_POST['productname']) ? $_POST['productname'] : NULL;
$productbrand = isset($_POST['productbrand']) ? $_POST['productbrand'] : NULL;
$addername = isset($_POST['addername']) ? $_POST['addername'] : NULL;
$adderemail = isset($_POST['adderemail']) ? $_POST['adderemail'] : NULL;

// paramètres de connexion
$cbnserver = "xxxxxx";
$cbnuser = "xxxxxxxxx";
$cbnpass = "xxxxxxxxx";
$cbndbname = "xxxxxxxxxxxxx";

// Requête d'insertion dans la base
$dbco = new PDO("mysql:host=$cbnserver;dbname=$cbndbname", $cbnuser, $cbnpass);
$dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$req = $dbco->prepare('INSERT INTO `cbnadd_newproduct` (productname, productbrand, addername, adder_email) VALUES(:productname,:productbrand,:addername,:adder_email)');
$req->execute(array(
 'productname' => $productname,
 'productbrand' => $productbrand,
 'addername' => $addername,
 'adder_email' => $adderemail
 ));
$lineid = $dbco->lastInsertId() ;


// Designate the directory where the images will be saved with this code:
$targetFA = "images/". $lineid ."_". $productbrand ."_". $productname ."_FaceProduct_";
$targetFA = $targetFA . basename( $_FILES['photoFA']['name']); 
$targetNV = "images/". $lineid ."_". $productbrand ."_". $productname ."_FaceProduct_";
$targetNV = $targetFA . basename( $_FILES['photoNV']['name']); 


// This writes the photo to the server 
$namefileFA = basename( $_FILES['photoFA']['name']);
$namefileFA = $lineid ."_". $productbrand ."_". $productname ."_". $namefileFA;
$namefileNV = basename( $_FILES['photoFA']['name']);
$namefileNV = $lineid ."_". $productbrand ."_". $productname ."_". $namefileNV;

if(move_uploaded_file($_FILES['photoFA']['tmp_name'],$targetFA) & move_uploaded_file($_FILES['photoNV']['tmp_name'],$targetNV)) { 

 // This code tells you if it is all ok or not.
 echo "<br><br>The file ". $namefileFA. " and has been uploaded, and your information has been added to the directory<br>"; 
 echo "<br><br>The file ". $namefileNV. " has been uploaded, and your information has been added to the directory<br>"; 

} else {
 echo "<br><br>Sorry, there was a problem uploading your file."; 
}



Merci de votre soutien !
A voir également:

2 réponses

jordane45 Messages postés 38142 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 4 649
19 juil. 2020 à 21:47
Ton erreur est là
$namefileNV = basename( $_FILES['photoFA']['name']);


Perso, le code, je l'écrirai comme ceci :

<?php
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

// Then retrieve all the other information from the form: 
$productname = !empty($_POST['productname']) ? $_POST['productname'] : NULL;
$productbrand = !empty($_POST['productbrand']) ? $_POST['productbrand'] : NULL;
$addername = !empty($_POST['addername']) ? $_POST['addername'] : NULL;
$adderemail = !empty($_POST['adderemail']) ? $_POST['adderemail'] : NULL;

$photoFA = !empty($_FILES['photoFA']) ? $_FILES['photoFA'] : NULL;
$photoNV = !empty($_FILES['photoNV']) ? $_FILES['photoNV'] : NULL;

// paramètres de connexion
$cbnserver = "xxxxxx";
$cbnuser = "xxxxxxxxx";
$cbnpass = "xxxxxxxxx";
$cbndbname = "xxxxxxxxxxxxx";


//Connexion à la bdd
try{
  $dbco = new PDO("mysql:host=$cbnserver;dbname=$cbndbname", $cbnuser, $cbnpass);
  $dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH
  $dbco->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
} catch(PDOException $e) {
    die('Erreur : ' . $e->getMessage());
}

// Requête d'insertion dans la base
$sql = 'INSERT INTO `cbnadd_newproduct` (productname, productbrand, addername, adder_email) VALUES(:productname,:productbrand,:addername,:adder_email)';
$datas = array(
     ':productname' => $productname,
     ':productbrand' => $productbrand,
     ':addername' => $addername,
     ':adder_email' => $adderemail
     );

try{
  $req = $dbco->prepare($sql);
  $req->execute($datas);
  $lineid = $dbco->lastInsertId() ;
}catch(Exception $e){
  // en cas d'erreur :
   echo " Erreur ! ".$e->getMessage();
   echo " Les datas : " ;
  print_r($datas);
}

// Designate the directory where the images will be saved with this code:
$uploadDir = "images/". $lineid ."_". $productbrand ."_". $productname ."_FaceProduct_";
$uid = $lineid ."_". $productbrand ."_". $productname;


// This writes the photo to the server 
$namefileFA = $uid."_". basename( $photoFA['name']);
$targetFA = uploadDir .  $photoFA['name']; 

if(move_uploaded_file($photoFA['tmp_name'],$targetFA){
  echo "<br><br>The file ". $namefileFA. " and has been uploaded, and your information has been added to the directory<br>"; 
} else {
 echo "<br><br>Sorry, there was a problem uploading your file." . $photoFA['name']; 
}

$namefileNV =$uid."_". basename( $photoNV['name']);
$targetNV = uploadDir .  $photoNV['name']; 
if(move_uploaded_file($photoNV['tmp_name'],$targetNV)) { 
  echo "<br><br>The file ". $namefileNV. " has been uploaded, and your information has been added to the directory<br>"; 
} else {
 echo "<br><br>Sorry, there was a problem uploading your file." . $photoNV['name']; 
}


Au passage, je t'invite à lire ceci
https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code

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

.
1
miltonis Messages postés 238 Date d'inscription mercredi 6 octobre 2004 Statut Membre Dernière intervention 30 septembre 2022 19
20 juil. 2020 à 04:29
Il manquait juste des parenthèses dans les derniers IF. Une fois ceci arrangé, ça marche parfaitement !
Merci pour ton aide Jordane :)

JE vais lire les liens de ce pas ^^
0
jordane45 Messages postés 38142 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 4 649
19 juil. 2020 à 11:55
Bonjour,

Sans regarder plus en détail ton code, tu as déjà une erreur dans ton IF
le "AND" s'écrit avec deux &
if(move_uploaded_file($_FILES['photoFA']['tmp_name'],$targetFA) && move_uploaded_file($_FILES['photoNV']['tmp_name'],$targetNV)) { 

0
miltonis Messages postés 238 Date d'inscription mercredi 6 octobre 2004 Statut Membre Dernière intervention 30 septembre 2022 19
19 juil. 2020 à 16:05
Bizarre, le système ne m'a pas signalé d'erreur... Merci !
Pourrais-je te demander de jeter un oeil sur le reste du code ? ^^
0