JeuWeb - Crée ton jeu par navigateur
Problème avec une fonction PHP - 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 : Problème avec une fonction PHP (/showthread.php?tid=4921)

Pages : 1 2


Problème avec une fonction PHP - titnome - 18-06-2010

Bonjour a vous,

Voila dans la programmation de mon jeu pour des raisons de simplicité j'ai décidé de mettre l'inscription dans une fonction. Après avoir longuement programmé et commenté cette fonction je rencontre des problèmes techniques. Le premier argument de la fonction ne passe pas.

Afin de vérifié si c'était le premier argument ou la variable qui n'allait pas j'ai donc inversé le premier argument avec l'un des autres. Le problème vient de la variable proprement dit. J'ai essayé de la nommer autrement il n'y a pas moyen que cette variable soit traitée comme il se doit.

Bon assez de discours. Je vous offre le morceau de code en question :

<?php
function inscription($pseudo,$motdepasse,$mail) {
// On vérifie la présence du pseudo et que le pseudo fait bien minimum 4 caractères
if ( !empty($pseudo) AND $pseudo =! 'Pseudo' AND strlen($pseudo) >= 4 ) {

// On vérifie que le pseudo ne comporte pas de caractère spéciaux
if ( preg_match("/^[\w\s,\.]+$/i", $pseudo) ) {

// Chargement de la base de donnée avec le pseudo
$preparation_existe = sprintf("SELECT * FROM `Membres` WHERE `Pseudo` = '%s'",
mysql_real_escape_string($pseudo));
$recherche_existe = @mysql_query($preparation_existe);
$num_existe = @mysql_num_rows($recherche_existe);

// On vérifie que le pseudo est disponible
if ( $num_existe == 0 ) {

// On vérifie la présence d'un mot de passe contenant au minimum 4 caractères
if ( !empty($motdepasse) AND $motdepasse =! 'Mot de passe' AND strlen($motdepasse) >= 4 ) {

// On vérifie la conformité du mot de passe
if ( preg_match("/^[\w\s,\.]+$/i", $motdepasse) ) {

// On vérifie la présence d'une adresse mail
if ( !empty($mail) AND $mail =! 'Adresse mail' ) {

// On vérifie la conformité de l'adresse mail
if ( preg_match("/^[\w\.-]+@[\w\.-]+\.[a-z]{2,3}$/i", $mail) ) {

// Chargment de la base de données avec l'adresse mail
$preparation_existe = sprintf("SELECT * FROM `Membres` WHERE `AdresseMail` = '%s'",
mysql_real_escape_string($mail));
$recherche_existe = @mysql_query($preparation_existe);
$num_existe = @mysql_num_rows($recherche_existe);

// On vérifie que l'adresse mail n'est pas déja utilisé pour un autre compte
if ( $num_existe == 0 ) {
$print_ajout = sprintf("INSERT INTO `Membres` (`Pseudo`,`MotDePasse`,`AdresseMail`,`DateInscription`) VALUES ('%s','%s','%s','%s')",
mysql_real_escape_string($pseudo),
mysql_real_escape_string(sha1($motdepasse)),
mysql_real_escape_string($mail),
mysql_real_escape_string(time()));
if ( $ajout = @mysql_query($print_ajout) ) {
$return = '1';
}
else {
$return = '<div class="erreur">L\'enregistrement à échoué.</div>';
}
}
else {
$return = '<div class="erreur">Cette adresse mail éxiste déja.</div>';
}
}
else {
$return = '<div class="erreur">Cette adresse mail n\'est pas valide.</div>';
}
}
else {
$return = '<div class="erreur">Vous devez renseigner une adresse mail correcte.</div>';
}
}
else {
$return = '<div class="erreur">Ce mot de passe n\'est pas valide.</div>';
}
}
else {
$return = '<div class="erreur">Vous devez renseigner un mot de passe contenant 4 caractères au minimum.</div>';
}
}
else {
$return = '<div class="erreur">Ce pseudo est déja utilisé.</div>';
}
}
else {
$return = '<div class="erreur">Ce pseudo n\'est pas valide.</div>';
}
}
else {
$return = '<div class="erreur">Vous devez renseigner un pseudo contenant 4 caractères au minimum.</div>';
}

return $return . ' ' . $pseudo . ' / ' . $motdepasse . ' / ' . $mail;
}
?>

Sur le return j'ai concaténé avec le message de retour les trois arguments pour vérifier leurs récupération. Le mot de passe et l'adresse mail est bien récupérée dans tous les cas.

Bien entendu et vu l'ordre de traitement la fonction n'est pas traitée car d'après la fonction le pseudo est manquant.

Voici la partie qui appel la fonction :
inscription('Pseudo',$_POST['motdepasse'],$_POST['mail']);
Comme vous le constatez le premier argument est directement sur l'appel de la fonction car j'avais peur que ce soit le champs pseudo qui ne soit pas envoyé. Aucun changement constaté.


RE: Problème avec une fonction PHP - pascal - 18-06-2010

ça devrait pas plutôt être dans ce genre là pour appeler la fonction ?
Code PHP :
<?php 
inscription
($_POST['pseudo'],$_POST['motdepasse'],$_POST['mail']);



RE: Problème avec une fonction PHP - Lyososs - 18-06-2010

ton probleme ne viendrais pas de ta premiere vérification ?

Citation :if ( !empty($pseudo) AND $pseudo =! 'Pseudo' AND strlen($pseudo) >= 4 )

pour ton $pseudo =! 'Pseudo'
tu devrai plutot essayer $pseudo != 'pseudo
parce que sinon ça te vide ta variable ^^


RE: Problème avec une fonction PHP - titnome - 18-06-2010

Des fois je me demande si je me suis levé du bon pied... un erreur aussi bête ^^ La honte !

Bien écoute merci beaucoup.


RE: Problème avec une fonction PHP - Lyososs - 18-06-2010

Lol bah de rien pour une fois que j'arrive a répondre avant les autres ^^.

Et puis ça arrive a tout le monde les erreurs bête comme ça ^^


RE: Problème avec une fonction PHP - nicodd - 18-06-2010

Si quelqu'un a un / dans son pseudo ou son mot de passe, tu es sur que la dernière ligne de ta fonction va marcher comme tu veux ?


RE: Problème avec une fonction PHP - php_addict - 18-06-2010

(18-06-2010, 08:08 PM)nicodd a écrit : Si quelqu'un a un / dans son pseudo ou son mot de passe, tu es sur que la dernière ligne de ta fonction va marcher comme tu veux ?

-> http://php.net/manual/fr/function.addslashes.php

et je me permet de lui demander si ses variables $_POST sont traitées contre l'injection de code ?


RE: Problème avec une fonction PHP - titnome - 19-06-2010

La dernière ligne comme je l'ai expliqué me permettait de savoir qu'elles étaient les variables qui étaient récupérées. (Je suis pas sur du bon français de cette phrase...)

La fonction doit retourner '1' dans le cas ou tout ce déroule bien ou un message d'erreur si l'un des champs comporte une erreur. La fonction à maintenant la fonction mail() pour le mail de confirmation et dans le cas ou il y aurai une erreur dans l'envoi du mail le champs de la table de données est automatiquement effacé. Pourquoi s'embêter avec un membre qui ne pourras jamais activer son compte ?

Ce que je regrette un peu avec PHP c'est qu'on ne peu pas tester l'existence d'une adresse mail on peu juste vérifier sa conformité. Donc rien ne prouve que le membre à bel et bien mi une adresse mail existante. Donc on ne peu pas confirmer que le joueur est bien reçu le mail.

Bon bien merci a tous.


RE: Problème avec une fonction PHP - Plume - 19-06-2010

Tu connais un langage qui permet de savoir si une adresse mail existe ?


RE: Problème avec une fonction PHP - titnome - 19-06-2010

Non j'aimerai.
on peu vérifier que l'hôte existe mais on ne peu pas vérifier une adresse mail. Le seul moyen de vérifier si une adresse mail existe serai de créer un logiciel universel de connexion aux messageries. Mais en PHP je ne vois pas l'intérêt vu que les OS et même les téléphones portables permettent la récupération de son courrier électronique. Donc on reste dans le suspense de savoir si le joueur activera son compte ou non...