JeuWeb - Crée ton jeu par navigateur
une fonction perso non reconnue - 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 : une fonction perso non reconnue (/showthread.php?tid=5134)

Pages : 1 2 3 4 5


une fonction perso non reconnue - gameprog2 - 11-09-2010

Salut Wink
En php j'ai besoin d'un peu d'aide :


<?php
include("testmots.php");

$mot=$_POST['pseudo'];

if (testvulgaire($mot)==true)
{
//le reste du code
}

L'erreur me dit :

Citation :Fatal error: Call to undefined function testvulgaire() in C:\Program Files\EasyPHP-5.3.3\www\tests.php on line 6

Bon je comprend que c'est un appel à une fonction non reconnue mais pourquoi ? vu que cette fonction existe avec la même orthographe dans le fichier inclu : "testmots.php"


RE: une fonction perso non reconnue - Sephi-Chan - 11-09-2010

Colle le contenu du fichier testmots.php.


Sephi-Chan


RE: une fonction perso non reconnue - gameprog2 - 11-09-2010

Ok Wink


// Teste si un mot est vulgaire, true dans ce cas sinon false.
function testvulgaire($mot)
{
$result=file("salmots"); /* le fichier texte salmots contient une liste de mots vulgaires.*/
if(in_array($mot,$result)) /* Teste si le mot existe dans les mots vulgaires.*/
{/* le mot fait partie des mots vulgaires.*/
return true;
}else
{/* le mot est absent des mots vulgaires.*/
return false;
}
}

// Teste si la longueur d'un mot est inférieure à $nbr, true dans ce cas sinon false;
// Sert aussi à tester si un champ est vide et demander qu'il soit saisi.
/* $letype est soit "pseudo", soit "mot de passe" soit "email". */

function testtaille($mot,$nbr,$letype)
{
if($mot!="") /* Teste que le mot n'est pas vide.*/
{
/* Supprime les espaces avant et dans le mot.*/
$result=str_replace(" ","",$mot);

/* Met dans $long le nombre de caractères de $result.*/
$long=strlen($result);

/* Teste si $long est inférieur à $nbr, true dans cas sinon false.*/
if($long<$nbr){return true;}else{return false;}
}else
{
/* demande d'entrer soit le pseudo soit le pass soit l'email.*/
echo "Entrez votre"+$letype;
}
}



RE: une fonction perso non reconnue - Sephi-Chan - 11-09-2010

Tu n'ouvres pas le tag PHP dans ton fichier inclus ?


Sephi-Chan


RE: une fonction perso non reconnue - gameprog2 - 11-09-2010

LOL Wink
Merci Séphy Wink
EDIT : Bon ça me dit la même chose :/


<?php

// Teste si un mot est vulgaire, true dans ce cas sinon false.
function testvulgaire($mot)
{
$result=file("salmots"); /* le fichier texte salmots contient une liste de mots vulgaires.*/
if(in_array($mot,$result)) /* Teste si le mot existe dans les mots vulgaires.*/
{/* le mot fait partie des mots vulgaires.*/
return true;
}else
{/* le mot est absent des mots vulgaires.*/
return false;
}
}

// Teste si la longueur d'un mot est inférieure à $nbr, true dans ce cas sinon false;
// Sert aussi à tester si un champ est vide et demander qu'il soit saisi.
/* $letype est soit "pseudo", soit "mot de passe" soit "email". */

function testtaille($mot,$nbr,$letype)
{
if($mot!="") /* Teste que le mot n'est pas vide.*/
{
/* Supprime les espaces avant et dans le mot.*/
$result=str_replace(" ","",$mot);

/* Met dans $long le nombre de caractères de $result.*/
$long=strlen($result);

/* Teste si $long est inférieur à $nbr, true dans cas sinon false.*/
if($long<$nbr){return true;}else{return false;}
}else
{
/* demande d'entrer soit le pseudo soit le pass soit l'email.*/
echo "Entrez votre"+$letype;
}
}

?>

mince le premier tag est mal ecris lol
C'est bon c'est ok Wink


RE: une fonction perso non reconnue - niahoo - 11-09-2010

N'as tu jamais entendu parler de l'indentation ?


RE: une fonction perso non reconnue - gameprog2 - 11-09-2010

si, c'est le décalage des instructions sur le code, mais là c'est le forum qui affiche comme ça Wink
Dans mon fichier c'est indenté Wink


RE: une fonction perso non reconnue - Sephi-Chan - 11-09-2010

Du coup ça fonctionne ou pas ?


Sephi-Chan


RE: une fonction perso non reconnue - gameprog2 - 11-09-2010

Citation :C'est bon c'est ok
Si si, ça fonctionne bien, merci Sephy Wink


RE: une fonction perso non reconnue - Sephi-Chan - 11-09-2010

Il n'y a pas de Y dans mon pseudo. Smile

Par contre, j'en profite pour te donner quelques conseils pour améliorer la qualité de ton code.
  • Le code est très mal formatté. C'est capital de bien présenter ton code pour le relire facilement ;
  • Déjà, il y a beaucoup trop de commentaires inutiles. Plus tu as de commentaires, moins ils sont importants (car noyés dans la masse) ;
  • Le nommage de tes variables n'est pas pertinent : tu ne devrais pas utiliser d'abréviations car elles nuisent à la lisibilité ;
  • Les fonctions métier ne doivent jamais rien afficher (sauf à des fins de debug, éventuellement) ;

Par ailleurs, je te conseille de développer en anglais uniquement (le mélange des langues au sein du code source est une mauvaise chose pour la lisibilité). De plus, reformuler dans une autre langue est souvent un bon moyen de cerner si le nom d'une variable est bonne.

Prenons ta fonction ligne, par exemple (simplement réindenté) :


function testvulgaire($mot){
$result = file("salmots"); /* le fichier texte salmots contient une liste de mots vulgaires.*/
if(in_array($mot,$result)) /* Teste si le mot existe dans les mots vulgaires.*/
{/* le mot fait partie des mots vulgaires.*/
return true;
}
else
{/* le mot est absent des mots vulgaires.*/
return false;
}
}

Déjà, la fonction est mal nommée puisqu'en français. De plus, on ne distingue pas les mots. Tu peux utiliser la notation camelCase ou underscore, qui donnent repséctivement testVulgaire et test_vulgaire. Un bon nom serait isVulgar ou is_vulgar.

Ta variable $result est mal nommé, déjà elle est en anglais alors que le reste de ton code est en français (tout devrait être en anglais), ensuite, elle n'indique pas du tout ce qu'elle contient. Ensuite, le fichier est mal nommé, salmots ne veut rien dire. Enfin, le commentaire est inutile : bien sûr qu'on sait ce que va contenir le fichier.

Ensuite, les lignes suivantes sont trop commentées : tout le monde sait ce que fait in_array et sait lire un if : tu réduis la lisibilité de ton code.

Enfin, in_array renvoie déjà un booléen, donc tu peux l'utiliser directement comme ta valeur de retour.

Voici un bon refactoring de ta fonction :


function is_vulgar($word){
$vulgar_words = file('vulgar_words');
return in_array($word, $vulgar_words);
}

C'est beaucoup plus concis et lisible que tout le baratin qu'il y avait avant : le code est de meilleur qualité.

Ce serait bien que tu fasses la même chose avec ton autre fonction, qui n'est pas bonne pour toutes les raisons expliquées plus haut, mais également parce qu'elle a plusieurs rôles : mieux vaut la découper en plusieurs fonctions plus petites. Smile

La fonction pour déterminer si le mot est plus court qu'une longueur donnée :


function is_shorter_than($word, $length){
return strlen($word) < $length;
}


Sephi-Chan