Avis sur mon script

Résolu/Fermé
Mephistole Messages postés 55 Date d'inscription lundi 28 mars 2016 Statut Membre Dernière intervention 20 avril 2020 - Modifié le 1 mai 2018 à 09:56
Mephistole Messages postés 55 Date d'inscription lundi 28 mars 2016 Statut Membre Dernière intervention 20 avril 2020 - 11 mai 2018 à 12:49
Bonjour,

Je viens de faire un script qui permet de se connecter à un site. Et j'aimerais avoir votre avis.
Le voici :
<?php
// Temporise les données afin qu'elle ne soient pas envoyé immédiatement
ob_start();

$userConnection = new user();
// $connectionMessage sert à stocker les messages d'erreurs
$connectionMessage = array();
$regexMail = '/[a-zA-Z0-9_\-.]{1,}[@]{1}[a-zA-Z0-9_\-.]{1,}[.]{1}[a-zA-Z]{1,}/';
// Si on clique sur connection
if (isset($_POST['submitConnection'])) {
    // Et si le champ correspondant au mail n'est pas vide
    if (!empty($_POST['mailConnection'])) {
        // On vérifie que le mail rentré est correcte
        if(preg_match($regexMail, $_POST['mailConnection'])) {
            // On attribut à $userConnection->mail le mail rentré, strip_tags supprime les balises HTML et PHP
            $userConnection->mail = strip_tags($_POST['mailConnection']);
            $userConnection->getHashByMail();
        } else {
            //Si le mail n'est pas correcte, on envoie un message d'erreur
            $connectionMessage['wrongMail'] = 'Le mail que tu as écrit n\'est pas correct';
        }
    // Si aucun mail n'est donné, on envoie un message d'erreur
    } else {
        $connectionMessage['emptyMail'] = 'Tu n\'as pas écris ton mail.';
    }
    
    // On vérifie si le champs correspondant au mot de passer n'est pas vide
    if (!empty($_POST['passwordConnection'])) {
        // On vérifie si le mot de passe entré correspon au mot de passe dans la base de donnée
        if ($_POST['passwordConnection'] == $userConnection->password) {
            // Si le mot de passe est vérifié on attribut la valeur du champ à $userConnection->password
            $userConnection->password = strip_tags($_POST['passwordConnection']);
            // Si le mot de passe ne correspond pas à celui entré dans la base de donnée, on envoie un message d'erreur
            } else {
                $connectionMessage['wrongPassword'] = 'Le mot de passe que tu as donné n\'est pas correcte.';
            }
      // Si le champ du mot de passe est vide, on affiche un mot de passe
    } else if (empty($_POST['passwordConnection'])){
        $connectionMessage['emptyPassword'] = 'Il faut donner un mot de passe.';
    }
    
    // Si il n'y a aucune erreur, alors on crée une session après avoir récupéré les informations sur l'utilisateur
    if (count($connectionMessage) == 0) {
//        $userConnection->password = '';
//        $userConnection->mail = '';
        
        // session_start() permet de démarrer une session
        session_start();
        // $_SESSION permet de garder les informations lié à un utilisateur lorsqu'il est connecté
        $_SESSION['id'] = $userConnection->id;
        $_SESSION['password'] = $userConnection->password;
        $_SESSION['last_name'] = $userConnection->last_name;
        $_SESSION['first_name'] = $userConnection->first_name;
        $_SESSION['mail'] = $userConnection->mail;
        // header() redirige vares la page indiquée
        header('Location: profile.php');
        // exit termine le script
        exit;
        }
}
// Envoie les données temporisées et met fin à la temporisation des données
ob_end_flush();
?>


Merci de vos réponses.
EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.
A voir également:

2 réponses

yg_be Messages postés 23338 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 novembre 2024 Ambassadeur 1 551
Modifié le 1 mai 2018 à 10:55
bonjour,
il est préférable de :
- mettre session_start() en début de page php
- de ne pas enregistrer les mots de passe, mais de stocker un hash du mot de passe. tu peux utiliser password_hash pour créer le hash, et password_verify pour vérifier que le mot de passe est correct.

par ailleurs, il me semble que ce script mélange erronément deux actions:
- inscription d'un nouvel utilisateur
- connection d'un utilisateur existant
0
Mephistole Messages postés 55 Date d'inscription lundi 28 mars 2016 Statut Membre Dernière intervention 20 avril 2020 1
2 mai 2018 à 15:29
Merci de ton avis :)

Tu veux dire quoi quand tu dis que le script mélange 2 actions ?
0
yg_be Messages postés 23338 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 novembre 2024 1 551 > Mephistole Messages postés 55 Date d'inscription lundi 28 mars 2016 Statut Membre Dernière intervention 20 avril 2020
2 mai 2018 à 20:10
fais d'abord les modifications suggérées.
si il ne s'agit pas d'enregistrer un nouvel utilisateur, je ne vois pas l'interet de vérifier la syntaxe de l'adresse email.
que fait getHashByMail()?
(aussi discuté ici: https://openclassrooms.com/fr/forum/sujet/avis-sur-mon-script?page=1#message-92346501)
0
Mephistole Messages postés 55 Date d'inscription lundi 28 mars 2016 Statut Membre Dernière intervention 20 avril 2020 1
2 mai 2018 à 20:38
getHashByMail() (que j'ai renommé getUserByMail() entre temps ^^) sert à récupérer le nom, le prénom, le mail et le mot de passe (pour la connexion de l'utilisateur).

Le nom, le prénom et le mail sont récupérés pour être utilisé plus tard.
0
jordane45 Messages postés 38296 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 19 novembre 2024 4 704
2 mai 2018 à 20:57
Bonjour,

En ce qui me concerne.. je ne comprend pas que tu ne fasses pas la vérification dans la class user ?

Class User dans laquelle je placerait un constructeur avec le login et le password.

Ensuite, il est tout de même conseillé de récupérer PROPREMENT les variables AVANT de les utiliser.
Je t'invite à lire ceci : https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code

Et pour finir .... l'instruction session_start est à placer au tout début de ton fichier PHP. Ne jamais le mettre en plein milieu.


0
Mephistole Messages postés 55 Date d'inscription lundi 28 mars 2016 Statut Membre Dernière intervention 20 avril 2020 1
11 mai 2018 à 12:49
Merci de ton avis, je vais en tenir compte.
0