probleme de réléchargement de fichier

probleme de réléchargement de fichier - PHP - Programmation

Marsh Posté le 14-03-2006 à 15:04:31    

aaaaaaaaarggg, heeelpppp,
 
je veux télécharger un fichier de mon ordi qui s'enregistre après dans une base de donnée.
aucun probleme pour la base mais o téléchargement ça marche pas.
 
voilà mon code qui fait le teste du fichier qu'on souhaite téléchargé :  
 
<?php
// Taille maximum
$MAX_FILE_SIZE = 1500000;
 
// Dossier de destination du fichier
$folder = "./IMG/doc/";
 
// Variables récupérée par methode POST du formulaire
$fname = $HTTP_POST_FILES['fichier']['name'];
$ftype = $HTTP_POST_FILES['fichier']['type'];
$fsize = $HTTP_POST_FILES['fichier']['size'];
$ftmp = $HTTP_POST_FILES['fichier']['tmp_name'];
 
// Tableau array des différents types
$allowed_types = array("application/rtf", "application/excel", "application/pdf", "application/mspowerpoint", "application/msword", "image/bmp", "image/gif", "image/pjpeg", "image/jpeg", "image/jpg", "multipart/x-zip", "video/mpeg", "video/msvideo" );
 
// Diverses test afin de savoir si :
// Le format de fichier correspond à notre tableau array
if(!in_array($ftype, $allowed_types)){$error = 1;}
 
// La taille du fichier n'est pas dépassée
if($fsize > $MAX_FILE_SIZE){$error = 2;}
 
// Le fichier n'existe pas déjà
if(file_exists($folder."m_".$fname)){$error = 3;}
 
// Si tout va bien, c'est bien déroulé
if(copy($ftmp,''.$folder.''.$fname.'')) {$error = 0;}
 
// Switch servant simplement à la gestion des erreurs
switch($error){
case'0':
echo("<br>Nous avons bien reçu le fichier ".$fname."." );
break;
case'1':
echo("<br><font color='red'>Erreur : le format de fichier est incorrect.</font>" );
break;
case'2':
echo("<br><font color='red'>Erreur : le fichier est trop volumineux.</font>" );
break;
case'3':
echo("<br><font color='red'>Erreur : un fichier du même nom a déjà été envoyé sur le serveur.</font>" );
break;
}
?>
 
 
j'ai sans cesse l'erreur "le format de fichier est incorrect" pourtant ma variable "$allowed_types" autorise les pdf ou autre fichier word (j'ai testé avec des pdf, word et excel même probleme).
 
aah j'ai que des galères de code...c hard!!

Reply

Marsh Posté le 14-03-2006 à 15:04:31   

Reply

Marsh Posté le 14-03-2006 à 15:20:38    

"$ftype" contient quoi? (fait un echo de "$ftype" )
A ma conaissance, "in_array()" fait la différence entre une majuscule et une minuscule pour des chaines de caractéres.

Reply

Marsh Posté le 14-03-2006 à 15:25:27    

Comme te l'a déjà dit Omega2, essaye un minimum de débugger par toi-même ;)
Par exemple ici :
tu as sans cesse "le format de fichier est incorrect" ==> donc $error vaut toujours 1 ==> donc y a un problème dans ta condition if (!in_array($ftype, $allowed_types))  
 
==> donc tu fais un affichage de $ftype et de $allowed_types, et tu regardes où est le problème. Et je suis près à parier que tu ne l'as pas fait.
 
Et juste au cas où tu ne connaitrais pas cette fonction, utilise la fonction print_r pour afficher une variable ( http://www.php.net/manual/fr/function.print-r.php ). Utilisation garantie pour tout débuggage en PHP


Message édité par Djebel1 le 14-03-2006 à 15:28:05
Reply

Marsh Posté le 14-03-2006 à 15:33:51    

aaah ça m'enerve, il m'affiche rien du tout quand je lui dit echo $ftype;
suis perdue!!!! j'ai testé déjà fichier tout en minuscule tout tout tout, en plus au debut ça marchait et puis plus rien du coup je pige pas et ça fait 100 fois que je relis ce code snnif

Reply

Marsh Posté le 14-03-2006 à 15:36:01    

bah oui je sais :-((( faut que je trouve m'enfin si je reste dessus des jours aidez moi hein!!! je connaissais pas la fonction, je vais regarder ça de plus près. merci tous les deux!!!

Reply

Marsh Posté le 14-03-2006 à 15:43:16    

Si t'as rien dans $ftype, alors faut vérifier le contenu de la variable qui sertà la remplir. Et si t'as pas ce qu'il faut dans celle là, alors il faudra vérifier si t'as l'info ailleur, sinon, tu seras foutus.

Reply

Marsh Posté le 14-03-2006 à 15:53:47    

ouais bah c pas gagné!!! pourtant formulaire de téléchargement classique :  
<form action="document.php" method="post" ENCTYPE="multipart/form-data" name="form" id="form">
            <tr>  
              <td colspan="2" align="right" valign="top">&nbsp;</td>
            </tr>
            <tr>  
              <td align="right" valign="top"><strong><font color="#3E78B3" size="2">Envoyer  
                le document </font></strong><font color="#3E78B3" size="2"><strong>:</strong></font></td>
              <td> <input type="file" name="fichier">
                <br> <input type="submit" value="Télécharger" class="BtnForm">  
 
et le fameux document.php c le code de tout à l'heure!!!
 
m'enfin je sais, je sais, je cherche...

Reply

Marsh Posté le 14-03-2006 à 16:05:44    

As-tu seulement fait ce que l'on te conseille ?
Reprenons :
 
1) $ftype est vide. Donc tu vérifies la variable qui sert à la remplir, à savoir $HTTP_POST_FILES['fichier']['type']. Encore une fois je suis près à parier que tu n'as pas afficher cette variable pour débugger.
 
2) S'il y a un problème avec $HTTP_POST_FILES['fichier']['type'], alors tu continues le débuggage : tu regardes tout le  tableau $HTTP_POST_FILES['fichier'] avec print_r($HTTP_POST_FILES['fichier']).
 
3) S'il y a un problème avec ce tableau, alors c'est qu'il y a un problème avec la soumission de ton formulaire.
 
A ce moment, et seulement à ce moment, tu nous demandes quel est le problème si ça ne marche pas. En effet, on est pas là pour faire tout le débuggage à ta place, il est plus que normal que tu suives ces étapes. Sinon tu  vas ouvrir 10 posts par jour avec ce genre de questions, pour lesquelles on te donnera toujours les mêmes réponses : "qu'affiche la variable bidule ? tu as vérifier la condition machin ?"
 
Mon message n'a pas pour but de t'agresser, juste de te faire prendre conscience de ce gros manque de débuggage personnel.
 
 
 
Sinon, d'autres choses qui n'ont rien à voir :
- ça fait un bail qu'on utilise plus $HTTP_POST_FILES ou $HTTP_POST_VARS, il faut utiliser $_FILES, $_POST, $_GET, etc ...
 
- un tableau en html ne sert pas à faire de la mise en forme, mais à afficher des données tabulaires. Dans ton cas, tu utilises un tableau pour mettre en forme ton formulaire, ce qui alourdit la page, et va poser problème sous certaines conditions de navigation (personnes mal-voyantes, téléphones portables, ...). Ceci touche au problème d'accessibilité des pages, ceci est primordial et tu DOIS te renseigner sur ce point.
Je te conseille donc de révisier ton html et tes CSS, avant de te mettre au PHP. Un excellent site en français : http://www.alsacreations.com/
Tu pourras notamment y apprendre diverses manières de faire un formulaire correctement
 
Il n'est bien sur pas nécessaire de maitriser à fond le xhtml et les CSS pour se mettre au PHP, néanmoins, il faut en connaitre un minimum vital.


Message édité par Djebel1 le 14-03-2006 à 16:11:32
Reply

Marsh Posté le 14-03-2006 à 16:15:24    

ok, je comprend!!! c normal. pour le tableau c pas mon idée et je sais bien que ça alourdit mais ton message m'aidera à imposer mon point de vue à mon equipier qui connait que ça et qui croit que c génial d'utiliser un tableau ;-). bon j'arrête d'innonder le forum et me lance dans mon debuggage. merci pour les infos.

Reply

Marsh Posté le 14-03-2006 à 16:26:01    

et le formulaire d'envoi on peut le voir ?

Reply

Marsh Posté le 14-03-2006 à 16:26:01   

Reply

Marsh Posté le 14-03-2006 à 16:37:28    

oui je l'ai posté (voir ci-dessus).
sinon c bizzard Djebel, ça ne me renvoie rien en testant... mais je continue!!!

Reply

Marsh Posté le 15-03-2006 à 10:32:19    

bonjour,
je suis désolée... mais je n'y arrive pas... la fonction de debbug ne me renvoie rien, ma page "document.php" affiche quoi que je fasse l'erreur "1", j'avoue être perdu!!! mon site est sous spip mais je ne voit pas en quoi ça pourrait être le probleme!!! j'ai déjà epluché le forum SPIP. quoi qu'il en soit, quand je poste le document de l'espace privé de spip, aucun probleme, il s'enregistre dans ma base mais par la page de formulaire que j'ai créé (voir code en haut) riennn!!! là je ne sais plus trop quoi faire... mise à part refaire tout :-((

Reply

Marsh Posté le 15-03-2006 à 12:42:25    

si print_r($_FILES) n'affiche rien c'est que ton formulaire a pas marché correctement. Mais je ne vois pas ce qui bug à la vue de ton script

Reply

Marsh Posté le 16-03-2006 à 09:16:31    

moi non plus, j' ai repris mon scripte des dizaines de fois... avec toute ma bonne volonté...rien, je ne vois pas, d'autant que ça marchait très au debut, puis d'un coup cette fameuse erreur!!! c dingue!!! bah tant pis! merci beaucoup pour toutes tes infos surtout en matière de debugg ;-)

Reply

Sujets relatifs:

Leave a Replay

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