Résolu PHP - Mon code pour envoyer son avatar est fonctionnel mais un des messages d'erreur non.

Paul GTP

Légende vivante
VIP
Inscription
15 Août 2013
Messages
6 194
Réactions
7 545
Points
24 772
Hey ;)

Contexte
J'essaie de créer un système pour permettre à mes membres d'upload un avatar lors de leur inscription. Hier je n'y arrivais pas car j'étais fatigué.
En effet, les codes d'erreur marchaient bien mais lorsqu'un avatar valide était envoyé, ça ne marchait plus...
Aujourd'hui, je réecris tout mon code et: ÇA FONCTIONNE ENFIN !
ou pas :d:
En effet, maintenant, tout est fonctionnel SAUF le format du fichier à upload.

Je m'explique. Voici deux exemples de membres:
2455c8319a464797a5df81bdbc117d87.png

  • Le membre 4 a un avatar valide => on valide le formulaire d'inscription puis on lui donne son avatar
  • Le membre 5 a un avatar non-valide => on valide le formulaire d'inscription mais on ne peut pas lui donner son avatar alors "avatar" reste vide

Le but est que si l'utilisateur renvoie un mauvais avatar, il soit redirigé vers register?error=10 !
J'ai beau chercher à comprendre, je ne vois pas l'erreur dans mon code :mmh:

Le problème ne doit pas venir de la condition en elle-même car lors de l'inscription, si le membre utilise un fichier type ".php" par exemple, il est quand même redirigé vers l'index.
OR, s'il est redirigé vers l'index c'est que if($resultat) est validé par le code, d'où mon interrogation...

Car si cette condition est vérifiée, dans la base de donnée il devrait y avoir marqué dans la colonne avatar "fichier.php"...

Je suis vraiment perdu, je ne vois pas d'où ça peut bien venir :crazy:
Merci d'avance à ceux qui essaieront et un gros big up à celui qui réussira à me trouver l'erreur !

NB: Le seul code d'erreur qui ne fonctionne pas est celui qui dit que l'extension du fichier n'est pas bonne, l'erreur qui dit que le fichier est trop grand fonctionne !

Code:
<?php
if(isset($_FILES['avatar']) AND !empty($_FILES['avatar']['name'])) {
    $tailleMax = 2097152;
    $extensionsValides = array('jpg', 'jpeg', 'gif', 'png');
   
    if($_FILES['avatar']['size'] <= $tailleMax) {
        $extensionUpload = strtolower(substr(strrchr($_FILES['avatar']['name'], "."), 1));
       
        $register = $bdd->prepare('INSERT INTO pdev_users (name, surname, username, email, password, register, date, ip) VALUES (:name, :username, :username, :email, :password, :register, :date, :ip)');
        $register->execute(array(
            'name' => $name,
            'surname' => $surname,
            'username' => $username,
            'email' => $email,
            'password' => $password,
            'register' => time(),
            'date' => time(),
            'ip' => $ip
            ));
       
        $_SESSION['username'] = $username;
       
        $whatisid = $bdd->prepare('SELECT * FROM pdev_users WHERE username = :username');
        $whatisid->execute(array('username' => $username));
        $whatis = $whatisid->fetch();
       
        $_SESSION['id'] = $whatis['id'];
       
        if(in_array($extensionUpload, $extensionsValides)) {
            $chemin = "../img/avatars/".$_SESSION['id'].".".$extensionUpload;
            $resultat = move_uploaded_file($_FILES['avatar']['tmp_name'], $chemin);
           
            if($resultat) {
                $updateavatar = $bdd->prepare('UPDATE pdev_users SET avatar = :avatar WHERE id = :id');
                $updateavatar->execute(array(
                    'avatar' => $_SESSION['id'].".".$extensionUpload,
                    'id' => $_SESSION['id']
                    ));
                header('Location: ../index');
            } else {
                header('Location: ../register?error=11');
            }
        } else {
            header('Location: ../register?error=10');
        }
    } else {
        header('Location: ../register?error=9');
    }
}
?>

:love:
 

Paul GTP

Légende vivante
VIP
Inscription
15 Août 2013
Messages
6 194
Réactions
7 545
Points
24 772
Problème résolu :bzr:

Mon erreur s'expliquait par le fait que j'avais mis
Code:
    if(isset($_SESSION['username'])) {
        header('Location: ../index');
    }
sur ma page register.php

Du coup, comme il y a une session crée sans que l'upload du fichier soit effectuée, je suis redirigé vers l'index :p
Sinon, mon erreur fonctionne bien étant donné qu'en retirant cette ligne de mon register, le message "Votre avatar doit être au format jpg, jpeg, gif ou png" est bien affiché :D

Il faut donc que j'édite mon code pour que le compte ne se crée pas s'il y a une erreur, mais ça c'est une autre histoire :xD:

J'ai déplacé ma discussion en section Résolu.

Bonne fin de soirée,
Paul GTP
 
Haut