Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
822 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [resolu] Formulaire avec upload qui renomme mon fichier

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[resolu] Formulaire avec upload qui renomme mon fichier

n°1931852
fscalda
Gaaaaaazzzz
Posté le 14-10-2009 à 18:05:44  profilanswer
 

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
mood
Publicité
Posté le 14-10-2009 à 18:05:44  profilanswer
 

n°1931853
Tirkyth
Posté le 14-10-2009 à 18:09:52  profilanswer
 

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 !
n°1931854
Tirkyth
Posté le 14-10-2009 à 18:11:46  profilanswer
 

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 !
n°1931861
fscalda
Gaaaaaazzzz
Posté le 14-10-2009 à 18:32:56  profilanswer
 

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

n°1931866
fscalda
Gaaaaaazzzz
Posté le 14-10-2009 à 18:49:49  profilanswer
 

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
n°1931994
Tirkyth
Posté le 15-10-2009 à 10:02:32  profilanswer
 

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 !
n°1931999
fscalda
Gaaaaaazzzz
Posté le 15-10-2009 à 10:17:00  profilanswer
 

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
n°1932003
Tirkyth
Posté le 15-10-2009 à 10:23:53  profilanswer
 

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 !
n°1932004
Tirkyth
Posté le 15-10-2009 à 10:25:00  profilanswer
 

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 !
n°1932162
fscalda
Gaaaaaazzzz
Posté le 15-10-2009 à 17:19:41  profilanswer
 

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.

mood
Publicité
Posté le 15-10-2009 à 17:19:41  profilanswer
 

n°1932181
fscalda
Gaaaaaazzzz
Posté le 15-10-2009 à 17:42:27  profilanswer
 

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:

n°1932190
fscalda
Gaaaaaazzzz
Posté le 15-10-2009 à 17:56:07  profilanswer
 

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();

n°1932194
fscalda
Gaaaaaazzzz
Posté le 15-10-2009 à 18:17:53  profilanswer
 

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. }

n°1932413
Tirkyth
Posté le 16-10-2009 à 12:10:08  profilanswer
 

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 !
n°1932417
Tirkyth
Posté le 16-10-2009 à 12:36:43  profilanswer
 

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 !
n°1932479
fscalda
Gaaaaaazzzz
Posté le 16-10-2009 à 14:53:35  profilanswer
 

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:

n°1932481
fscalda
Gaaaaaazzzz
Posté le 16-10-2009 à 14:56:09  profilanswer
 

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
n°1932483
fscalda
Gaaaaaazzzz
Posté le 16-10-2009 à 15:00:11  profilanswer
 

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

n°1932487
Tirkyth
Posté le 16-10-2009 à 15:03:24  profilanswer
 

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 !
n°1932611
fscalda
Gaaaaaazzzz
Posté le 16-10-2009 à 18:46:12  profilanswer
 

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:

n°1932614
fscalda
Gaaaaaazzzz
Posté le 16-10-2009 à 18:52:49  profilanswer
 

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:

n°1933070
Tirkyth
Posté le 19-10-2009 à 10:56:13  profilanswer
 

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


---------------
Mon Feedback !
n°1935921
fscalda
Gaaaaaazzzz
Posté le 28-10-2009 à 14:34:57  profilanswer
 

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. ?>


n°1935952
stealth35
Posté le 28-10-2009 à 16:10:57  profilanswer
 

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
n°1935960
fscalda
Gaaaaaazzzz
Posté le 28-10-2009 à 16:33:39  profilanswer
 

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.

n°1935977
stealth35
Posté le 28-10-2009 à 16:59:39  profilanswer
 

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 ...

n°1936018
fscalda
Gaaaaaazzzz
Posté le 28-10-2009 à 18:31:48  profilanswer
 

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:

n°1936197
stealth35
Posté le 29-10-2009 à 14:00:38  profilanswer
 

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
n°1936210
fscalda
Gaaaaaazzzz
Posté le 29-10-2009 à 14:23:48  profilanswer
 


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.

n°1936227
Tirkyth
Posté le 29-10-2009 à 15:06:39  profilanswer
 

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']."'" : ", ''";

n°1936247
fscalda
Gaaaaaazzzz
Posté le 29-10-2009 à 15:44:57  profilanswer
 

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
n°1936253
Tirkyth
Posté le 29-10-2009 à 15:58:19  profilanswer
 

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

n°1936254
fscalda
Gaaaaaazzzz
Posté le 29-10-2009 à 16:00:07  profilanswer
 

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

n°1936271
stealth35
Posté le 29-10-2009 à 16:41:21  profilanswer
 

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

n°1936577
fscalda
Gaaaaaazzzz
Posté le 30-10-2009 à 15:11:30  profilanswer
 

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...

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [resolu] Formulaire avec upload qui renomme mon fichier

 

Sujets relatifs
[Résolu] Fermeture inopiné application Delphi[help] copie de fichier et renomage si doublon
[Résolu] Problème backgroundproblème formulaire envoie d'un get au lieu d'un post...
[résolu] Outils de reformatage de code[Javascript] Aide pour adapter un script - [Résolu]
[Résolu] Problème syntaxe xhtml[Résolu][JSF]Télécharger fichier CSV depuis un flux
[résolu] strtr renvoie des caractères farfelus (UTF-8) 
Plus de sujets relatifs à : [resolu] Formulaire avec upload qui renomme mon fichier


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR