JeuWeb - Crée ton jeu par navigateur
[règlé]Système Inscription & POO php5 - 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 : [règlé]Système Inscription & POO php5 (/showthread.php?tid=1842)



[règlé]Système Inscription & POO php5 - blackduty - 06-10-2007

Hello,

Donc voila, j'ai fait une nouvelle tentative pour créer un formulaire d'inscription en POO (php5 enfin, je crois).

Notons que mon niveau est toujours très faible et j'ai donc essayer de comprendre a l'aide d'un script de news fait en POO php5 (source: ici). Je ne sais pas ce que vaut la programmation de l'auteur donc il se peut que j'ai fait plein de bêtises en essayant d'apprendre par imitation.

J'ai prit en compte la remarque de Joshua (cf ce Sujet) sur la séparation de l'analyse et de l'envoi des données.

Pour information, seule, une partie du script marche. (je vous dirais ce qui marche dans la suite du développement).

Voila ce que j'ai l'intention de donner (quand ça marchera et que ce sera tout bien, bien sûr) a la biblio jeuPhp.
Donc si ça ne vous dérange pas, on parlera d'optimisation & sécurité après la mise en marche du script.

Voici le code (ça va être un peu long, désolé), le nom de la page en gras.

Le Formulaire d'inscription: Inscription.php
Code PHP :
<?php 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"
>
<
html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<
head>
<
title>Conquista</title>
<
meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<
link rel="stylesheet" media="screen" type="text/css" title="design par defaut" href="css/europeO.css" />
</
head>
<
body>
<
h1>Bienvenue !</h1>

<
form method="post" action="TraitementInscription.php">

<
fieldset>
<
legend>Vos coordonnées</legend>
<
p>
<
label>Nom de compte <input type="text" name="compte" size="20" maxlength="20" tabindex="10" /></label>
<
br />
<
label>Adresse email <input type="text" name="mail" size="30" maxlength="25" tabindex="20" /></label>
<
br />
<
label>Mot de passe <input type="password" name="mot_de_passe" size="15" maxlength="15" tabindex="30" /></label>
</
p>
</
fieldset>
<
fieldset>
<
legend>Votre personnage</legend>
<
p>
Veuillez choisir votre Nationalité :<br />
<
label><input type="radio" name="camp" value="anglais" tabindex="40" /> <img src="../images/english.gif" alt="drapeau Anglais" /> (Anglais)</label><br />
<
label><input type="radio" name="camp" value="espagnol" tabindex="50" /> <img src="../images/spain.gif" alt="drapeau Espagnol" /> (Espagnol)</label><br />
</
p>

<
p><em>Veillez a mettre des noms Roleplay. Tout nom litigieux entraînera la suppression du compte.</em></p>

<
p><label>Nom de votre Capitaine <input type="text" name="nom_chef" size="50" maxlength="45" tabindex="80"/></label>
<
br />
<
label>Nom de votre Compagnie <input type="text" name="compagnie" size="70" maxlength="50" tabindex="90" /></label>
</
p>
</
fieldset>
<
p>
<
input type="submit" value="Valider" />
</
p>
</
form>
</
body>
</
html>

La Classe d'analyse des données: VerifInscription.class.php
Code PHP :
<?php
class VerifInscription
{
public
$compte;
public
$mail;
public
$mot_de_passe;
public
$camp;
public
$nom_chef;
public
$compagnie;
private
$link;

public function
__construct($host, $user, $password, $database)
{
$this -> link = mysql_connect($host, $user, $password);
mysql_select_db($database, $this -> link);
}

public function
VerificationRemplissageCompte ($compte)
{
if(empty(
$compte))
{
echo
"Vous n'avez pas renseigner votre nom de compte !<br />";
exit();
}
}

public function
VerificationRemplissageMail ($mail)
{
if(empty(
$mail))
{
echo
"Vous n'avez pas renseigner votre adresse Email !<br />";
exit();
}
}

public function
VerificationRemplissageMotdepasse ($mot_de_passe)
{
if(empty(
$mot_de_passe))
{
echo
"Vous n'avez pas renseigner de mot de passe !<br />";
exit();
}
}

public function
VerificationRemplissageCamp ($camp)
{
if(empty(
$camp))
{
echo
"Vous n'avez pas renseigner votre nationalité !<br />";
exit();
}
}

public function
VerificationRemplissageNomChef ($nom_chef)
{
if(empty(
$nom_chef))
{
echo
"Vous n'avez pas renseigner le nom de votre Capitaine !<br />";
exit();
}
}

public function
VerificationRemplissageCompagnie ($compagnie)
{
if(empty(
$compagnie))
{
echo
"Vous n'avez pas renseigner le nom de votre compagnie !<br />";
exit();
}
}

public function
VerificationValiditeMail ($mail)
{
if (isset(
$_POST['mail']))
{
if (
preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#", $_POST['mail']))
{
}
}
else
{
echo
'L\'adresse email n\'est pas valide, veuillez recommencer !';
exit();
}
}
}
?>

La classe de traitement des données et envoi dans la BDD (on peut voir ici la composition de la table qui accueil les données): EnvoiInscription.class.php
Code PHP :
<?php

class EnvoiInscription
{
public
$compte;
public
$mail;
public
$mot_de_passe;
public
$mot_de_passe_crypte;
public
$camp;
public
$nom_chef;
public
$compagnie;
public
$cle_cryptage = 'po1kuFz23ukDm4l';
private
$link;


public function
__construct($host, $user, $password, $database)
{
$this -> link = mysql_connect($host, $user, $password);
mysql_select_db($database, $this -> link);
}

public function
CryptagePass($mot_de_passe)
{
$mot_de_passe_crypte = crypt($mot_de_passe, $cle_cryptage);
}

public function
EnvoiDonneeVerifie ($compte, $mail, $mot_de_passe_crypte, $camp, $nom_chef, $compagnie)
{
$compte = htmlentities($compte, ENT_QUOTES);
$mail = htmlentities($mail, ENT_QUOTES);
$mot_de_passe_crypte = htmlentities($mot_de_passe_crypte, ENT_QUOTES);
$camp = htmlentities($camp, ENT_QUOTES);
$nom_chef = htmlentities($nom_chef, ENT_QUOTES);
$compagnie = htmlentities($compagnie, ENT_QUOTES);

$query = "INSERT INTO `joueur` (`id`, `compte` , `mail` , `mot_de_passe_crypte` , `camp` , `nom_chef`, `compagnie`, `statut` )
VALUES ('', '"
. $compte . "', '" . $mail . "', '" . $mot_de_passe_crypte . "', '" . $camp . "', '" . $nom_chef . "', '" . $compagnie . "', '' )";
}
}
?>

Et enfin, la page de traitement du formulaire: TraitementInscription.php
Code PHP :
<?php

// on inclut les fichiers de nos classes pour pouvoir les utiliser.
include 'VerifInscription.class.php';
include
'EnvoiInscription.class.php';

// On donne les identifiants pour une connexion a la base de donnée.

$host = 'localhost';
$user = 'root';
$password = '';
$database = 'conquista';

$VerifInscriptionObj = new VerifInscription($host, $user, $password, $database); // on construit l'objet pour la vérification des champs du formulaire.


// On utilise nos différentes fonctions contenu dans la classe VerifInscription pour vérifier le remplissage du formulaire.

$VerifInscriptionObj -> VerificationRemplissageCompte($_POST['compte']);
$VerifInscriptionObj -> VerificationRemplissageMail($_POST['mail']);
$VerifInscriptionObj -> VerificationValiditeMail($_POST['mail']);
$VerifInscriptionObj -> VerificationRemplissageMotdepasse($_POST['mot_de_passe']);
$VerifInscriptionObj -> VerificationRemplissageCamp($_POST['camp']);
$VerifInscriptionObj -> VerificationRemplissageNomChef($_POST['nom_chef']);
$VerifInscriptionObj -> VerificationRemplissageCompagnie($_POST['compagnie']);


$EnvoiInscriptionObj = new EnvoiInscription($host, $user, $password, $database); // on construit l'objet pour l'envoi des données du formulaire.

//Cryptage du mot de passe
$EnvoiInscriptionObj -> CryptagePass($_POST['mot_de_passe']);
// On envoie les données dans la BDD.
$EnvoiInscriptionObj -> EnvoiDonneeVerifie($_POST['compte'], $_POST['mail'], $mot_de_passe_crypte, $_POST['camp'], $_POST['nom_chef'], $_POST['compagnie']);

echo
$mot_de_passe_crypte; // pour tester mes variables (a supprimer a la fin...
echo $mail;
?>

Notons que presque toute la classe d'analyse est fonctionnelle. Seule la vérification de la composition de l'adresse mail ne marche pas... (elle marchait quand je ne faisait pas mumuse avec la POO).
Le reste marche pas. Les données ne sont pas intégrée dans la BDD, le cryptage a l'air de marcher cependant.
Enfin, je sais que j'ai un problème avec les variables (ce qui est je pense, la base de tout le problème), mais je dois avouer que je ne comprend pas encore tout ce que je fais...

Par ailleurs, je recherche toujours quelqu'un pour m'apprendre la POO :p

Merci ^^


RE: Système Inscription & POO php5 - nemesis_elite - 06-10-2007

Salut, j'ai pas trop le temps, mais je te réponds quand même.
Je ne suis pas un pro des classes, donc c'est peut être faux ce qui je vais te dire Confused

J'ai pas trop regarder le code, mais ce qui mon saute aux yeux dans ta classe EnvoiInscription
- pas mettre d'espace entre $this et -> et link:
Code PHP :
<?php 
$this
-> link = mysql_connect($host, $user, $password);
- écrire [b]$this->mot_de_passe_crypte[b] au lieu de [b]$mot_de_passe_crypte[b]
Code PHP :
<?php 
public function CryptagePass($mot_de_passe)
{
$mot_de_passe_crypte = crypt($mot_de_passe, $cle_cryptage);
- pareil pour les autres
Code PHP :
<?php 
$compte
= htmlentities($compte, ENT_QUOTES);
$mail = htmlentities($mail, ENT_QUOTES);
$mot_de_passe_crypte = htmlentities($mot_de_passe_crypte, ENT_QUOTES);
$camp = htmlentities($camp, ENT_QUOTES);
$nom_chef = htmlentities($nom_chef, ENT_QUOTES);
$compagnie = htmlentities($compagnie, ENT_QUOTES);
}[/php]
- pour les récupérer : $this-> + variable
Code PHP :
<?php 
$query
= "INSERT INTO `joueur` (`id`, `compte` , `mail` , `mot_de_passe_crypte` , `camp` , `nom_chef`, `compagnie`, `statut` )
VALUES ('', '"
. $compte . "', '" . $mail . "', '" . $mot_de_passe_crypte . "', '" . $camp . "', '" . $nom_chef . "', '" . $compagnie . "', '' )";
-pour récupérer les variables à partir de l'extérieur:
Code PHP :
<?php 
echo $EnvoiInscriptionObj->mot_de_passe_crypte; // pour tester mes variables (a supprimer a la fin...
echo $EnvoiInscriptionObj->mail;
au lieu de :
Code PHP :
<?php 
echo $mot_de_passe_crypte; // pour tester mes variables (a supprimer a la fin...
echo $mail;

Je dois partir, désoler de pas pouvoir expliquer plus.

NemeSiS_eliTe


RE: Système Inscription & POO php5 - blackduty - 07-10-2007

Bonjour,

Tout d'abord, merci d'avoir prit le temps de répondre a ce sujet.
Voici le résultat après modification:

Alors, je viens de trouver mon erreur qui empêchait l'inscription des données (c'etait vraiment très bête... j'ai oublié le mysql_query...)
La modification du nom des variables $mail à $this->mail (un exemple parmis tant d'autre) a eut son importance aussi. ^^

Par contre, j'ai toujours un problème sur la vérification de la validité du mail. Il semblerait que la fonction ne soit pas prise en compte. Je peux rentrer tout ce que je veux, ça inscrit dans la base et surtout ça ne me prévient pas de l'invalidité.

Merci


RE: Système Inscription & POO php5 - Shiwa - 07-10-2007

Ta fonction de vérification du mail, telle que tu l'as donnée plus haut, vérifie seulement si quelque chose a bien été envoyé dans $_Post[mail]. En effet ton else intervient seulement si isset($_POST[mail]) est faux... et il n'y a rien de fait lorsque le mail ne vérifie pas la regexp. Essaie avec ce code :
Code :
if (isset($_POST['mail']))
{
  if (preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#", $_POST['mail']))
  {
  }
  else
  {
    echo 'L\'adresse email n\'est pas valide, veuillez recommencer !';
    exit();
  }
}
else
{
  echo 'Remplissez le champ mail !';
  exit();
}



RE: Système Inscription & POO php5 - nemesis_elite - 07-10-2007

Ou plus simplement :
Code PHP :
<?php 
if (isset($mail))
{
if (!
preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#", $mail))
{
echo
'L\'adresse email n\'est pas valide, veuillez recommencer !';
exit();
}
}
else
{
echo
'Remplissez le champ mail !';
exit();
}

Un petit conseil, (re)lis ce tutoriel, parceque j'ai l'impression que tu ne sais pas trop utiliser les variables, dans les classes.

Bonne chance Smile

NemeSiS_eliTe


RE: Système Inscription & POO php5 - blackduty - 07-10-2007

nemesis_elite a écrit :Un petit conseil, (re)lis ce tutoriel, parceque j'ai l'impression que tu ne sais pas trop utiliser les variables, dans les classes.

Bonne chance Smile

NemeSiS_eliTe

Merci pour l'aide et oui, tu as raison, je devrais de relire le tutos. Maintenant ce sera logiquement plus parlant pour moi. Wink
Par contre, petite question, vous trouvez ça normal de faire une connexion a la BDD avec le __construct ? C'est l'élément que j'avais reprit du script du système de news mais je trouve ça bizarre...


RE: [règlé]Système Inscription & POO php5 - Shiwa - 07-10-2007

Bien vu Nemesis, j'avais corrigé un peu rapidement.

Dans une classe qui va communiquer avec la bdd ça peut être utile d'établir une connexion dans le constructeur, mais pour ta classe de vérification ça semble superflu, à moins que tu ne rajoutes un test pour savoir si le pseudo est déjà présent dans la bdd.


RE: [règlé]Système Inscription & POO php5 - nemesis_elite - 07-10-2007

Bon quand j'ai dis que tu comprennais pas, c'est pas méchant hein? J'en ai profité pour le relire moi aussi ^^.

Pour la connexion, tu peux faire une méthode (fonction) qui contient la connexion a la base de donnée, et l'appeler dans le __conrstruct. (Je sais ça change rien ^^)
Ou bien faire une classe spécialement pour la gestion de la base de donnée, et l'utiliser dans ta classe.
Genre avec une variable :
Code PHP :
<?php 
private $bdd;
Genre dans ton __construct tu m'est :
Code PHP :
<?php 
$this
->bdd=new bdd('localhost', '####', '####', '####');

et tu l'utilisera comme ca:
Code PHP :
<?php 
$this
->bdd->requete('SELECT .....');

Bon j'dis ça, j'dis rien, hein ? ^^

NemeSiS_eliTe


RE: [règlé]Système Inscription & POO php5 - blackduty - 07-10-2007

Je ne suis pas sûr de te pardonner un jour pour la remarque... mais bon... Tongue

Enfin merci, pour vos réponses et ce petit éclaircissement et pour la petite astuce de l'utilisation d'une classe dans une classe (je dois avouer que je ne suis pas sûr que j'y aurais penser un jour tout seul :hahahahaSmile