IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Upload] Ne retourne pas d'erreur


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 145
    Points : 59
    Points
    59
    Par défaut [Upload] Ne retourne pas d'erreur
    J'ai fais un script pour upload des avatars sur mon disque et mettre ma base de donnée a jour, j'arrive bien a retourner une erreur quand le format n'est pas bon mais pas quand la taille depasse.

    De plus il ne me copie plus les fichiers dans le repertoire de destination, je ne comprends pas d'ou viens l'erreur et je cherche depuis hier a comprendre.

    J'ai rajouter des exit() mais le script ne s'arrete pas et fonctionne pourtant bien puisqu'il me retourne l'erreur.

    Si quelqu'un voit une faute quelque pars :

    <?php
    require ("connect.php");

    if(isset($_FILES['photo']))

    {
    //parametres
    unset($erreur);
    $extensions_ok = array('png', 'gif', 'jpg', 'jpeg');
    $taille_max = 100000;
    $dest_dossier = 'c:/www/Avatars/';

    // On verrifie les extensions
    if( !in_array( substr(strrchr($_FILES['photo']['name'], '.'), 1), $extensions_ok ) )
    {
    header("location: chavatar.php?erreur1&PHPSESSID=".$_POST['session']);
    $error = true;
    exit();
    }
    // On verrifie la taille du fichier
    elseif( file_exists($_FILES['photo']['name']) and filesize($_FILES['photo']['name']) > $taille_max)
    {
    $error = true;
    header("location: chavatar.php?erreur2&PHPSESSID=".$_POST['session']);
    exit();
    }

    // Si ficher = bonne taille & bonne extension
    if(!isset($erreur))
    {

    $dest_fichier = basename($_FILES['photo']['name']);
    //formatage nom fichier
    //enlever les accents
    $dest_fichier = strtr($dest_fichier,
    'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
    'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
    // remplacer les caracteres autres que lettres, chiffres et point par _
    $dest_fichier = preg_replace('/([^.a-z0-9]+)/i', '_', $dest_fichier);
    // On upload le fichier
    move_uploaded_file($_FILES['photo']['name'], $dest_dossier . $dest_fichier);

    // On remet a jour la base de donnée
    $valide = "UPDATE `art` SET avatar = '".$_FILES['photo']['name']."' WHERE nom = '".$_POST['pseudo']."' ";
    $test = mysql_query($valide) or die("erreur ! ".mysql_error());

    //Redirection sur page precedente
    header("location: chavatar.php?1&PHPSESSID=".$_POST['session']);
    }
    }else{
    echo "erreur";
    header("location: chavatar.php?erreur1&PHPSESSID=".$_POST['session']);
    }




    ?>

  2. #2
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 145
    Points : 59
    Points
    59
    Par défaut
    Je viens de faire quelque test supplementaire et j'avais oublier de mettre le nom temporaire pour le fichier ...

    move_uploaded_file($_FILES['photo']['tmp_name'], $dest_dossier . $dest_fichier);
    Par contre il ne me verrifie toujours pas la taille

  3. #3
    Membre confirmé
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Points : 557
    Points
    557
    Par défaut
    salut,

    tu essayes de vérifier la taille du fichier en te basant sur ['name'], mais ca c'est le nom original du fichier... Au pire, il faudrait que tu utilises ['tmp_name'], au mieux, tu peux encore comparer avec ['size'] qui contient déjà la taille du fichier en question!

    ++
    Merci à Microsoft pour avoir transformé un métier relativement terne et basé sur une approche bêtement technique et rigoureuse des faits, en challenge quotidien, nécessitant une remise en question permanente à l'échelle du quart d'heure

  4. #4
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 145
    Points : 59
    Points
    59
    Par défaut
    Je test avec :

    elseif( file_exists($_FILES['photo']['name']) and $_FILES['size'] < $taille_max)

    mais ne marche pas non plus

  5. #5
    Membre confirmé
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Points : 557
    Points
    557
    Par défaut
    sorry de pas avoir été assez clair

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $_FILES['photo']['size']
    mieux comme ca
    Merci à Microsoft pour avoir transformé un métier relativement terne et basé sur une approche bêtement technique et rigoureuse des faits, en challenge quotidien, nécessitant une remise en question permanente à l'échelle du quart d'heure

  6. #6
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 145
    Points : 59
    Points
    59
    Par défaut
    elseif( file_exists($_FILES['photo']['name']) and $_FILES['photo']['size'] > $taille_max)

    ne me retourne rien non plus il ne copie pas le fichier sur le disque mais ne me retourne pas d'erreur :/

  7. #7
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 145
    Points : 59
    Points
    59
    Par défaut
    en retirant les header pour voir d'ou ca viens je vois que quand la taille depasse il me retourne une taille de :

    taille = 0

    par contre il me continue bien le code comme si tout marchait bien

  8. #8
    Membre confirmé
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Points : 557
    Points
    557
    Par défaut
    En fait, y'a déjà quelques problèmes dans ton script...

    si tu veux faire des tests sur la présence physique du fichier, il faut faire se baser sur

    $_FILES['photo']['tmp_name'] et non sur le ['name'].
    'name' => nom du fichier original
    'tmp_name' => nom du fichier actuellement sur le disque du serveur (souvent un truc du genre /tmp/qqch)

    Donc là, ton if sur file_exists va renvoyer false, car tu testes sur name.
    Ton script ne passera donc jamais dans le elseif, $erreur n'est jamais set, et ton script continue donc sans soucis...

    Regarde donc pour corriger ca.
    Merci à Microsoft pour avoir transformé un métier relativement terne et basé sur une approche bêtement technique et rigoureuse des faits, en challenge quotidien, nécessitant une remise en question permanente à l'échelle du quart d'heure

  9. #9
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 145
    Points : 59
    Points
    59
    Par défaut
    même avec ce code la :

    // On verrifie les extensions
    if( !in_array( substr(strrchr($_FILES['photo']['name'], '.'), 1), $extensions_ok ) )
    {
    header("location: chavatar.php?erreur1&PHPSESSID=".$_POST['session']);
    }
    // On verrifie la taille du fichier
    elseif( file_exists($_FILES['photo']['tmp_name']) and $_FILES['photo']['size'] > $taille_max)
    {
    header("location: chavatar.php?erreur2&PHPSESSID=".$_POST['session']);
    }

    Ca ne marche pas

  10. #10
    Membre confirmé
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Points : 557
    Points
    557
    Par défaut
    t'as essayé du print_r($_FILES);
    pour voir si tout se passait bien à l'upload, si tu avais bien les données que tu attends?
    Merci à Microsoft pour avoir transformé un métier relativement terne et basé sur une approche bêtement technique et rigoureuse des faits, en challenge quotidien, nécessitant une remise en question permanente à l'échelle du quart d'heure

  11. #11
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 145
    Points : 59
    Points
    59
    Par défaut
    J'upload bien le fichier maintenant sans soucis il verrifie le bon format pas de soucis par contre le seul truc c'est qu'il ne me retourne pas l'erreur en cas de taille trop importante et quand je fais un echo de la taille il me retourne :

    taille = 0

    alors qu'avec un fichier plus petit il me retourne la bonne taille ^^

  12. #12
    Membre confirmé
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Points : 557
    Points
    557
    Par défaut
    ah yes, donc l'upload a merdé... Si tu regardes cette valeur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $_FILES['photo']['error']
    tu devrais avoir l'un des retours suivants:

    http://fr2.php.net/manual/fr/feature...oad.errors.php
    Merci à Microsoft pour avoir transformé un métier relativement terne et basé sur une approche bêtement technique et rigoureuse des faits, en challenge quotidien, nécessitant une remise en question permanente à l'échelle du quart d'heure

  13. #13
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 145
    Points : 59
    Points
    59
    Par défaut
    J'ai mis ca dans mon formulaire en y regardant de plus près :

    <INPUT type=hidden name=MAX_FILE_SIZE VALUE=500000>

    Mais je pense qu'il ne me sert a rien donc je vais le virer pour voir

  14. #14
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 145
    Points : 59
    Points
    59
    Par défaut
    Il me retourne bien 'taille du fichier trop importante' mais me l'affiche quand même ...

    Je ne comprends pas bien ...

  15. #15
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 145
    Points : 59
    Points
    59
    Par défaut
    le exit(); a eut raison de moi pour ne pas continuer le script

    maintenant juste une petite chose je voudrais comme c'est pour utiliser des avatar ne pas depasser une certaine dimension pour ne pas tout changer ...

    Pour vous quel serait la taille pour un avatar correct a ne pas depasser et surtout comment faire pour l'integrer a mon script ?

Discussions similaires

  1. Réponses: 7
    Dernier message: 16/04/2020, 17h57
  2. Réponses: 9
    Dernier message: 01/05/2014, 14h12
  3. Erreur qui ne retourne pas un message d'erreur
    Par pierrot10 dans le forum Langage
    Réponses: 4
    Dernier message: 30/04/2010, 19h04
  4. Réponses: 2
    Dernier message: 05/07/2009, 16h46
  5. fonction qui ne s'execute pas mais qui ne retourne pas d'erreur
    Par duplo dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 03/06/2006, 21h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo