[resolu] Formulaire avec upload qui renomme mon fichier

Formulaire avec upload qui renomme mon fichier [resolu] - PHP - Programmation

Marsh Posté le 14-10-2009 à 18:05:44    

Bonjour,
 
il y a plus d'un an, j'avais créer un formulaire qui renomme le fichier uploadé avec la date.
Le truc, c'est qu'aujourd'hui, j'aimerais qu'il me garde le nom du fichier tel quel, mais je bloque, je m'emmêle de plus en plus.
Et j'aimerais ajouter 6 upload supplémentaire, mais la... heu... franchement je vois pas de solution.

Code :
  1. $date= date("ymdhis" );
  2. $promotion = (!empty($_POST['promotion'])) ? addslashes($_POST['promotion']) : '';
  3. $ordrepromo = (!empty($_POST['ordrepromo'])) ? addslashes($_POST['ordrepromo']) : '';
  4. $nouveautes = (!empty($_POST['nouveautes'])) ? addslashes($_POST['nouveautes']) : '';
  5. $ordrenouveaute = (!empty($_POST['ordrenouveaute'])) ? addslashes($_POST['ordrenouveaute']) : '';
  6. $rubrique = (!empty($_POST['rubrique'])) ? addslashes($_POST['rubrique']) : '';
  7. $sousrubriques = (!empty($_POST['sousrubriques'])) ? addslashes($_POST['sousrubriques']) : '';
  8. $marque = (!empty($_POST['marque'])) ? addslashes($_POST['marque']) : '';
  9. $nomcuisine = (!empty($_POST['nomcuisine'])) ? addslashes($_POST['nomcuisine']) : '';
  10. $encastrable = (!empty($_POST['encastrable'])) ? addslashes($_POST['encastrable']) : '';
  11. $posable = (!empty($_POST['posable'])) ? addslashes($_POST['posable']) : '';
  12. $nom = (!empty($_POST['nom'])) ? addslashes($_POST['nom']) : '';
  13. $reference = (!empty($_POST['reference'])) ? addslashes($_POST['reference']) : '';
  14. $description = (!empty($_POST['description'])) ? addslashes($_POST['description']) : '';
  15. $note = (!empty($_POST['note'])) ? addslashes($_POST['note']) : '';
  16. $avis = (!empty($_POST['avis'])) ? addslashes($_POST['avis']) : '';
  17. $garantie = (!empty($_POST['garantie'])) ? addslashes($_POST['garantie']) : '';
  18. $label = (!empty($_POST['label'])) ? addslashes($_POST['label']) : '';
  19. $consommation = (!empty($_POST['consommation'])) ? addslashes($_POST['consommation']) : '';
  20. $dimension = (!empty($_POST['dimension'])) ? addslashes($_POST['dimension']) : '';
  21. $colori = (!empty($_POST['colori'])) ? addslashes($_POST['colori']) : '';
  22. $prix = (!empty($_POST['prix'])) ? addslashes($_POST['prix']) : '';
  23. $promo = (!empty($_POST['promo'])) ? addslashes($_POST['promo']) : '';
  24. $aFile = (!empty($_POST['aFile'])) ? addslashes($_POST['aFile']) : '';
  25. //
  26. if (is_uploaded_file($_FILES['aFile']['tmp_name'])){
  27.     echo "<b>Nom du fichier sur le serveur :<b> " . $_FILES['aFile']['tmp_name'] . "<br>";
  28.     echo "<b>Taille du fichier :<b>" . $_FILES['aFile']['size'] . "<br>";
  29.     echo "<b>Type du fichier :<b>" . $_FILES['aFile']['type'] . "<br>";
  30.     copy($_FILES['aFile']['tmp_name'],"./upload/${date}-immo.jpg" );
  31.     $query = "INSERT INTO produits (date,promotion, ordrepromo, nouveautes, ordrenouveaute, rubrique, sousrubriques, marque, nomcuisine, encastrable, posable, nom, reference, description, note, avis, garantie, label, consommation, dimension, colori, prix, promo, aFile)  VALUES(NOW(),'$promotion','$ordrepromo','$nouveautes','$ordrenouveaute','$rubrique','$sousrubriques','$marque','$nomcuisine','$encastrable','$posable','$nom','$reference','$description','$note','$avis','$garantie','$label','$consommation','$dimension','$colori','$prix','$promo', '${date}-immo.jpg' )";
  32. }
  33. else{
  34.     $query = "INSERT INTO produits (date,promotion, ordrepromo, nouveautes, ordrenouveaute, rubrique, sousrubriques, marque, nomcuisine, encastrable, posable, nom, reference, description, note, avis, garantie, label, consommation, dimension, colori, prix, promo, aFile)
  35. VALUES(NOW(),'$promotion','$ordrepromo','$nouveautes','$ordrenouveaute','$rubrique','$sousrubriques','$marque','$nomcuisine','$encastrable','$posable','$nom','$reference','$description','$note','$avis','$garantie','$label','$consommation','$dimension','$colori','$prix','$promo', '' )";
  36. echo "Pas de fichier t&eacute;l&eacute;charg&eacute; !?";
  37. }
  38. $res = mysql_query($query) or die(mysql_error());
  39. echo 'Vos donnees sont enregistrees.';
  40. mysql_close();
  41. ?>


Message édité par fscalda le 29-10-2009 à 15:59:30
Reply

Marsh Posté le 14-10-2009 à 18:05:44   

Reply

Marsh Posté le 14-10-2009 à 18:09:52    

Je pense que c'est ta ligne  

Code :
  1. copy($_FILES['aFile']['tmp_name'],"./upload/${date}-immo.jpg" );


qui est en cause. En mettant ça, ça ne devrait plus être renommé :

Code :
  1. copy($_FILES['aFile']['tmp_name'],"./upload/".$_FILES['aFile']['name']);


 
Pour en ajouter d'autres c'est simple, tu rajoutes des champs de type "file", en leur donnant un nom différent (attribut HTML name)
Ensuite dans ton tableau $_FILES tu auras plusieurs lignes.

Code :
  1. $_FILES['fichier1'];
  2. $_FILES['fichier2']; // etc ...


Tu peux bien sûr faire un foreach sur ton tableau $_FILES.


---------------
Mon Feedback !
Reply

Marsh Posté le 14-10-2009 à 18:11:46    

Attention aussi à bien changer ta requête SQL derrière :

Code :
  1. $query = "INSERT INTO produits (date,promotion, ordrepromo, nouveautes, ordrenouveaute, rubrique, sousrubriques, marque, nomcuisine, encastrable, posable, nom, reference, description, note, avis, garantie, label, consommation, dimension, colori, prix, promo, aFile)  VALUES(NOW(),'$promotion','$ordrepromo','$nouveautes','$ordrenouveaute','$rubrique','$sousrubriques','$marque','$nomcuisine','$encastrable','$posable','$nom','$reference','$description','$note','$avis','$garantie','$label','$consommation','$dimension','$colori','$prix','$promo', $_FILES['aFile']['name'] )";


---------------
Mon Feedback !
Reply

Marsh Posté le 14-10-2009 à 18:32:56    

Merci, je teste déja si le renommage saute, et demain, je teste l'upload multiple.
Encore merci  :hello:

Reply

Marsh Posté le 14-10-2009 à 18:49:49    

Bouh... j'ai une erreur de syntaxe. J'ai tenté

Code :
  1. '$_FILES['aFile']['name']' )";

mais pareil, plus ça va, moins je comprends.
 
Par contre, si je laisse mon ancien INSERT, le fichier lui arrive comme il faut, avec son vrai nom, donc ça déja c'est super  :D


Message édité par fscalda le 14-10-2009 à 19:49:14
Reply

Marsh Posté le 15-10-2009 à 10:02:32    

Excuse moi, petite erreur d'inattention.

Code :
  1. $query = "INSERT INTO produits (date,promotion, ordrepromo, nouveautes, ordrenouveaute, rubrique, sousrubriques, marque, nomcuisine, encastrable,
  2. posable, nom, reference, description, note, avis, garantie, label, consommation, dimension, colori, prix, promo, aFile)
  3. VALUES(NOW(),'$promotion','$ordrepromo','$nouveautes','$ordrenouveaute','$rubrique','$sousrubriques','$marque','$nomcuisine','$encastrable','$posable',
  4. '$nom','$reference','$description','$note','$avis','$garantie','$label','$consommation','$dimension','$colori','$prix','$promo', '{$_FILES['aFile']['name']}' )";


Au pire des cas, si ça ça ne fonctionne pas (bien qu'il n'y ait pas de raison !) :

Code :
  1. $query = "INSERT INTO produits (date,promotion, ordrepromo, nouveautes, ordrenouveaute, rubrique, sousrubriques, marque, nomcuisine, encastrable,
  2. posable, nom, reference, description, note, avis, garantie, label, consommation, dimension, colori, prix, promo, aFile)  
  3. VALUES(NOW(),'$promotion','$ordrepromo','$nouveautes','$ordrenouveaute','$rubrique','$sousrubriques','$marque','$nomcuisine','$encastrable','$posable',
  4. '$nom','$reference','$description','$note','$avis','$garantie','$label','$consommation','$dimension','$colori','$prix','$promo', '".$_FILES['aFile']['name']."' )";


---------------
Mon Feedback !
Reply

Marsh Posté le 15-10-2009 à 10:17:00    

Tirkyth > Tu plaisantes, tu n'as pas à t'excuser, déja quand quelques minutes tu m'a résolu un problème qui me prends la tête depuis 2 jours   :) Et puis ça ma fait chercher, mais je ne suis pas assez doué dès que l'on dépasse l'insertion d'une variable simple.  :D  
 
Faut vraiment que je le potasse ce bouquin sur le php  :pt1cable:  
 
Je cloture pas le topic, car je veux faire mon upload multiple. Mais je veux commencer tout seul avec les rensiengments que tu m'as donné pour voir ou je vais me planter.  :lol:
 
PS : Ta 1er méthode fonctionne  :hello:  , faut que je comprenne la différence en ceux que j'ai tenté et ce que tu as écris.

Message cité 1 fois
Message édité par fscalda le 15-10-2009 à 10:18:18
Reply

Marsh Posté le 15-10-2009 à 10:23:53    

Je te remet au clair histoire que tu puisses essayer :

 

1/ En HTML, tu dois avoir des champs "input" avec l'attribut "type" qui vaut "file". Ils doivent également avoir l'attribut "name" de renseigné. Par exemple celui que tu as actuellement doit avoir name="aFile". Il te suffit de mettre d'autres inputs de type "file" en changeant le "name" pour ne pas avoir de doublon.

 

2/ En PHP, quand tu utilises le tableau $_FILES, ça fait référence à tes fichiers uploadés. $_FILES['aFile'] fait référence à ton aFile. En remplaçant aFile par les noms de tes nouveaux champs, tu traiteras un des autres champs de ton formulaire.
Tu dois donc boucler sur ton tableau $_FILES qui contiendra plusieurs lignes quand tu auras plusieurs champs d'upload.

 

Mais là il te manque vraiment les toutes premières bases. Je ne peux que te suggérer de suivre ces cours en intégralité :
http://www.siteduzero.com/tutoriel [...] c-php.html
J'ai moi même commencé par ça il y a de nombreuses années, ça t'apportera déjà les notions les plus élémentaires.


Message édité par Tirkyth le 15-10-2009 à 10:55:53

---------------
Mon Feedback !
Reply

Marsh Posté le 15-10-2009 à 10:25:00    

fscalda a écrit :

PS : Ta 1er méthode fonctionne  :hello:  , faut que je comprenne la différence en ceux que j'ai tenté et ce que tu as écris.


Si tu ne comprends pas tu n'as qu'à simplement écrire les différentes façons que tu as essayé et je te le dirai.


---------------
Mon Feedback !
Reply

Marsh Posté le 15-10-2009 à 17:19:41    

Merci, entre le lien que tu m'as donné et le bouquin sur le php de Rigaud, je vais pouvoir passer de longue soirée d'hiver  :D  
 
Allez, je tente avec deux fichier pour commencer. En HTML, ça va, mon form est ok.
Je passe à au fichier qui va traiter le bouzin.

Reply

Marsh Posté le 15-10-2009 à 17:19:41   

Reply

Marsh Posté le 15-10-2009 à 17:42:27    

Rahh, je lis les conditions, car je suppose que pour mon cas, je dois en passer par la. Car je peux très bien vouloir uploader aFile2 sans uploader aFile.
 
 Alors autant la notion de IF et de ELSE, ça va à peu pris, mais les conditions multiples....  :heink:

Reply

Marsh Posté le 15-10-2009 à 17:56:07    

Yes, grâce à ton explication, j'avance.  
Donc pour l'instant, mon code insére le nom de ma ou de mes photos, que je la mettre en 1er upload, ou en deuxième.  
Seule le 1er upload de photo arrive sur le site, mais c'est normal, je n'ai toucher à rien sur l'upload.
 
 

Code :
  1. $aFile = (!empty($_POST['aFile'])) ? addslashes($_POST['aFile']) : '';
  2. $aFile2 = (!empty($_POST['aFile2'])) ? addslashes($_POST['aFile2']) : '';
  3. //
  4. if (is_uploaded_file($_FILES['aFile']['tmp_name']) OR ($_FILES['aFile2']['tmp_name']))
  5. {
  6.     echo "<b>Nom du fichier sur le serveur :<b> " . $_FILES['aFile']['tmp_name'] . "<br>";
  7.     echo "<b>Taille du fichier :<b>" . $_FILES['aFile']['size'] . "<br>";
  8.     echo "<b>Type du fichier :<b>" . $_FILES['aFile']['type'] . "<br>";
  9.     copy($_FILES['aFile']['tmp_name'],"./upload/".$_FILES['aFile']['name']);
  10.     $query = "INSERT INTO produits (date,promotion, ordrepromo, nouveautes, ordrenouveaute, rubrique, sousrubriques, marque, nomcuisine, encastrable, posable, nom, reference, description, note, avis, garantie, label, consommation, dimension, colori, prix, promo, aFile, aFile2)  VALUES(NOW(),'$promotion','$ordrepromo','$nouveautes','$ordrenouveaute','$rubrique','$sousrubriques','$marque','$nomcuisine','$encastrable','$posable','$nom','$reference','$description','$note','$avis','$garantie','$label','$consommation','$dimension','$colori','$prix','$promo', '{$_FILES['aFile']['name']}','{$_FILES['aFile2']['name']}' )";
  11. }
  12. else{
  13.     $query = "INSERT INTO produits (date,promotion, ordrepromo, nouveautes, ordrenouveaute, rubrique, sousrubriques, marque, nomcuisine, encastrable, posable, nom, reference, description, note, avis, garantie, label, consommation, dimension, colori, prix, promo, aFile, aFile2)
  14. VALUES(NOW(),'$promotion','$ordrepromo','$nouveautes','$ordrenouveaute','$rubrique','$sousrubriques','$marque','$nomcuisine','$encastrable','$posable','$nom','$reference','$description','$note','$avis','$garantie','$label','$consommation','$dimension','$colori','$prix','$promo', '';'' )";
  15. echo "Pas de fichier t&eacute;l&eacute;charg&eacute; !?";
  16. }
  17. $res = mysql_query($query) or die(mysql_error());
  18. echo 'Vos donnees sont enregistrees.';
  19. mysql_close();

Reply

Marsh Posté le 15-10-2009 à 18:17:53    

Yes, tout roule, j'upload et j'insère 2 fichiers sur le serveur  :D , si tu ne m'avais pas fait un briefing, je pense que je serais encore entrain de chercher.
 
Je mets le code au cas ou j'ecrirais mal quelque chose. Car il y a un truc qui me chiffonne, j'utilise la condition OR, mais en fait, c'est pas vraiment CA ou CA, c'est CA ou/et CA...
 

Code :
  1. $aFile = (!empty($_POST['aFile'])) ? addslashes($_POST['aFile']) : '';
  2. $aFile2 = (!empty($_POST['aFile2'])) ? addslashes($_POST['aFile2']) : '';
  3. //
  4. if (is_uploaded_file($_FILES['aFile']['tmp_name']) OR ($_FILES['aFile2']['tmp_name']))
  5. {
  6.     echo "<b>Nom du fichier sur le serveur :<b> " . $_FILES['aFile']['tmp_name'] . "<br>";
  7.     echo "<b>Taille du fichier :<b>" . $_FILES['aFile']['size'] . "<br>";
  8.     echo "<b>Type du fichier :<b>" . $_FILES['aFile']['type'] . "<br>";
  9.     copy($_FILES['aFile']['tmp_name'],"./upload/".$_FILES['aFile']['name']  );
  10. copy($_FILES['aFile2']['tmp_name'],"./upload/".$_FILES['aFile2']['name'] );
  11.     $query = "INSERT INTO produits (date,promotion, ordrepromo, nouveautes, ordrenouveaute, rubrique, sousrubriques, marque, nomcuisine, encastrable, posable, nom, reference, description, note, avis, garantie, label, consommation, dimension, colori, prix, promo, aFile, aFile2)  VALUES(NOW(),'$promotion','$ordrepromo','$nouveautes','$ordrenouveaute','$rubrique','$sousrubriques','$marque','$nomcuisine','$encastrable','$posable','$nom','$reference','$description','$note','$avis','$garantie','$label','$consommation','$dimension','$colori','$prix','$promo', '{$_FILES['aFile']['name']}','{$_FILES['aFile2']['name']}' )";
  12. }
  13. else{
  14.     $query = "INSERT INTO produits (date,promotion, ordrepromo, nouveautes, ordrenouveaute, rubrique, sousrubriques, marque, nomcuisine, encastrable, posable, nom, reference, description, note, avis, garantie, label, consommation, dimension, colori, prix, promo, aFile, aFile2)
  15. VALUES(NOW(),'$promotion','$ordrepromo','$nouveautes','$ordrenouveaute','$rubrique','$sousrubriques','$marque','$nomcuisine','$encastrable','$posable','$nom','$reference','$description','$note','$avis','$garantie','$label','$consommation','$dimension','$colori','$prix','$promo', '';'' )";
  16. echo "Pas de fichier t&eacute;l&eacute;charg&eacute; !?";
  17. }

Reply

Marsh Posté le 16-10-2009 à 12:10:08    

Tu as un soucis dans ton code en effet. Là tu as une condition qui est valide si un des deux fichiers a été téléchargé, sauf que dans ce cas tu déclenches 2 fois la fonction copy(). Mais que se passe-t-il si seulement un des deux fichiers a été renseigné ?
 
De plus, pour que ta condition soit telle que tu l'attends, à mon avis il faut plutôt mettre

Code :
  1. if (is_uploaded_file($_FILES['aFile']['tmp_name']) OR is_uploaded_file($_FILES['aFile2']['tmp_name']))


En effet, la tienne vérifie que aFile est bien un fichier uploadé et que la variable $_FILES['aFile2']['tmp_name'] existe.
Or toi je pense que tu souhaite vérifier que aFile ou aFile2 sont bien deux fichiers qui ont été envoyés. Il faut donc mettre de chaque côté de ton opérateur OR l'appel à la fonction is_uploaded_file()
 
Et pour finir, je pense que tes lignes

Code :
  1. $aFile = (!empty($_POST['aFile'])) ? addslashes($_POST['aFile']) : '';
  2. $aFile2 = (!empty($_POST['aFile2'])) ? addslashes($_POST['aFile2']) : '';


ne servent à rien. En effet, addslashes prend en paramètre une string. Or tes deux variables là sont des tableaux. Donc j'imagine que ces deux lignes ne font rien.


Message édité par Tirkyth le 16-10-2009 à 12:17:39

---------------
Mon Feedback !
Reply

Marsh Posté le 16-10-2009 à 12:36:43    

En résumé, moi je ferai plutôt quelque chose dans le genre :
 

Code :
  1. $addedFiles = array();
  2. foreach ($_FILES as $name => $file)
  3. {
  4.    if (is_uploaded_file($file['tmp_name'])
  5.    {
  6.        copy($file['tmp_name'], "./upload/".$file['name']);
  7.        $addedFiles[$name] = mysql_real_escape_string($file['name']); // Si tu utilises MySQL, il vaut mieux utiliser cette fonction. Sinon, remplace par addslashes.
  8.    }
  9. }
  10.  
  11. $query = "
  12.    INSERT INTO produits
  13.        (date, promotion, ordrepromo, nouveautes, ordrenouveaute, rubrique,
  14.        sousrubriques, marque, nomcuisine, encastrable, posable, nom, reference,
  15.        description, note, avis, garantie, label, consommation, dimension, colori,
  16.        prix, promo, aFile, aFile2)
  17.    VALUES
  18.        (NOW(), '$promotion', '$ordrepromo', '$nouveautes', '$ordrenouveaute', '$rubrique',
  19.        '$sousrubriques', '$marque', '$nomcuisine', '$encastrable', '$posable', '$nom', '$reference',
  20.        '$description','$note','$avis','$garantie','$label','$consommation','$dimension','$colori','$prix','$promo'";
  21.  
  22. $query .= isset($addedFiles['aFile']) ? ", '".$addedFiles['aFile']['name']."'" : ", ''";
  23. $query .= isset($addedFiles['aFile2']) ? ", '".$addedFiles['aFile2']['name']."'" : ", ''";
  24. $query .= " )";


---------------
Mon Feedback !
Reply

Marsh Posté le 16-10-2009 à 14:53:35    

Alors, je fais te faire surement halluciner... mais j'ai tester hier soir mon code avec 7 fichiers et plusieurs sortes d'envoi. Par exemple aFile,rien,aFile3,aFile4,aFile5,rien,rien et ça marche  :whistle:  
Avec rien du tout, et avec tout les fichiers. La base enregistre les bon nom au bon endroit et upload tout les fichiers... On va mettre ça sur le compte de la change du débutant et surtout de la tolérance du PHP  :D avec moi sur ce coup la.
 
Bon, faut que j'analyse et que je teste le code que tu m'as donné. Autant, ce que j'avais codé était clair sauf le OR. Autant la, va falloir que je me pause un bon coup pour assimiler  :pt1cable: .
Vi, la déclaration de ma variable aFile de cette façon, c'est toomuch et ça ne sers pas à grand chose....  :whistle:

Reply

Marsh Posté le 16-10-2009 à 14:56:09    

Si  je me souviens bien, hier soir, j'ai tenté comme tu me l'as écris  

Code :
  1. 1.
  2.       if (is_uploaded_file($_FILES['aFile']['tmp_name']) OR is_uploaded_file($_FILES['aFile2']['tmp_name']))


 
Et le serveur ma retourner un message d'erreur, je teste ça dans la journée.


Message édité par fscalda le 16-10-2009 à 14:59:47
Reply

Marsh Posté le 16-10-2009 à 15:00:11    

Bon ben je viens de tester ça marche.... qu'est que j'ai fait hier soir ...  :heink:

Reply

Marsh Posté le 16-10-2009 à 15:03:24    

Si tu me dis que ça marche comme ça je te crois :)
Je suppose que la fonction copy renvoie false sans générer d'erreur.
C'est un des points que je n'aime pas en PHP, certaines fonctions balances des warnings, d'autres des fatal errors, et d'autres rien pour le même genre de "problèmes" ...


---------------
Mon Feedback !
Reply

Marsh Posté le 16-10-2009 à 18:46:12    

Alors, j'ai testé, mais il y a un soucis, il upload bien les fichiers, mais n'enregistre rien dans la base.
Donc, ni une ni deux, je rajoute :
 

Code :
  1. INSERT INTO produits
  2.              (date, promotion, ordrepromo, nouveautes, ordrenouveaute, rubrique,
  3.              sousrubriques, marque, nomcuisine, encastrable, posable, nom, reference,
  4.              description, note, avis, garantie, label, consommation, dimension, colori,
  5.              prix, promo, aFile, aFile2)
  6.          VALUES
  7.              (NOW(), '$promotion', '$ordrepromo', '$nouveautes', '$ordrenouveaute', '$rubrique',
  8.              '$sousrubriques', '$marque', '$nomcuisine', '$encastrable', '$posable', '$nom', '$reference',
  9.              '$description','$note','$avis','$garantie','$label','$consommation','$dimension','$colori','$prix','$promo','$aFile','$aFile2' ";


 
Et j'ai l'erreur classique que je pratique souvent Column count doesn't match value count at row 1
Mais pourtant, j'ai bien le nombre exact dans ma base ....  :heink:

Reply

Marsh Posté le 16-10-2009 à 18:52:49    

Bon, c'est moi qui est fait n'importe quoi. Ca fonctionne, juste que j'ai la premiere lettre du fichier qui s'insere dans la bdd, je cherche, je cherche  :whistle:

Reply

Marsh Posté le 19-10-2009 à 10:56:13    

Remet ton code complet si tu ne trouves pas, avec une description détaillée du comportement non désiré :)


---------------
Mon Feedback !
Reply

Marsh Posté le 28-10-2009 à 14:34:57    

Hello,
 
je bloque toujours sur ton code :
Donc je me permets de le remettre complet, je pense que ce doit être un soucis avec mes déclarations de variables.
Car, l'upload se passe bien, mais seule la 1er lettre du fichier s'enregistre dans la table.
 
Par exemple :  
tortue-01.jpg
devient
t
Dans la table.
Je fouille, cherche, mais pour l'instant je bloque.
 

Code :
  1. <?PHP
  2. // Connexion ici
  3. $dbhost     = "xxxxxxxx";
  4. $dblogin    = "xxxxxxxx";
  5. $dbpassword = "xxxxxxxx";
  6. $dbname     = "xxxxxxxx";
  7. mysql_connect($dbhost,$dblogin,$dbpassword);
  8. mysql_selectdb($dbname);
  9. //
  10. //variable ID valid date promotion ordrepromo nouveautes ordrenouveaute rubrique sousrubriques marque nomcuisine encastrable posable nom reference description  
  11. //note avis garantie label consommation dimension colori
  12. // aFile aFile2 aFile3 aFile4 aFile5 aFile6 aFile7
  13. $date= date("ymdhis" );
  14. $promotion = (!empty($_POST['promotion'])) ? addslashes($_POST['promotion']) : '';
  15. $ordrepromo = (!empty($_POST['ordrepromo'])) ? addslashes($_POST['ordrepromo']) : '';
  16. $nouveautes = (!empty($_POST['nouveautes'])) ? addslashes($_POST['nouveautes']) : '';
  17. $ordrenouveaute = (!empty($_POST['ordrenouveaute'])) ? addslashes($_POST['ordrenouveaute']) : '';
  18. $rubrique = (!empty($_POST['rubrique'])) ? addslashes($_POST['rubrique']) : '';
  19. $sousrubriques = (!empty($_POST['sousrubriques'])) ? addslashes($_POST['sousrubriques']) : '';
  20. $marque = (!empty($_POST['marque'])) ? addslashes($_POST['marque']) : '';
  21. $nomcuisine = (!empty($_POST['nomcuisine'])) ? addslashes($_POST['nomcuisine']) : '';
  22. $encastrable = (!empty($_POST['encastrable'])) ? addslashes($_POST['encastrable']) : '';
  23. $posable = (!empty($_POST['posable'])) ? addslashes($_POST['posable']) : '';
  24. $nom = (!empty($_POST['nom'])) ? addslashes($_POST['nom']) : '';
  25. $reference = (!empty($_POST['reference'])) ? addslashes($_POST['reference']) : '';
  26. $description = (!empty($_POST['description'])) ? addslashes($_POST['description']) : '';
  27. $note = (!empty($_POST['note'])) ? addslashes($_POST['note']) : '';
  28. $avis = (!empty($_POST['avis'])) ? addslashes($_POST['avis']) : '';
  29. $garantie = (!empty($_POST['garantie'])) ? addslashes($_POST['garantie']) : '';
  30. $label = (!empty($_POST['label'])) ? addslashes($_POST['label']) : '';
  31. $consommation = (!empty($_POST['consommation'])) ? addslashes($_POST['consommation']) : '';
  32. $dimension = (!empty($_POST['dimension'])) ? addslashes($_POST['dimension']) : '';
  33. $colori = (!empty($_POST['colori'])) ? addslashes($_POST['colori']) : '';
  34. $prix = (!empty($_POST['prix'])) ? addslashes($_POST['prix']) : '';
  35. $promo = (!empty($_POST['promo'])) ? addslashes($_POST['promo']) : '';
  36. $aFile=$val[aFile];
  37. $aFile2=$val[aFile2];
  38. $aFile3=$val[aFile3];
  39. $aFile4=$val[aFile4];
  40. $aFile5=$val[aFile5];
  41. $aFile6=$val[aFile6];
  42. $aFile7=$val[aFile7];
  43. $addedFiles = array();
  44. foreach ($_FILES as $name => $file)
  45. {
  46.          if (is_uploaded_file($file['tmp_name']))
  47.          {
  48.   copy($file['tmp_name'], "./upload/".$file['name']);
  49.              $addedFiles[$name] = mysql_real_escape_string($file['name']);
  50.    // Si tu utilises MySQL, il vaut mieux utiliser cette fonction. Sinon, remplace par addslashes.
  51.          }
  52.       }
  53.       $query = "
  54.          INSERT INTO produits
  55.              (date, promotion, ordrepromo, nouveautes, ordrenouveaute, rubrique,
  56.              sousrubriques, marque, nomcuisine, encastrable, posable, nom, reference,
  57.              description, note, avis, garantie, label, consommation, dimension, colori,
  58.              prix, promo, aFile, aFile2, aFile3, aFile4, aFile5, aFile6, aFile7)
  59.          VALUES
  60.              (NOW(), '$promotion', '$ordrepromo', '$nouveautes', '$ordrenouveaute', '$rubrique',
  61.              '$sousrubriques', '$marque', '$nomcuisine', '$encastrable', '$posable', '$nom', '$reference',
  62.              '$description','$note','$avis','$garantie','$label','$consommation','$dimension','$colori','$prix','$promo'";
  63.      
  64. $query .= isset($addedFiles['aFile']) ? ", '".$addedFiles['aFile']['name']."'" : ", ''";
  65. $query .= isset($addedFiles['aFile2']) ? ", '".$addedFiles['aFile2']['name']."'" : ", ''";
  66. $query .= isset($addedFiles['aFile3']) ? ", '".$addedFiles['aFile3']['name']."'" : ", ''";
  67. $query .= isset($addedFiles['aFile4']) ? ", '".$addedFiles['aFile4']['name']."'" : ", ''";
  68. $query .= isset($addedFiles['aFile5']) ? ", '".$addedFiles['aFile5']['name']."'" : ", ''";
  69. $query .= isset($addedFiles['aFile6']) ? ", '".$addedFiles['aFile6']['name']."'" : ", ''";
  70. $query .= isset($addedFiles['aFile7']) ? ", '".$addedFiles['aFile7']['name']."'" : ", ''";
  71.       $query .= " )";
  72. echo "Pas de fichier t&eacute;l&eacute;charg&eacute; !?";
  73. $res = mysql_query($query) or die(mysql_error());
  74. echo 'Vos donnees sont enregistrees.';
  75. mysql_close();
  76. ?>


Reply

Marsh Posté le 28-10-2009 à 16:10:57    

juste pour savoir avant que je te rendre un truc,  t'es sous quel version de PHP, et a tu PDO mysql d'activé ?

 

d'ailleur pourquoi tu fait pas 2 table,   une avec les info et une avec les fichiers, ca te permet d'avoir autant de fichier que tu veux


Message édité par stealth35 le 28-10-2009 à 16:12:07
Reply

Marsh Posté le 28-10-2009 à 16:33:39    

Hello,
 
merci de jeter un oeil, alors l'hebergeur chez qui je suis à PHP Version 4.4.9. Je n'ai aucune info sur PDO, d'ailleurs, je ne sais pas ce que c'est  :(  
 
Alors, je n'ai pas 2 table, je n'en ai qu'une seule. En fait, je copie les fichiers dans un repertoire et je stocke le nom des fichiers dans ma table. Et c'est la qu'il y a un bug avec le code (ou alors c'est moi qui est fait une boulette) car il n'écrit dans la table que la 1er lettre.
 
Et comme c'est la 1er fois que je vois des fonctions comme ça, je me prends la tête à comprendre et à trouver le bug.
Je pensais que ça venait de la  

Code :
  1. #  $addedFiles = array();
  2. # foreach ($_FILES as $name => $file)


Mais faut que je regarde encore le bouquin pour comprendre ce qu'a utilisé Tirkyth et pourquoi.

Reply

Marsh Posté le 28-10-2009 à 16:59:39    

mais tu peux quand meme faire 2 tables ?
(ton herbergeur c'est free) ?
 
sinon au lieu de "copy"  la fonction c'est "move_uploaded_file"  
 
ta un probleme d'accolades aussi dans ta boucle vire celui ligne 58 ou 59
 
et la ou tu met  
 
$aFile2=$val[aFile2];
 
ta pas de guillmet
 
$aFile2=$val['aFile2'];
 
d'ailleur $val ca vient de nul par ...

Reply

Marsh Posté le 28-10-2009 à 18:31:48    

Non, non, c'est l'hébergeur c'est OVH...
 

sinon au lieu de "copy"  la fonction c'est "move_uploaded_file"  

J'ai vu ça sur le net, dans des cours, mais pas encore essayer de voir la différence.
 
 
d'ailleur $val ca vient de nul par ...

 
Heu... ben disons que quand j'ai commencer le php... on ma montré de déclarer les valeurs des variables de cette façon, donc j'ai toujours fait comme ça.
 
Je vais de ce pas regarder les infos que tu m'as donné et tester ;)
Des news demain surement, encore merci  :hello:

Reply

Marsh Posté le 29-10-2009 à 14:00:38    

la difference entre copy et move ,  juste dans le nom ca se comprend,  copy ca copie et move ca deplace, la ca voulais dire que t'es fichier pouvais resté dans le dossier temporaire.

 

sinon chez OVH, suffis de mettre un  .htaccess a la racine de ton site avec

 

SetEnv REGISTER_GLOBALS 0
SetEnv ZEND_OPTIMIZER 1
SetEnv MAGIC_QUOTES 0
SetEnv PHP_VER 5

 


voir meme ducoup  

 

SetEnv PHP_VER 5_TEST a la place de l'autre,  (et tu seras en PHP 5.3)


Message édité par stealth35 le 29-10-2009 à 14:01:59
Reply

Marsh Posté le 29-10-2009 à 14:23:48    


Effectivement $val n'a rien à faire ici, donc j'ai écrit :
 

Code :
  1. 1.
  2.       $aFile='aFile';


 
 
Mais rien ... toujours la première lettre qui s'inscrit.
 

Code :
  1. a un probleme d'accolades aussi dans ta boucle vire celui ligne 58 ou 59


Heu, moi je vois pas de probleme avec les accolades, je vais tester de la viré, mais ça va me faire une erreur, car j'en ai 2 en entrée, donc normalement, il m'en faut 2 en sortie.

Reply

Marsh Posté le 29-10-2009 à 15:06:39    

fscalda a écrit :


Code :
  1. $aFile=$val[aFile];
  2. $aFile2=$val[aFile2];
  3. $aFile3=$val[aFile3];
  4. $aFile4=$val[aFile4];
  5. $aFile5=$val[aFile5];
  6. $aFile6=$val[aFile6];
  7. $aFile7=$val[aFile7];




Je comprends pas à quoi sert cette partie ? :??:
 
Et sinon je pense qu'il faut remplacer

Code :
  1. $query .= isset($addedFiles['aFile']) ? ", '".$addedFiles['aFile']['name']."'" : ", ''";
  2. $query .= isset($addedFiles['aFile2']) ? ", '".$addedFiles['aFile2']['name']."'" : ", ''";
  3. $query .= isset($addedFiles['aFile3']) ? ", '".$addedFiles['aFile3']['name']."'" : ", ''";
  4. $query .= isset($addedFiles['aFile4']) ? ", '".$addedFiles['aFile4']['name']."'" : ", ''";
  5. $query .= isset($addedFiles['aFile5']) ? ", '".$addedFiles['aFile5']['name']."'" : ", ''";
  6. $query .= isset($addedFiles['aFile6']) ? ", '".$addedFiles['aFile6']['name']."'" : ", ''";
  7. $query .= isset($addedFiles['aFile7']) ? ", '".$addedFiles['aFile7']['name']."'" : ", ''";


Par

Code :
  1. $query .= isset($addedFiles['aFile']) ? ", '".$addedFiles['aFile']."'" : ", ''";
  2. $query .= isset($addedFiles['aFile2']) ? ", '".$addedFiles['aFile2']."'" : ", ''";
  3. $query .= isset($addedFiles['aFile3']) ? ", '".$addedFiles['aFile3']."'" : ", ''";
  4. $query .= isset($addedFiles['aFile4']) ? ", '".$addedFiles['aFile4']."'" : ", ''";
  5. $query .= isset($addedFiles['aFile5']) ? ", '".$addedFiles['aFile5']."'" : ", ''";
  6. $query .= isset($addedFiles['aFile6']) ? ", '".$addedFiles['aFile6']."'" : ", ''";
  7. $query .= isset($addedFiles['aFile7']) ? ", '".$addedFiles['aFile7']."'" : ", ''";

Reply

Marsh Posté le 29-10-2009 à 15:44:57    

cette partie sert à ...... rien  :D  
 
Ca marche nickel, je viens de tester,c'est vraiment super.
Encore merci.
 
Plus qu'a ré-ouvrir mon bouquin pour comprendre la valeur vide et name. Franchement un grand merci  :hello:


Message édité par fscalda le 29-10-2009 à 15:45:23
Reply

Marsh Posté le 29-10-2009 à 15:58:19    

De rien :jap:
 
En bonus tu peux éditer ton tout premier message et placer un petit [Résolu] devant le titre :)

Reply

Marsh Posté le 29-10-2009 à 16:00:07    

C'est fait ;)
Encore merci merci merci  :)

Reply

Marsh Posté le 29-10-2009 à 16:41:21    

essaye de travailler avec les array aussi, tu pourrais faire ta chaine beaucoup simplement  et proprement
 
echo implode($addedFiles, ', ');

Reply

Marsh Posté le 30-10-2009 à 15:11:30    

Je le note ;) , mais doucement la, j'en ai déja pour un moment à décortiquer et comprendre le code actuel :jap: Je me suis aperçu de boulette énorme que j'avais fait dans d'autres pages, je commence presque à le lire comme le HTML, je dis bien presque hein, ça viens, ça viens...

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed