Formulaire avec upload qui renomme mon fichier [resolu] - PHP - Programmation
Marsh Posté le 14-10-2009 à 18:09:52
Je pense que c'est ta ligne
Code : |
qui est en cause. En mettant ça, ça ne devrait plus être renommé :
Code : |
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 :
|
Tu peux bien sûr faire un foreach sur ton tableau $_FILES.
Marsh Posté le 14-10-2009 à 18:11:46
Attention aussi à bien changer ta requête SQL derrière :
Code :
|
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
Marsh Posté le 14-10-2009 à 18:49:49
Bouh... j'ai une erreur de syntaxe. J'ai tenté
Code :
|
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
Marsh Posté le 15-10-2009 à 10:02:32
Excuse moi, petite erreur d'inattention.
Code :
|
Au pire des cas, si ça ça ne fonctionne pas (bien qu'il n'y ait pas de raison !) :
Code :
|
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.
Faut vraiment que je le potasse ce bouquin sur le php
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.
PS : Ta 1er méthode fonctionne , faut que je comprenne la différence en ceux que j'ai tenté et ce que tu as écris.
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.
Marsh Posté le 15-10-2009 à 10:25:00
fscalda a écrit : PS : Ta 1er méthode fonctionne , 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.
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
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.
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....
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 :
|
Marsh Posté le 15-10-2009 à 18:17:53
Yes, tout roule, j'upload et j'insère 2 fichiers sur le serveur , 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 :
|
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 :
|
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 : |
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.
Marsh Posté le 16-10-2009 à 12:36:43
En résumé, moi je ferai plutôt quelque chose dans le genre :
Code :
|
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
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 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 .
Vi, la déclaration de ma variable aFile de cette façon, c'est toomuch et ça ne sers pas à grand chose....
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 :
|
Et le serveur ma retourner un message d'erreur, je teste ça dans la journée.
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 ...
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" ...
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 :
|
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 ....
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
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é
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 :
|
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
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 :
|
Mais faut que je regarde encore le bouquin pour comprendre ce qu'a utilisé Tirkyth et pourquoi.
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 ...
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
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)
Marsh Posté le 29-10-2009 à 14:23:48
Effectivement $val n'a rien à faire ici, donc j'ai écrit :
Code :
|
Mais rien ... toujours la première lettre qui s'inscrit.
Code :
|
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.
Marsh Posté le 29-10-2009 à 15:06:39
fscalda a écrit :
|
Je comprends pas à quoi sert cette partie ?
Et sinon je pense qu'il faut remplacer
Code : |
Par
Code : |
Marsh Posté le 29-10-2009 à 15:44:57
cette partie sert à ...... rien
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
Marsh Posté le 29-10-2009 à 15:58:19
De rien
En bonus tu peux éditer ton tout premier message et placer un petit [Résolu] devant le titre
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, ', ');
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 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...
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.
Message édité par fscalda le 29-10-2009 à 15:59:30