E commerce WinDev Mobile et MySQL ~ Profile Avatar ~ Partie 2 Déconnexion

AUTEUR Code-Codage ~ 16/11/2023
Programmation WINDEV Mobile Débutant

Après l'upload de profile avatar de la part de l'utilisateur, Je vous propose de découvrir dans ce nouveau chapitre, la continuité nous allons donnée la possibilité à l'utilisateur de déconnecté sa session depuis l'espace SHOP.


//Déclaration des variables globales du projet
idUtilisateur est un entier
NomUtilisateur est une chaîne
TelephoneUtilisateur est une chaîne
DateCompteUtilisateur est une Date
ImageProfile est une Image

DConnect est DBconnect
SQLRequete est une chaîne

//Déclaration de la variable AvatarProfile comme une chaine
AvatarProfile est une chaîne
BufferImage est un Buffer
PROCÉDURE CreerCompte(PAYS, NOM, TELEPHONE, MDP, PROFILE = "")

//Protégé les caractère spéciaux 'mySQLEscapeString'
DConnect:mySQLEscapeString(PAYS)
DConnect:mySQLEscapeString(NOM)
DConnect:mySQLEscapeString(TELEPHONE)
//DConnect:mySQLEscapeString(MDP)

Mdp_Crypte est une chaîne = Crypte(MDP, "r_user")

//Ajouter la date de création compte
Date_Compte est une Date = DateDuJour()

//Contrôle des champs
SI PAYS = "" AND NOM = "" AND TELEPHONE = "" AND MDP = "" ALORS

// Afficher le message non bloquant,
// l'avantage est qu'il ne bloque pas l'exécution des codes
// c'est a dire les codes continue s'exécuter en arrière plan
// même si le message s'affiche
InfoAsynchrone("Veuillez remplir les champs vides")
SINON
//Vérifier si l'utilisateur possède un compte
SQLRequete = "SELECT * FROM utilisateurs WHERE TELEPHONE = '"...
+ TELEPHONE + "' OR MDP = '"...
+ Mdp_Crypte + "'"

// Exécuter la requête et attribuer un numéro à la requête
DConnect:MySQLExecPS(SQLRequete, 1)

// Encoder l'image de profile en base64
// Charge le contenu d'un fichier externe dans une variable de type buffer.
BufferImage = dSaveImageJPEG(PROFILE, enMémoire)
AvatarProfile = Encode(BufferImage,encodeBASE64)

// AvatarProfile = Encode(fChargeBuffer(PROFILE),encodeBASE64)
// La fonction charge est lent, puisqu'il va enregistrer l'image selon son format d'origine
// Par conséquent on peu se retrouver avec une image de type BMP ou d'autre format lourd
// Cela va causer de grave problème au chargement de l'image ou dans la session de l'utilisteur

// Vérifier si les informations sont égale
SI PAS DConnect:mySQLFetch(1) ALORS
SQLRequete = "INSERT INTO utilisateurs SET PAYS = '"...
+ PAYS + "', NOM = '"...
+ NOM + "', TELEPHONE = '"...
+ TELEPHONE + "', MDP = '"...
+ Mdp_Crypte + "', DATE_COMPTE = '"...
+ Date_Compte + "', PROFILE = '" ...
+ AvatarProfile + "'"

//Exécuter la requête en poste
DConnect:MySQLExecPS(SQLRequete, 1)

// Afficher le message non bloquant,
// l'avantage est qu'il ne bloque pas l'exécution des codes
// c'est a dire les codes continue s'exécuter en arrière plan
// même si le message s'affiche
InfoAsynchrone("Votre Compte a été créer avec succès")

// Fermer l'exécution de la requête
DConnect:mySQLFerme(1)


// DConnect:mySQLMsgBox("Enregistrement")
SINON
// Afficher le message non bloquant,
// l'avantage est qu'il ne bloque pas l'exécution des codes
// c'est a dire les codes continue s'exécuter en arrière plan
// même si le message s'affiche
InfoAsynchrone("Ce compte existe déjà, le numéro de Téléphone ou Mot de passe est déjà utilisé")
FIN
FIN

PROCÉDURE ConnexionClient(TELEPHONE, MDP)

//Protégé les caractère spéciaux 'mySQLEscapeString'
DConnect:mySQLEscapeString(TELEPHONE)
//DConnect:mySQLEscapeString(MDP)

Mdp_Crypte est une chaîne = Crypte(MDP, "r_user")

//con troller les champs
SI TELEPHONE = "" ET MDP = "" ALORS

// Afficher le message non bloquant,
// l'avantage est qu'il ne bloque pas l'exécution des codes
// c'est a dire les codes continue s'exécuter en arrière plan
// même si le message s'affiche
InfoAsynchrone("Les champs sont vide")
SINON
SQLRequete = "SELECT * FROM utilisateurs WHERE TELEPHONE = '"...
+ TELEPHONE + "' AND MDP = '"...
+ Mdp_Crypte + "'"

//Exécuter la requête en poste
DConnect:MySQLExecPS(SQLRequete, 1)

//Compter aller trouver les information
SI DConnect:mySQLFetch(1) ALORS
idUtilisateur = DConnect:mySQLLitColParNom(1, "ID")
NomUtilisateur = DConnect:mySQLLitColParNom(1, "NOM")
TelephoneUtilisateur = DConnect:mySQLLitColParNom(1, "TELEPHONE")
DateCompteUtilisateur = DConnect:mySQLLitColParNom(1, "DATE_COMPTE")
ImageProfile = Décode(DConnect:mySQLLitColParNom(1, "PROFILE"),encodeBASE64)

// Afficher le message non bloquant,
// l'avantage est qu'il ne bloque pas l'exécution des codes
// c'est a dire les codes continue s'exécuter en arrière plan
// même si le message s'affiche
// InfoAsynchrone("Bienvenue " + NomUtilisateur)
RAZ()

OuvreFenêtreMobile(SHOP)
SINON
// Afficher le message non bloquant,
// l'avantage est qu'il ne bloque pas l'exécution des codes
// c'est a dire les codes continue s'exécuter en arrière plan
// même si le message s'affiche
InfoAsynchrone("Votre compte n'a pas été trouvé")
FIN
FIN

PROCÉDURE MotdepasseOublier(NUMERO_PHONE)

SI NUMERO_PHONE = "" ALORS
// Afficher le message non bloquant,
// l'avantage est qu'il ne bloque pas l'exécution des codes
// c'est a dire les codes continue s'exécuter en arrière plan
// même si le message s'affiche
InfoAsynchrone("Veuillez indiquer votre numéro de téléphone")
SINON
SQLRequete = "SELECT * FROM utilisateurs WHERE TELEPHONE = '" + NUMERO_PHONE + "'"

//Exécuter la requête en poste
DConnect:MySQLExecPS(SQLRequete, 1)

//Compter aller trouver les information
SI DConnect:mySQLFetch(1) ALORS
idUtilisateur = DConnect:mySQLLitColParNom(1, "ID")
NomUtilisateur = DConnect:mySQLLitColParNom(1, "NOM")
//Décoder l'image encoder
ImageProfile = Décode(DConnect:mySQLLitColParNom(1, "PROFILE"),encodeBASE64)

// Poser la question à l'utilisateur
SI OuiNon(NomUtilisateur + " Est il votre compte ?") = Oui ALORS

// Affecter le libellé par la valeur récupéré dans la base de données
FI_USERS_LOG.U_reset_pass = NomUtilisateur
FI_USERS_LOG.ProfileIm = ImageProfile

//Passer au Plan 4
FI_USERS_LOG..Plan = 4
FIN

SINON
// Afficher le message non bloquant,
// l'avantage est qu'il ne bloque pas l'exécution des codes
// c'est a dire les codes continue s'exécuter en arrière plan
// même si le message s'affiche
InfoAsynchrone("Votre compte n'a pas été trouvé")
FIN
FIN

 



Réponses