Problème d'Upload multiples dans une BDD

Résolu
lolowar Messages postés 30 Date d'inscription mercredi 22 août 2007 Statut Membre Dernière intervention 24 juin 2008 - 23 août 2007 à 11:09
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 - 23 août 2007 à 14:58
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

malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
23 août 2007 à 13:34
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.
3
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
23 août 2007 à 13:35
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());
  }
}
?>
3
pysco68 Messages postés 681 Date d'inscription samedi 26 février 2005 Statut Membre Dernière intervention 21 août 2014 8
23 août 2007 à 11:18
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" />
0
lolowar Messages postés 30 Date d'inscription mercredi 22 août 2007 Statut Membre Dernière intervention 24 juin 2008
23 août 2007 à 11:45
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
pysco68 Messages postés 681 Date d'inscription samedi 26 février 2005 Statut Membre Dernière intervention 21 août 2014 8
23 août 2007 à 11:51
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" />
0
lolowar Messages postés 30 Date d'inscription mercredi 22 août 2007 Statut Membre Dernière intervention 24 juin 2008
23 août 2007 à 13:16
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
0
lolowar Messages postés 30 Date d'inscription mercredi 22 août 2007 Statut Membre Dernière intervention 24 juin 2008
23 août 2007 à 14:12
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
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
23 août 2007 à 14:58
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.
0
Rejoignez-nous