JeuWeb - Crée ton jeu par navigateur
Module d'inscription - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Module d'inscription (/showthread.php?tid=5126)

Pages : 1 2 3


Module d'inscription - NicoMSEvent - 21-12-2010

Vu le grand nombre de demandes pour les techniques de base, je me lance, et je vous donne un petit tutorial qui se veut être simple, agrémenté de liens vers le Site du Zéro afin de peaufiner vos connaissances.

Ceci est une esquisse, j'éditerai ce sujet pour clarifier, expliquer les points sombres, et ajouter des liens.

La programmation d'un jeu tourne bien souvent autour d'un objet principal (on reparlera d'objets par la suite), et cet objet est le joueur.

Qu'est ce que devrait faire un joueur sur votre jeu? ... Avant de jouer?

S'inscrire!

En effet, chaque joueur à un état d'avancement différent, il a des ressources à lui, un score, des vies... enfin, tout ce qui lui est propre, et qui lui permet de se différencier des autres joueurs. Mais pour ça, il faut savoir le reconnaitre entre les autres. Comme les visiteurs sont anonymes, nous allons leur demander des information uniques afin de pouvoir les reconnaitre.

Donc, en résumant, il faut qu'on stocke les informations suivantes concernant ce joueur :

Identifiant : numéro unique qui nous permettre de repérer rapidement dans notre système notre joueur (le joueur n'a a priori aucun intérêt à connaitre cet identifiant, car ce n'est pas utile)

Nom du joueur, Mot de passe, E-mail : chaines de caractères que le visiteur va nous fournir
Score : ici, pour mon exemple, je vais utiliser un score (on pourrait mettre n'importe quoi d'autre comme des points de vie), et que le joueur ne maitrise par directement.

Le plus simple serait de commencer par le stockage de ces données. Je vais directement utiliser une base de données. MySQL puisque c'est une base de données qui est présente sur la majorité des hébergeurs.

1°)Le SQL? C'est quoi ça? Un langage qui permet de manipuler des données!
(lien vers le SdZ : tutorial SQL)

L'utilisation de MySQL, PHPMyAdmin, et les autres outils de base (client FTP) feront l'objet d'un autre tutorial (en construction, dès qu'il sera fini je remplacerai ceci par le lien).

Nous avons une table qui pourrait être crée comme ceci (ou par des choix divers dans l'interface de PHPMyAdmin)

CREATE TABLE joueurs (
`id` INT NOT NULL AUTO_INCREMENT ,
`nom` VARCHAR( 50 ) NOT NULL ,
`email` VARCHAR( 200 ) NOT NULL ,
`motdepasse` VARCHAR( 50 ) NOT NULL ,
`score` INT NOT NULL DEFAULT '0',
PRIMARY KEY ( `id` )
) ENGINE = MyISAM

On va d'abord vérifier que le nom ou l'email n'existent pas déjà (il existe d'autres moyens qui seront abordés dans un tutorial a venir) :

SELECT id,nom,email FROM joueurs WHERE nom='%s' OR email='%s'
On va remplacer les %s par les valeurs qu'on souhaite tester, mais on verra ça plus loin.

Si je n'ai aucune ligne qui s'affiche, c'est que le nom et l'email ne sont pas utilisés.

On va pouvoir inscrire notre nouveau joueur.

INSERT INTO joueurs (nom,email,motdepasse,score) VALUES ('%s','%s','%s',0)

C'est bien joli, mais on n'a pas encore notre site qui va permettre l'inscription! C'est là qu'intervient le HTML (et le PHP).

2°)Le HTML est un langage qui comporte des <balises>, qui va servir a l'affichage, et le PHP lui est exécuté par le serveur pour nos traitements.
(lien vers le SdZ : tutorial xHTML)


<form action="inscription.php" method="post">
<label for="nom">Nom : </label><input id="nom" name="nom" type="text" />
<label for="email">E-mail : </label><input id="email" name="email" type="text" />
<label for="motdepasse"> Mot de passe : </label><input id="motdepasse" name="motdepasse" type="password" />
<input type="submit" value="S'inscrire" />
</form>
Voilà donc un peu de HTML. J'ai un FORMulaire avec différentes entrées (INPUT) qui vont permettre d'entrer les différentes informations. Il existe différentes sortes d'entrée

Dans ce formulaire, on retrouve ceci
(lien vers le SdZ : tutorial formulaires HTML) :
-Le TEXT normal
-PASSWORD qui correspond au mot de passe
-SUBMIT qui va envoyer les informations sur le serveur lorsqu'on clique dessus.

Mais comment va-t-on récupérer ces informations?

3°)Le PHP va nous permettre de récupérer les informations du formulaire, et les enregistrer
(lien vers le SdZ : tutorial PHP)


<?php // un script PHP commence par ceci, le serveur web va identifier ce qui suit comme du PHP
$_POST['nom']; // il nous allons utiliser ici les noms des entrées que nous avons utilisé dans le formulaire
//afin d'éviter des futurs problèmes de sécurité (injection de SQL), on va utiliser la fonction : mysql_real_escape_string (voir documentation PHP)
$nom=mysql_real_escape_string($_POST['nom']);
//il faudra faire ceci pour toutes les entrées
$email=mysql_real_escape_string($_POST['email']);
$motdepasse=mysql_real_escape_string($_POST['motdepasse']);

//on va vérifier que l'utilisateur a bien rempli toutes les entrées :
if ($nom!='' && $email!='' && $motdepasse!='' ){
$sql=sprintf("SELECT id,nom,email FROM joueurs WHERE nom='%s' OR email='%s'",$nom,$email);
//vous vous souvenez le SQL? c'est ici qu'il entre en oeuvre, et c'est comme ça qu'on va remplacer les %s par les valeurs.

//on se connecte a la base de donnée
$db = mysql_connect ("mon_serveur_sql", "mon_login", "mon_mot_de_passe");
//et ici on va lancer l'exécution du SQL sur le serveur
$req=mysql_query($sql,$db);

$cpt=0;
//maintenant, on va parcourir la liste des résultats
while( $res=mysql_fetch_assoc($req) ){
$cpt++;
}

//si il y en a, on met un message d'erreur, sinon on insère le nouveau joueur,
//en n'oubliant pas de crypter le mot de passe! (fonction PASSWORD de MySQL)
if($cpt>0){
echo"Erreur:l'adresse e-mail ou le nom est déjà utilisé<br/>";
}
else{
mysql_query(sprintf("INSERT INTO joueurs (nom,email,motdepasse,score) VALUES ('%s','%s',PASSWORD('%s'),0)"
,$nom,$email,$motdepasse),$db)
echo"Inscription effectuée<br/>";
}

}
else{ //si des données manquent (pas entrées par le visiteur)
echo "Toutes les entrées n'ont pas été complétées<br/>";
}
// fin du script PHP
?>

Voilà, ça sera tout pour aujourd'hui, le visiteur est inscrit!

Demain, on verra le module d'identification! (ou comment les visiteurs vont entrer dans le jeu)


RE: [Tuto] Module d'inscrption - Jeckel - 21-12-2010

Très bon tuto pour commencer, quelques remarques :

Premièrement, il faudrait rajouter le script de création de la table, avec les index, les uniques (nom d'utilisateur en unique, et email aussi), et l'auto-increment.

Deuxièmement, tu ne tests pas les valeurs vide (cas où $_POST['nom'] n'existe pas ou est vide).

Troisièmement, plutot que de faire une boucle pour tester s'il existe ou non un utilisateur avec le même nom ou email, tu peux utiliser mysql_num_rows.

Ensuite pour protéger ses requètes, il vaut mieux utiliser la fonction mysql_real_escape_string.

Enfin, utiliser le décodage en UTF-8 c'est bien, mais si tu te lance là-dessus, il faut rajouter les headers, les content-type etc.. pour forcer l'UTF-8 sur toute la chaine (et aussi en base de donnée d'ailleurs)... bref, là tu t'engages dans un truc plus compliqué.


RE: [Tuto] Module d'inscrption - Hell-AstiK - 21-12-2010

Bon tuto, fallait s'y lancé Wink

Je dirais juste que la dernière ligne de ton code php ne sert a rien ^^
attention au commentaire PHP hors tags PHP

Citation :?> // fin du script PHP

Sinon j'aurais dit la même choses que Jeckel,
soit tu sécurise ton script, soit tu précise qu'il ne l'est pas et qu'il faut le faire.

Ensuite, je pense qu'il y a des points qu'il ne devrait pas être expliquer, sachant que lorsqu'on créer un jeu, on devrait avoir un minimum de connaissance en langage de programmation (ici HTML,PHP)
Tu devrait juste expliquer comment faire ton module, les points particulier, et ne pas dire par exemple :

Citation :<?php // un script PHP commence par ceci, le serveur web va identifier ce qui suit comme du PHP
.

Bonne continuation pour ce tuto Smile

EDIT: modifier le titre aussi ^^'


RE: [Tuto] Module d'inscrption - NicoMSEvent - 21-12-2010

je voulais rester le plus générique possible, que celui qui n'a jamais touché au php, au html, au SQL, sache faire qqch avec ceci... j'ai peut-etre trop détaillé, enfin bon, j'ai aussi mis des liens vers le SdZ.

Il n'est pas parfait, c'est surtout pour avoir une premiere approche. Je corrige quelques points, et j'attends les critiques Wink

Edit : je vérifie l'unicité par PHP, pour le SQL, je ne vais pas commencer avec les contraintes/index/ ..., c'est déjà suffisamment compliqué comme ça pour un néophyte ^^
ça sera le sujet d'un autre tuto.

Je crois que ça pourrait déjà aider quelques nouveaux, et nous épargner les sempiternelles questions : "Comment/Par quoi on commence?" "Comment on fait ci ou ça?"


RE: [Tuto] Module d'inscrption - Dexyne - 21-12-2010

Pourquoi n'utilises-tu pas la fonction isset de PHP pour vérifier que des valeurs ont bien été entrer via le formulaire ?

Y'a-t-il une différence niveau sécurité si j'utilise extract puis faire un :


$nom = mysql_real_escape_string($nom);

à la place de le faire directement avec $_POST['nom'] ?

Je ne comprend pas pourquoi tu utilises la notion d'objet au début (rapport à la poo ? ou juste comme ça ? :p vu qu'après tu n'utilises pas de POO je me demandais).

Sinon bon tuto ça permettra d'aider certains j'en suis sure Smile.


RE: [Tuto] Module d'inscrption - Vache.Elevage - 21-12-2010

Merci pour ce tuto , moi je galérais à le faire mais ce tuto va m'aider


RE: [Tuto] Module d'inscrption - Hell-AstiK - 21-12-2010

(21-12-2010, 09:11 PM)Dexyne a écrit : Pourquoi n'utilises-tu pas la fonction isset de PHP pour vérifier que des valeurs ont bien été entrer via le formulaire ?
Je dirais plutôt empty() !

isset peut vérifier que la variable existe.

empty peut vérifier que la variable existe, et qu'elle n'est pas vide.


RE: [Tuto] Module d'inscrption - Jeckel - 22-12-2010

(21-12-2010, 10:26 PM)Hell-AstiK a écrit :
(21-12-2010, 09:11 PM)Dexyne a écrit : Pourquoi n'utilises-tu pas la fonction isset de PHP pour vérifier que des valeurs ont bien été entrer via le formulaire ?
Je dirais plutôt empty() !

isset peut vérifier que la variable existe.

empty peut vérifier que la variable existe, et qu'elle n'est pas vide.

Je vais chippoter mais, si je ne me trompe pas, si la variable ou l'index du tableau n'est pas définie, empty lève un Notice ou un Warning... de plus il ne gère pas tous les cas...

Une façon un peu plus propre serait :
if (isset($_POST['nom']) && trim($_POST['nom']) != '')...

Pour aller plus loin, trim devrait même être remplacée par une fonction qui filtre correctement la donnée : suppression des blancs en début et fin de chaine, suppression des balises HTML (les petits malin qui mettent du HTML dans leur nom), suppression des caractères invisibles et non alpha-numérique, etc... et c'est le résultat de ce filtre qui doit être testé.

Oui, je sais, je suis un maniaque...


RE: [Tuto] Module d'inscrption - niahoo - 22-12-2010

Et l'indentation !?! Bouh !

Sinon bonne initiative !


RE: [Tuto] Module d'inscription - NicoMSEvent - 22-12-2010

C'était aussi en partie pour ça que j'utilisais le html_entities au lieu de mysql_real_escape_string... mais bon, là on entre dans les finesses de la programmation. Ce tutorial donne les bases, maintenant ceux qui souhaitent améliorer ceci peuvent donner leurs suggestion s:p