Problème d'Upload multiples dans une BDD [Résolu]

Signaler
Messages postés
30
Date d'inscription
mercredi 22 août 2007
Statut
Membre
Dernière intervention
24 juin 2008
-
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
-
Bonjour,
voila, j'ai un problème sur lequel je butte depuis une semaine sans rien trouver.
Deux autres personnes ont apparement le meme problème sur deux autres forum, mais ils sont aussi resté sans réponse.

J'aimerai créer une page d'upload multiple de photo (18 exactement), avec les photos allant dans un repertoire, et leur nom allant dans une base MySql.
Mon problème est que je n'arrive pas à mettre les noms dans la base.

Je vous  décris les démarches en plusieurs étape:
-L'upload simple (là aucun problème tout marche nickel) Ok
-L'upload multiple vers un repertoire (là aussi, tous les fichiers vont bien dans le repertoire voulu) Ok
-L'écriture dans la table MySql, le problème est là, je n'ai pour seul réponse en face de l'ID "ARRAY".

Effectivement au lieu d'utiliser $_FILES() comme pour un upload simple je fais une boucle, ce qui me renvoi donc logiquement un array, mais comment obtenir les valeurs de cet array???

Je vous met les petits bout de script que j'ai fait:

Pour le HTML il n'y a pas de problème:

Pour le PHP voici les différents scripts testé:

Le premier script marque bien le nom dans la base de donnée et copie bien la photo dans le repertoire, mais la boucle ne doit pas marcher car il ne le fait que pour un seul fichier laissant les autres à la porte.

<?php
mysql_select_db($database_mabase, $mabase);
$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
  $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}
 
  foreach ($_FILES["capt"]["error"] as $key => $error) {
    if ($error == UPLOAD_ERR_OK) {
        $tmp_name = $_FILES["capt"]["tmp_name"][$key];
        $name = $_FILES["capt"]["name"][$key];
        move_uploaded_file($tmp_name, "screenshots/test/$name");
    }
}
 
 if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "insertpics")) {
 
    $insertion = " INSERT INTO screenshot (Screenshot)
    VALUES ('".$name."')";
             mysql_query($insertion) or die(mysql_error());
}
?>

//////////////////////////////////////////////////////

Le second prend toutes les photos (donc là la boucle marche) et les copie toutes dans le repertoire de destination. Mais au lieu de récuperer le nom de la photo dans MySql il me note "ARRAY".

<?php
mysql_select_db($database_mabase, $mabase);
$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
  $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);

}
 if (isset($_FILES['capt']['name']))
 { for ( $n=0; $n<count($_FILES['capt']['name']) ;$n++ )
 { if ( $_FILES['capt']['error'][$n]==0 )
 { move_uploaded_file( $_FILES['capt']['tmp_name'][$n] ,
 "screenshots/test/".$_FILES['capt']['name'][$n] ); }
 }
 }
 if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "insertpics")) {
 
    $insertion = " INSERT INTO screenshot (Screenshot)
    VALUES ('".$_FILES['capt']['name']."')";
            mysql_query($insertion) or die(mysql_error());
}
?>

Voila, alors comment transformer cet "array" par "le_nom_de_la_photo"!!!!!!!

///////////////////////////
Je débute complétement la dedans et mes recherches sont resté infructueuse.
Sur les divers forum je trouve bien des script d'envoi multiples, mais aucun vers une base de donnée.
Je concentre mes recherches sur l'upload mais c'est peut être ailleurs (je pense à la boucle, mais je ne vois vraiment pas quoi faire).
Comme le problème similaire des deux autres personnes sont resté sans réponse sur leurs forum je panique un peu là, alors svp si quelqu'un peut m'aider

En tout cas merci d'avance, au moins d'avoir tout lu.

PS: je sais que pour la sécurité ce n'est pas ça, mais je le ferai aprés.

Merci

Lolo

8 réponses

Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
Hello,
Pour le 1er :

<?php
mysql_select_db($database_mabase, $mabase);
$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
  $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}
 
$aTab = array ();
  foreach ($_FILES["capt"]["error"] as $key => $error) {
    if ($error == UPLOAD_ERR_OK) {
        $tmp_name = $_FILES["capt"]["tmp_name"][$key];
        $name = $_FILES["capt"]["name"][$key];
       $aTab[] = $name;
        move_uploaded_file($tmp_name, "screenshots/test/$name");
    }
}
 
 if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "insertpics")) {
  foreach ($aTab as $sName) {
    $insertion = " INSERT INTO screenshot (Screenshot)
    VALUES ('".$sName."')";
             mysql_query($insertion) or die(mysql_error());
    }
}
?>

Tu dois effectivement boucler sur ton tableau de fichiers. Il y a plusieurs façons de faire, dont bcp quis ont plus optimisées et plus élégantes que le script ci-dessus, mais bon, j'ai fait ça de manière à ne pas avoir à modifier trop ton script.
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
Pour le second, même principe :

<?php
mysql_select_db($database_mabase, $mabase);
$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
  $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);

}
$aTab = array ();
 if (isset($_FILES['capt']['name']))
 { for ( $n=0; $n<count($_FILES['capt']['name']) ;$n++ )
 { if ( $_FILES['capt']['error'][$n]==0 )
 { move_uploaded_file( $_FILES['capt']['tmp_name'][$n] ,
 "screenshots/test/".$_FILES['capt']['name'][$n] );
$aTab[] = $_FILES['capt']['name'][$n];
}
 }
 }
 if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "insertpics")) {
  foreach ($aTab as $sName) {
    $insertion = " INSERT INTO screenshot (Screenshot)
    VALUES ('".$sName."')";
            mysql_query($insertion) or die(mysql_error());
  }
}
?>
Messages postés
681
Date d'inscription
samedi 26 février 2005
Statut
Membre
Dernière intervention
21 août 2014
7
J'ai pas pris le temps de lire ta source complètement mais si tu insère les noms chaque fois dans la boulde foreach() dans ta bdd ça devrait aller... sinon tu peux refaire aussi une boucle foreach() sur ton array à la fin et inserer chaque cké une à une dans ta BDD...

Bonne journée!

<hr size="2" width="100%" />Developpement Web Yannic GraphiX | Mon CMS yArt et sa démo
<hr size="2" width="10" />
Messages postés
30
Date d'inscription
mercredi 22 août 2007
Statut
Membre
Dernière intervention
24 juin 2008

Merci pysco68,
J'ai essayé ta première solution qui est si j'ai bien compris de rajouter le nom dans la boucle foreach mais soit c'est moi qui m'y suis pris comme un manche, soit ça n'est pas ça. En gros ça a eu l'effet inverse, puisque ça a enlevé le nom.
En fait le scritp avec la boucle FOREACH écris bien le nom de la photo dans la base de donnée et les fichiers dans le repertoire de destination, mais ne fait pas de boucle (ce qui pour une boucle n'est pas top ;-) ).
Le script avec la boucle FOR lui copie les fichier dans le repertoire de destination, mais renvoi ARRAY comme nom de fichier...
A moins que tout le script soit à jeter je ne sais pas trop. Je débute et c'est vraiment tout ce que j'ai réussit à faire pour le moment.

Lolo
Messages postés
681
Date d'inscription
samedi 26 février 2005
Statut
Membre
Dernière intervention
21 août 2014
7
OoOups :) je sais pas si j'ai bien compris ta réponse, mais ton problème n'est toujours pas résolu ^^ donc tu ne devrais pas  (encore) accepter ma réponse  ^^ sinon les autres croirons que c'est résolu et ils ne viendrons plus....

donc si maintenant on prends ta deuxiemme solution on récupère le array de la bloucle for() et on en fais une boucle foreach sur l'array :)
<hr size= "2" width="100%" />foreach($array_images as $value){
    ta_requet_SQL_pour_ajouter_le_nom_de_fichier_"$value";
}<hr size ="2" width="100%" />
voilà à quoi je pensais :)

<hr size="2" width="100%" />Developpement Web Yannic GraphiX | Mon CMS yArt et sa démo
<hr size="2" width="10" />
Messages postés
30
Date d'inscription
mercredi 22 août 2007
Statut
Membre
Dernière intervention
24 juin 2008

Oupppsss merci pour la précision sur l'acceptation des réponses...
Effectivement ce n'est pas résolu.
J'ai bien essayer de mettre:
foreach($array_images as $value){
    ta_requet_SQL_pour_ajouter_le_nom_de_fichier_"$value";
}
mais soit je ne l'ai pas mis au bon endroit (j'ai a peut prêt tout testé quand meme) soit  ce n'est pas encore ça.
En tout cas merci ça me donne des pistes de recherche, et si ça ne me sert pas là ça servira plus tard!;-)

Lolo
Messages postés
30
Date d'inscription
mercredi 22 août 2007
Statut
Membre
Dernière intervention
24 juin 2008

Un mega mega grand merci Mamalam!!!!
Ca marche au top et tu me sors vraiment une sacrée épine du pied!!!!
Je vais regarder tout ça de plus pret maintenant pour essayer de tout comprendre afin de paufiner le tout et surtout d'y arriver tout seul comme un grand.
Une fois toutes les clefs en main si ça ne te dérange pas je posterai la solution sur les deux forum ou les gars n'y arrive tjs pas.
Encore merci pour tout

Lolo
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
No problemo :-)
vérifie mon code quand même hein, je l'ai écrit sans le tester. Mais l'idée est là de toute manière.