E-commerce WinDev Mobile et MySQL ~ Profile Avatar

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

Je vous propose de découvrir dans ce nouveau chapitre de la série, après avoir donnée la possibilité à l'utilisateur de créer son compte, se connecter, récupéré son compte et modifier, dans la continuité de ce nouveau chapitre nous allons ajouter la possibilité à l'utilisateur d'uploader son profile avatar.



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