[C#]Create User - Création de compte utilisateur

Cette section est destinée aux scripts partagés par la communauté. Chaque post est destiné à un script. Suivez bien les recommandations.
Arkas
Messages : 21
Inscription : 03 Juin 2016 16:51

[C#]Create User - Création de compte utilisateur

Message par Arkas » 07 Juin 2016 11:05

-POST:
-NOM DU SCRIPT : CreateUser

-AUTEUR(S): Damien Gouron @Arkas

-DESCRIPTION : Un script qui permet de créé un compte utilisateur dans une base de donnée. Utilisé par exemple pour faire un écran de connexion dans votre jeux ou encore pour gérer un système de score.

-UTILISATION : Pour que ce script fonctionne, il vous faut bien entendu une base de donnée ainsi qu'un script php contenant votre requête SQL et la vérification de la validité des informations données par le joueur. Dans votre jeux, vous devrez au préalable créer un formulaire d'inscription. Le bouton "Envoyez" lanceras la méthode GoCreate().

Exemple de formulaire :

Image

-SCRIPT :

CreateUser.c#

Code : Tout sélectionner

//Script de création d'utilisateur directement dans le jeux.
//Copyright Damien Gouron 2016
//damien.gouron@gmail.com

using UnityEngine;
using UnityEngine.UI;
using System;
using System.Resources;
using System.Text;
using System.Collections;
using System.Collections.Generic;
using System.Security.Cryptography;
using MySql.Data;
using MySql.Data.MySqlClient;

public class CreateUser : MonoBehaviour
{
    #region Attributes

    public string addUserURL = "http://www.monserveur.fr/mondossier/addUser.php?"; //be sure to add a ? to your url

    public InputField pseudoTxt, passwordTxt, passwordVerifTxt, mailTxt, mailVerifTxt;

    private Text errorTxt;
    public GameObject errorPassword, errorMail;
    private bool passwordVerif = false , mailVerif = false;
    #endregion


    // Use this for initialization
	void Start () {
        errorTxt = GameObject.Find("ErrorTxt").GetComponent<Text>();
	}
	
	// Update is called once per frame
	void Update () {

        //On verifie que les 2 champs password sont identiques
        if (passwordTxt.text != passwordVerifTxt.text)
        {
            errorPassword.SetActive(true);
            passwordVerif = false;
        }
        else
        {
            errorPassword.SetActive(false);
            passwordVerif = true;
        }

        //On verifie que les 2 champs mail sont identiques
        if (mailTxt.text != mailVerifTxt.text)
        {
            errorMail.SetActive(true);
            mailVerif = false;
        }
        else
        {
            errorMail.SetActive(false);
            mailVerif = true;
        }
	}

    /// <summary>
    /// Methode qui lance la coroutine de création de compte.
    /// </summary>
    public void GoCreate()
    {
        if (mailVerif && passwordVerif) //Si mail et password on 2 champs identiques
        {
            //Si toutes les informations requises sont indiquées
            if (pseudoTxt.text != "" && passwordTxt.text != "" && mailTxt.text != "")
            {
                //Lancement de la vérification par requete MySQL
                StartCoroutine(PostUser(pseudoTxt.text, passwordTxt.text, mailTxt.text));
            }
            else
            {
                return;
            }
        }
    }

    /// <summary>
    /// Coroutine de création de compte utilisateur. Requete SQL.
    /// </summary>
    /// <param name="pseudo">Le pseudo choisi</param>
    /// <param name="password">Le MDP choisi</param>
    /// <param name="email">l'email choisi</param>
    /// <returns>Vérifie la validité des informations envoyés par le joueur et retourne le bon déroulement ou l'erreur.</returns>
    IEnumerator PostUser(string pseudo, string password, string email)
    {
        //This connects to a server side php script that will add the name and score to a MySQL DB.
        // Supply it with a string representing the players name and the players score.
        //string hash = MD5.Create(pseudo + secretKey).ToString();

        string post_url = addUserURL + "pseudo=" + WWW.EscapeURL(pseudo) + "&password=" + password + "&email=" + email;  //+ "&hash=" + hash;

        // Post the URL to the site and create a download object to get the result.
        WWW hs_post = new WWW(post_url);
        yield return hs_post; // Wait until the download is done
        if (hs_post.error != null)
        {
            print("There was an error posting the new user: " + hs_post.error);
        }
        else
        {
            errorTxt.text = hs_post.text; //Debug renvoyé par le serveur.
        }
    }
}
addUser.php :

Code : Tout sélectionner

<?php
        // Configuration
        $hostname = '';
        $username = '';
        $password = '';
        $database = '';
 
        try {
            $dbh = new PDO('mysql:host='. $hostname .';dbname='. $database, $username, $password);
        } catch(PDOException $e) {
            echo '<h1>An error has ocurred.</h1><pre>', $e->getMessage() ,'</pre>';
        }
 
    // Verification de la validité du pseudo
    $validityPseudo = true;
    if($validityPseudo)
    {
        //Verification de la disponibilité du pseudo
        $requete1 = $dbh->prepare('SELECT pseudo FROM user WHERE pseudo = ?');
        $requete1->execute(array($_GET['pseudo']));
     
        $result = $requete1->fetchAll();

        if(count($result) > 0) {
            echo "- Ce pseudo est deja utilise. \n";
        }
        else //Le pseudo est disponible
        {
            //Verification de la disponibilité du mail
            $requete2 = $dbh->prepare('SELECT email FROM user WHERE email = ?');
            $requete2->execute(array($_GET['email']));
         
            $result = $requete2->fetchAll();
            if(count($result) > 0)
            {
                echo "- Cet adresse email est deja utilise. \n";
            }
            else //Le mail est disponible
            {
                //Hachage du MDP
                    $pass_hache = sha1('erizia' . $_GET['password']);
                //Ajout de l'USer
                $sth2 = $dbh->prepare('INSERT INTO user (pseudo, password, bestscore, expuser, email, lastconnexion, gold, totalflag, idinventory, lvlUser) 
                                        VALUES (:pseudo, :pass_hache, 0, 0, :email, NOW(), 0, 0, :pseudo, 0)');
                try {
                    $sth2->execute(array(
                                    'pseudo' => $_GET['pseudo'],
                                    'pass_hache' => $pass_hache,
                                    'email' => $_GET['email'],
                                    'pseudo' => $_GET['pseudo'],
                                    ));
                    echo "Compte creer avec succes. \n";
                } catch(Exception $e) {
                    echo '<h1>An error has ocurred.</h1><pre>', $e->getMessage() ,'</pre>';
                }
            }
        }
    }
?>

Biensur, il est possible d'améliorer ce code en y ajoutant vos touches perso au niveau de la sécurité. Les infos envoyés via la requetes sont un exemple du type de donnée que l'on peut stocker dans une BDD.

Le script indique dynamiquement au joueur si les MDP ou l'email rentré est identique ou non.

Bon script à vous,
Arlas
Pièces jointes
inscription.png
inscription.png (46.82 Kio) Consulté 3764 fois

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6186
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: [C#]Create User - Création de compte utilisateur

Message par boubouk50 » 07 Juin 2016 11:16

Merci pour la partage :super:
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Répondre

Revenir vers « Scripts »