#1 

21-08-2009 21:14:04

nico
Administrateurs
Avatar de nico
Date d'inscription:
Messages: 563
IP: 82.232.128.163
Courriel

Salut à tous, étant un newbie en 3d, j'ai du mal à me familiariser avec les termes employés, ce qui ne facilite pas l'apprentissage,
De plus, j'en ai marre de chercher pendant des heures dans la doc pour trouver une fonction.
Donc j'ai essayé de trouver des solutions pour que ces problèmes ne ce reproduise plus, ni pour moi, ni pour quiquonque dans l'univers. mdr

J'ai donc créer une fonction toute simple pour ajouter des définitions aux mots .
Pour afficher la définition d'un mot, il suffit de le survoler avec la souris, puis un cadre apparait avec la définition.
voici la fonction:

	function dico($text)
{
    $dictionnaire= array(  "vertices"=>"sommets","vertex"=>"sommet");							   
	foreach($dictionnaire as $mots => $definitions)
	{
	   $text=preg_replace('#('.$mots.')#isU','<span title="'.$definitions.'">$1</span>',$text);
	}
    return $text;
}

Voilà, c'est dejà la version finale de la fonction dictionnaire, il reste juste à ajouter des mots.(je peux aussi rajouter la gestion des acronym si ça vous dit)
Bon ça c'est surtout pour les zero de mon genre, il est évident que les habitués de la 3d n'en n'aurons pas l'utilité,
Et afin de ne pas affecter leur confort de lecture, les mots ne sont ni coloré ni souligné ni rien du tout en fait.(mais on peut changer si vous trouvé que c'est pas pratique)

Et maintenant, la fonction dont vous reviez tous smile, la documentation automatique.
Bon j'avoue que le terme n'est pas très bien choisi, mais il me plait.
En fait cela consiste a créer un lien vers la documentation des classes d'irlicht.
admettons qu'un message contienne le mot "imeshscenenode"(peu importe les majuscules), et bien en cliquant dessus on est redirigé vers sa doc sur le site d'irrlicht.
Alors pour ce faire il y a plusieurs solutions.
La première est de définir un lien pour chaque mots clés d'irrlicht, en d'autres termes cela consiste à écrire des centaines de lignes pour déclarer les liens, et je ne pense pas que quelqu'un ai le courage de remplir cette tâche,.

J'ai donc adopté une autre méthode utilisant google, qui est beaucoup plus simple mais aussi beaucoup moins rapide à l'execution.(pas d'inquiétude la rapidité ne concerne pas la navigation sur le forum).
Non vous ne revez pas, vous avez bien vu le mot google yikes
En effet c'est lui qui va chercher à notre place, il est là pour ça après tout.
La particularité de cette recherche est qu'elle est totalement transparente pour l'utilisateur et qu'elle opère uniquement sur le site officielle d'irrlicht.
Donc pour faire simple, lors d'un clic sur un mot d'irrlicht, une recherche de ce mot est effectuée de maniere invisible part google, puis on est redirigé vers le premier résultat de google, qui correspond donc à la doc d'irrlicht. Ouf.
Bon je pense que j'en ai fait fuir plus d'un avec mon roman, mais rassurez vous le code est tout rikiki.
$documentation= array( "imeshscenenode"=>"A scene node displaying a stat.....",
						   "mesh"=>"Class which holds the geometry of an o........ ");						   
	
	foreach($documentation as $fonctions => $definitions)
	{
	 $text=preg_replace('#([^a-zA-Z0-9])('.$fonctions.')([^a-zA-Z0-9])#isU','$1<span title="'.$definitions.'"><a style=" text-decoration:none; color:ffffff; " href="'.PUN_ROOT.'include/documentation.php?fonction='.$fonctions.'">$2</a></span>$3',$text);
	}

<?php
$fonction=htmlspecialchars($_GET['fonction']);
$source = implode ('', file ("http://www.google.com/search?hl=en&q=$fonction+%2Bclass%2BReference%2Bsite%3Ahttp%3A%2F%2Firrlicht.sourceforge.net%2Fdocu%2F&btnG=Search&lr=lang_fr&aq=f&oq=&aqi="));
$source = strstr($source, '<a href="http://irrlicht.sourceforge.net/docu/'); 
$fin_source = strstr($source, '.html"'); 
$proposition = str_replace("$fin_source","", $source); 
$proposition = str_replace('<a href="',"", $proposition);  
header('Location:'.$proposition.'.html');
 ?>

par contre ces instructions ne nous redirigerons pas forcement sur la page souhaité si on utilise des mots comme setposition.
car cette fonction est utilisé dans beaucoup de classe, donc google nous redirigera vers la classe qui a eu le plus de visites.
Dans mes tests, j'ai était redirigé vers la classe ICursorControl. sad , enfin c'est toujours mieux que rien mais bon, je pense que pour le moment on devrait se contenter des class, c'est déjà pas mal.

Voilà, j'espere que ça vous interrêsse, et surtout que ça pourra vous aider.
Dit moi si ça t'interresse tmike, et je t'explique la procédure.


Hors ligne


#2 

23-08-2009 15:09:04

tmyke
Administrateurs
Avatar de tmyke
Date d'inscription:
Messages: 1025
IP: 86.204.176.37
Courriel

Salut Nico, toujours aussi actif des méninges pour améliorer la convivialité du forum wink

L'idée de base est en effet alléchante, faudrait juste tester dans la pratique voir ce que cela donne. Et surtout voir si cela ne plombe
pas les perf du forum non plus wink

A essayer donc, je suis partant smile


Force et sagesse...

Hors ligne


#3 

23-08-2009 17:18:37

nico
Administrateurs
Avatar de nico
Date d'inscription:
Messages: 563
IP: 82.232.128.163
Courriel

Cool, en terme de performance, cela pompe beaucoup moins de ressources que la coloration syntaxique,
Donc appriori pas de souci, sauf que depuis j'ai totalement modifié le code. wink
En effet j'ai tout modifié pour faire en sorte que les membres puisse ajouter des mots et définitions.
Donc l'avantage c'est qu'une fois cette fonction mise en place, elle pourra évoluer sans faire perdre du temps au administrateurs du site.
Mais l'inconvénant est que c'est plus long a mettre en place.
Il va me falloir quelque jours pour finir ce mod. mais avant j'ai besoin de savoir si tu es d'accord pour créer une nouvelle base de donnée pour stocker les définitions? Et surtout as-tu un autre serveur pour l'héberger ?
Alors, il est sûre que je pourrai t'epargner cette tâche en utilisant la bdd du forum, mais bon.........
Ausinon c'est pas pour tout dessuite, cela sera surement prêt pour le week-end prochain, en attendant j'ai besoin de savoir si tu est ok, et ce soir je te montre des screenshots pour que tu te fasse une idée du mod.


Hors ligne


#4 

23-08-2009 18:02:38

tmyke
Administrateurs
Avatar de tmyke
Date d'inscription:
Messages: 1025
IP: 86.204.176.37
Courriel

OK. Pour ce qui est des bases de données, effectivement il n'est pas judicieux de passer par celle du
forum par sécurité.
D'ici demain ou après -demain, je t'enraierais un message avec les élément permettant d'avoir accès à une des bases de données
du portail.
Par contre je veux bien pour les screens shots, pour mieux cerner le fond de ton idée et projet wink


Force et sagesse...

Hors ligne


#5 

23-08-2009 18:59:19

nico
Administrateurs
Avatar de nico
Date d'inscription:
Messages: 563
IP: 82.232.128.163
Courriel

Cool pour la bdd.
Alors j'ai pas encore fini le code, mais toute critique est la bienvenue, cela me permet de mieu prévoir ma façon de coder.
Voici un screen du premier code que j'ai posté(la souris à disparu)

Donc en survolant la classe imeshscennenode, sa définition est affiché, on peut également cliqué dessus pour accéder à sa doc.

et maintenant un screen du mod que je suis en train de faire, j'ai carrément crée une nouvelle page.

Tu peut donc appercevoir un nouveau menu "dictionnaire" qui est accessible uniquement pour les membres connectés.
Ceci est un exemple, donc si il y a une mise en forme qui te convient pas dit-le.
Cette nouvelle page permet donc d'ajouter des définitions ainsi que de lister celles déjà existantes.
Il manque encore plusieurs éléments comme les boutons modifier, supprimer et quelques trucs en plus.
Dit moi si tu as d'autres idées .

ps: fait pas attention au texte, j'ai écrit des truc un peu au pif et avec plein de fautes en plus smile


Hors ligne


#6 

23-08-2009 19:49:03

tmyke
Administrateurs
Avatar de tmyke
Date d'inscription:
Messages: 1025
IP: 86.204.176.37
Courriel

Très alléchant en effet. Cela ne fait pas trop ramer le forum ce genre de système ?


Force et sagesse...

Hors ligne


#7 

23-08-2009 20:42:55

nico
Administrateurs
Avatar de nico
Date d'inscription:
Messages: 563
IP: 82.232.128.163
Courriel

Bein concernant la rapidité on va "doubler" le nombre de requètes par rapport a d'habitude, Le délais d'une requete dépend des performande de la bdd et de la taille des éléments a transférer, je pourrait pas te donner un chiffre précis mais ça se compte en milliseconde, donc je pense sincérement que tu ne verra pas la différence, A moins d'avoir un dictionnaire qui contienne 65 000 mot et définitions yikes , là ça se comprend wink .
Mais je comprend ton inquiétude et je m'engage a ne pas produire de temps de latence perceptible. cela veut dire que si jamais il y a un délai perceptible, alors j'emploirai une autre méthode. satisfait ou remboursé smile
Par contre tu ne pose pas trop de question sur la sécurité, sa ne t'inquiete pas ? moi a ta place j'aurait pas confiance hmm


Hors ligne


#8 

24-08-2009 16:36:40

tmyke
Administrateurs
Avatar de tmyke
Date d'inscription:
Messages: 1025
IP: 92.130.13.178
Courriel

nico Ecris:

Par contre tu ne pose pas trop de question sur la sécurité, sa ne t'inquiete pas ? moi a ta place j'aurais pas confiance hmm

Pas pour le moment, car ce que tu veux mettre en place aura une BD dédié, et donc pas de risque de pollution du forum je pense, en tous les cas au niveau
des données. Par contre, pour le système lui même, charge à ceux qui le mettront en place (nous en sommes) de faire ne sorte qu'il ne soit pas trop vulnérable.
La seule polution que cela pourra alors amener sera d'ordre visuel, donc facilement 'déconnectable' en cas extrême wink


Force et sagesse...

Hors ligne


#9 

25-08-2009 13:31:20

nico
Administrateurs
Avatar de nico
Date d'inscription:
Messages: 563
IP: 82.232.128.163
Courriel

tmyke Ecris:

Pas pour le moment, car ce que tu veux mettre en place aura une BD dédié, et donc pas de risque de pollution du forum je pense, en tous les cas au niveau
des données.

Je ne veux pas t'effrayer mais sâche que si mon code était dépourvu de sécurités, alors il ne serait pas bien difficile d'avoir accé à la bdd du forum.
Car malgrès le fait que mon code soit autonome, il s'éxécute dans punbb, donc les 2 bdd sont ouvertes et accessibles.
Bon bien sûre j'ai sécurisé mon code, il n'y a pas de quoi s'inquieter, mais il est tout de même bon d'en parler.

Là j'ai bien avancé, même quasiment terminé, et j'aurais donc besoin de faire des test avec la bdd.
Il m'a fallu 2 jours pour faire la fonction mais il m'en faudra encore au moins 4 jours pour l'optimiser wink
Donc on peut déjà commencer les tests. l'idéal, serait que tu es un espace libre ou je puisse installer punbb, comme ça tu pourrai tester, au sinon tampis je le fait en local, en tout cas si tu as 5 min, j'aimerai bien avoir accé à ta bdd. Merci.


Hors ligne


#10 

25-08-2009 16:13:43

tmyke
Administrateurs
Avatar de tmyke
Date d'inscription:
Messages: 1025
IP: 86.204.182.83
Courriel

nico Ecris:

Je ne veux pas t'effrayer mais sâche que si mon code était dépourvu de sécurités, alors il ne serait pas bien difficile d'avoir accé à la bdd du forum.
Car malgrès le fait que mon code soit autonome, il s'éxécute dans punbb, donc les 2 bdd sont ouvertes et accessibles.
Bon bien sûre j'ai sécurisé mon code, il n'y a pas de quoi s'inquieter, mais il est tout de même bon d'en parler.

Dans ce cas effectivement c'est différent, car si la sécurité de ton code n'est pas éprouvé, alors il ne sera pas souhaitable de le
mettre en place.

nico Ecris:

Là j'ai bien avancé, même quasiment terminé, et j'aurais donc besoin de faire des test avec la bdd.
Il m'a fallu 2 jours pour faire la fonction mais il m'en faudra encore au moins 4 jours pour l'optimiser wink
Donc on peut déjà commencer les tests. l'idéal, serait que tu es un espace libre ou je puisse installer punbb, comme ça tu pourrai tester, au sinon tampis je le fait en local, en tout cas si tu as 5 min, j'aimerai bien avoir accé à ta bdd. Merci.

J'essaierais de te fournir des éléments ce soir, mais je ne garantie rien, j'ai assez peut de temps à moi wink


Force et sagesse...

Hors ligne


#11 

27-08-2009 03:59:08

nico
Administrateurs
Avatar de nico
Date d'inscription:
Messages: 563
IP: 82.232.128.163
Courriel

Salut,
La v 1.0 est là ! big_smile

Cela ne veut pas dire pour autant qu'il re reste pas de réglages a faire wink mais j'ai bien avancé pour aboutir sur un code opérationnel.
Le code est divisé en 2 parties bien distinctes, d'un coté il y a le code de "gestion de la bdd" et d'un autre coté il y un code pour "afficher les définitions dans les posts".
Ce dernier est le plus critique, puisqu'il s'éxécute à chaque chargement de page du forum, tandis que le premier code s'execute seulement lorsqu'on est dans la rubrique 'dictionnaire'.

J'ai donc remué ciel et terre pour optimiser au mieu le second code, et j'ai l'honneur de t'annoncer qu'il n'y aura aucune connexion à la bdd dans cette partie là
Alors je pense qu'une question te vient a l'esprit:
Comment afficher les définitions se trouvant dans la bdd sans aucune connexions à celle-ci ? yikes
La réponse est assez simple, mais tellement découragente qu'on y pense meme pas, j'ai nommé le fichier texte.
En effet j'avais exclu cette méthode par flemme de codé ça, car c'est vraiment gonflant, mais par chance je suis tombé sur une fonction de punbb qui s'occupe tres bien de ça.
Son rôle est donc de mettre en cache les données de la bdd dans un fichier texte. Ce fichier contient le strict minimum, soit les mots et définitions.
Donc je croit qu'on a plus de soucis a ce faire en ce qui concerne les performances wink

Coté sécurités, j'ai mis le paquet, puisque outre les sécurisations html,sql et javascript, j'ai également rajouté un système anti-flood, ainsi que des limites de tailles
Coté fonctionalités, il y a le strict minimum pour l'instant, mais je peut rajouter à la demande.

Afin de finaliser le tout, j'ai besoin de connaitre le type de bdd que tu me propose. Et également la version php du site en seconde priorité.
Merci.
EDIT:

nico Ecris:

malgrès le fait que mon code soit autonome, il s'éxécute dans punbb, donc les 2 bdd sont ouvertes et accessibles.

Heureusement ce n'est plus le cas, avant j'étais obligé de faire plusieurs requetes dans punbb, car le serveur efface une requète mise en mémoire lorsque celle si est utilisé dans le code,
Donc c'est une sécurité visant à optimisé les performance mais qui oblige a faire une requète à chaque fois que l'on veut utiliser ces valeurs(d'ou l'interêt d'un fichier de cache). je sais pas si tu m'a suivit wink mais dorénavant ce n'est plus le cas puisqu'il n'y a plus de connexion à la bdd. wink
par contre dans la partie "getion de la bdd", il y a d'abord une connexion à punbb(ça c'est pas moi qui l'est fait, j'inclus simplement un fichiers de pun_bb, common.php, c'est lui qui fait tout les boulot) puis je la referme,ce qui donne ça:
define('PUN_ROOT', './');
require PUN_ROOT.'include/common.php';
$db->end_transaction();
$db->close();
unset($db);
Voilà cela permet de récupérer les info sur les membres.
Et ensuite je me connecte à la bdd du dico.
Je peut donc te garantir avec certitude qu'il ne peut pas y avoir d'accé à la bdd du forum. big_smile


Hors ligne


#12 

28-08-2009 09:25:47

tmyke
Administrateurs
Avatar de tmyke
Date d'inscription:
Messages: 1025
IP: 86.204.49.141
Courriel

Cool tout cela. Je t'envoie par message les info sur la BD. Désolé pour le retard (famille + boulot = temps limité )

wink


Force et sagesse...

Hors ligne


#13 

28-08-2009 14:55:21

nico
Administrateurs
Avatar de nico
Date d'inscription:
Messages: 563
IP: 82.232.128.163
Courriel

Super, je vais voir ça. cool

edit:bein mince, je sais pas comment on fait pour y acceder, peut tu m'expliquer ?
Tout ce que je connais c'est avec free, je vais sur sql.free.fr, mais là je sais pas du tout.
Merci.
edit2: c'est bon j'ai trouvé wink .


Hors ligne


#14 

28-08-2009 19:26:15

nico
Administrateurs
Avatar de nico
Date d'inscription:
Messages: 563
IP: 82.232.128.163
Courriel

Apparement, on ne peut pas acceder à la bdd depuis l'exterieur. ce qui est plutot embettant, la seule solution est d'executer le code depuis ovh.
bon au sinon on a cas mettre directement le code en place, à moins que tu es un espace libre pour installer un forum de test.


Hors ligne


#15 

28-08-2009 19:37:35

tmyke
Administrateurs
Avatar de tmyke
Date d'inscription:
Messages: 1025
IP: 90.56.193.20
Courriel

nico Ecris:

Apparement, on ne peut pas acceder à la bdd depuis l'exterieur. ce qui est plutot embettant, la seule solution est d'executer le code depuis ovh.

Effectivement, j'avais pas pensé, mais la BD n'est accessible qu'a partir d'OVH.

nico Ecris:

bon au sinon on a cas mettre directement le code en place

on peux toujours essayer, si tu me guide pas à pas ...


Force et sagesse...

Hors ligne


#16 

28-08-2009 20:44:33

nico
Administrateurs
Avatar de nico
Date d'inscription:
Messages: 563
IP: 82.232.128.163
Courriel

Alors, par ou comencer... wink

On va créer plusieurs fichiers dans le dossier include/.
Tout dabord on va créer le fichier config_ADDON.php

 <?php
	
$bdd_host = 'mysql5-1.300gp';
$bdd_name = 'dictionnaire';
$bdd_username = '';
$bdd_password = '';

define('DELAI', 15);// definit le délai en seconde entre chaque action.(anti-flood).
define('MAXmot', 30);// définit le nombre maximum de caractères autorisés pour un mot.
define('MAXdef', 200);// définit le nombre maximum de caractères autorisés pour une définition.

define('ENREGISTREMENT', 'Votre définition a bien été enregistré, merci pour votre aide.');
define('SUPPRESSION', 	'La définition a bien été supprimé, merci pour votre aide.');
define('EXIST', 'Cette définition existe déjà.');
define('DROIT', ' Vous ne pouvais pas supprimer cette définition.');
define('MEMBRE', 'Vous devez être connecté pour pouvoir apporter des modifications au dictionnaire.');
define('FLOOD', 'Sécurité anti-flood: vous devez patienter un délai de '.DELAI.' secondes entre chaque modification.');
define('VIDE', 'Un champs est vide, aucun enregistrement n\\'a été éfectué');
define('TAILLE', 'Le texte proposé est trop long, le mot doit comporter moins de '.MAXmot.' caractères et sa définition doit comporter moins de '.MAXdef.' caractères');
define('MEM_CACHE', 'Le fichier de cache à été mise a jour');
define('CANT_CACHE', 'Impossible de mettre à jour le fichier de cache');

define('INFO','<p>Ce site intègre un dictionnaire dans lequel chaque membre peut ajouter des définitions de mots et de classe.<br />
		Pour afficher la définition des mots et des classes lors de votre lecture sur le forum, il suffit de les survoler avec la souris.<br />
		En cliquant sur le nom d\\'une classe, vous serez rediriger vers la documentation d\\'Irrlicht.</p>');
?>

Ce fichier va donc te permettre de configurer tout le reste.
Il faut également que tu rentre le mot de passe et le nom.

Ensuite on va créer le fichier fonctions_ADDON.php
<?php
if (!defined('PUN'))
	exit;

//////////////////////////////////////////////////////////////////////////////SECURITE/////////////////////////////////////////////////////////////////////////////////////
		function Securisation_sql($string)
		{
			if(ctype_digit($string))
			{
				$string = intval($string);
			}
			else
			{
				$string = mysql_real_escape_string($string);
				$string = addcslashes($string, '%_');
			} 
			return $string;
		}	
		function Securisation_html($string)
		{
			return htmlentities($string);
		}		
		function Securisation_javascript($string)
		{
			return preg_replace('#;#i',',',$string);
		}		
	    function antiflood($user,$delai)
		{
			$actions = mysql_result(mysql_query("SELECT COUNT(*) FROM action WHERE membre='".$user."' AND date > ('".time()."' - '".$delai."')"), 0);
			if ($actions !=0){return false;}
			else return true;
		}		
		function limit($string,$limit)
		{
			if(strlen($string)<$limit){return true;}
			else return false;
		}
//////////////////////////////////////////////////////////////////////////////INFO/////////////////////////////////////////////////////////////////////////////////////		
		function reussite($string)
		{
			return '<span class="directives"><p>'.$string.'</p></span>';
		}
		function echec($string)
		{
			return '<span class="operateurs"><p>'.$string.'</p></span>';
		}
//////////////////////////////////////////////////////////////////////////////CACHE/////////////////////////////////////////////////////////////////////////////////////		
		function mem_cache_dico()
		{
			$reponse = mysql_query("SELECT  mot,definition   FROM dictionnaire");
			while ($dico =mysql_fetch_row($reponse))$mem[$dico[0]] = $dico[1];

			$dico_cache = @fopen(PUN_ROOT.'cache/cache_dictionnaire.php', 'wb');
			if (!$dico_cache)return false;
			else
			{
				fwrite($dico_cache, '<?php'."\
\
".'define(\\'DICO_LOADED\\', 1);'."\
\
".'$dico = '.var_export($mem, true).';'."\
\
".'?>');
				fclose($dico_cache);
				return true;
			}
		}
		function mem_cache_doc()
		{
			$reponse = mysql_query("SELECT  classe,definition   FROM documentation");
			while ($doc =mysql_fetch_row($reponse))$mem[$doc[0]] = $doc[1];

			$doc_cache = @fopen(PUN_ROOT.'cache/cache_documentation.php', 'wb');
			if (!$doc_cache)return false;
			else
			{
				fwrite($doc_cache, '<?php'."\
\
".'define(\\'DOC_LOADED\\', 1);'."\
\
".'$doc = '.var_export($mem, true).';'."\
\
".'?>');
				fclose($doc_cache);
				return true;
			}
		}
//////////////////////////////////////////////////////////////////////////////DICO&DOC/////////////////////////////////////////////////////////////////////////////////////		
		function dico($text,$dico,$doc)
		{
		    if(DOC_LOADED && DICO_LOADED)
			{
				foreach($dico as $mot=>$definition)
				{	
				   $text=preg_replace('#(?<!<span title=\\")([a-zA-Z0-9\\'\\",\\.\\* ]*)([^a-zA-Z0-9])('.Securisation_html(Securisation_javascript($mot)).')([^a-zA-Z0-9])#isU','$1$2<span title=" '.Securisation_html(Securisation_javascript($definition)).'">$3</span>$4',$text);
				}		
				foreach($doc as $classe=>$definition)
				{
					$text=preg_replace  ('#(?<!<span title=\\")([a-zA-Z0-9\\'\\",\\.\\* ]*)([^a-zA-Z0-9])('.Securisation_html(Securisation_javascript($classe)).')([^a-zA-Z0-9])#isU','$1$2<span title=" '.Securisation_html(Securisation_javascript($definition)).'"><a style=" text-decoration:none; color:000000; " href="'.PUN_ROOT.'include/documentation_ADDON.php?fonction='.Securisation_html(Securisation_javascript($classe)).'">$3</a></span>$4',$text);
				}
			}
			return $text;
		}
?>

Cela sera notre boite à outil wink

encore un petit outil, qu'on nomera documentation_ADDON.php
 
<?php
if(strpos($_SERVER['HTTP_REFERER'],"viewtopic.php")!==false)
{
$fonction=preg_replace('#(\\'|\\")#i','\\$1',$_GET['fonction']);
$source = implode ('', file ("http://www.google.com/search?hl=en&q=$fonction+%2Bclass%2BReference%2Bsite%3Ahttp%3A%2F%2Firrlicht.sourceforge.net%2Fdocu%2F&btnG=Search&lr=lang_en&aq=f&oq=&aqi="));
$source = strstr($source, '<a href="http://irrlicht.sourceforge.net/docu/'); 
$fin_source = strstr($source, '.html"'); 
$proposition = str_replace("$fin_source","", $source); 
$proposition = str_replace('<a href="',"", $proposition);  
if (preg_match("/irrlicht/", $proposition)){header('Location:'.$proposition.'.html');}
else header("Location:http://www.google.com/search?hl=en&q=$fonction+%2Bclass%2BReference%2Bsite%3Ahttp%3A%2F%2Firrlicht.sourceforge.net%2Fdocu%2F&btnG=Search&lr=lang_en&aq=f&oq=&aqi=");
}
else echo'error';
 ?>

Voilà, on a fini pour le dossier include, maintenant il faut revenir a la racine du repertoire et y créer le fichier dictionnaire_ADDON.php qui permettra de gérer la bdd
<?php 
/////////////////////////////////////////////////////////////////////////////////INIT////////////////////////////////////////////////////////////////////////////////////////////
define('PUN_ROOT', './');
require PUN_ROOT.'include/config_ADDON.php';
$dic=mysql_connect($bdd_host,$bdd_username,$bdd_password) or die( mysql_error() );
mysql_select_db($bdd_name) or die( mysql_error() );
$reponse = mysql_query("SELECT * FROM dictionnaire");
$repons = mysql_query("SELECT * FROM documentation"); 
mysql_close($dic);
unset($dic);
require PUN_ROOT.'include/common.php';
if ($pun_user['g_read_board'] == '0')
message($lang_common['No view']);
// Load the index.php language file
require PUN_ROOT.'lang/'.$pun_user['language'].'/index.php';
$page_title = pun_htmlspecialchars($pun_config['o_board_title']);
define('PUN_ALLOW_INDEX', 1);
require PUN_ROOT.'header.php';
require PUN_ROOT.'include/fonctions_ADDON.php';
/////////////////////////////////////////////////////////////////////////////////INFO/////////////////////////////////////////////////////////////////////////////////////////////
echo'<div class="box" style="padding:10;"><div class="inbox">';
switch ($_GET['info']) { 
		case 'dico':  echo reussite(ENREGISTREMENT);break;
		case 'sup':   echo reussite(SUPPRESSION);	break;
		case 'exist': echo echec(EXIST);			break;
		case 'error': echo echec(DROIT);			break;
		case 'echec': echo echec(MEMBRE);			break;
		case 'flood': echo echec(FLOOD);			break;
		case 'vide':  echo echec(VIDE);				break;
		case 'taille':echo echec(TAILLE);			break;
}
if (isset($_GET['memo']))
{
	if($_GET['memo']=='maj')echo reussite(MEM_CACHE);
	if($_GET['memo']=='unfound')echo echec(CANT_CACHE);
}
echo INFO;
//////////////////////////////////////////////////////////////////////////////IMPUT//////////////////////////////////////////////////////////////////////////////////////////////////
?>
<form method="post" action="enregistrement_ADDON.php?action=mot" style="display: inline;" > 
 <fieldset style="display: inline;padding:5;"><legend>Ajouter une définition</legend>  
    <p> <fieldset style="display: inline;padding:5;"><legend>mot</legend><input type="text" name="mot" id="mot" size="50"/></fieldset> </p>
	<p><fieldset style="display: inline;padding:5;"><legend>Définition</legend><textarea name="definition" id="definition" rows="10" cols="50"></textarea> </fieldset>  </p>  
	<p><input type="submit" value="Enregistrer"/><br /> </p>
  </fieldset>
</form>
<form method="post" action="enregistrement_ADDON.php?action=doc" style="display: inline;"> 
  <fieldset style="display: inline;padding:5;"><legend>Ajouter une documentation</legend>  
    <p> <fieldset style="display: inline;padding:5;"><legend>classe</legend><input type="text" name="classe" id="classe" size="50"/></fieldset> </p>
	<p><fieldset style="display: inline;padding:5;"><legend>Définition</legend><textarea name="definition2" id="definition2" rows="10" cols="50"></textarea> </fieldset>  </p>  
	<p><input type="submit" value="Enregistrer"/><br /> </p>
  </fieldset>
</form>
<?php /////////////////////////////////////////////////////////////////////////LISTES//////////////////////////////////////////////////////////////////////////////////////////////////


 echo' <fieldset><legend>Liste des mots enregistrés</legend>  
	<table class="pun">
		<tr>
			<th>Mots</th>
			<th>Definitions</th>             
			<th>Membres</th>
			<th>Date</th>
			<th>Action</th>
	   </tr>';
while ($donnees = mysql_fetch_array($reponse) )
{
 echo'
    <tr>
      <td>'.Securisation_html(Securisation_javascript($donnees['mot'])).'</td> 
	  <td>'.Securisation_html(Securisation_javascript($donnees['definition'])).' </td> 
	  <td> Ajouté par '.Securisation_html(Securisation_javascript($donnees['membre'])).'</td>
	  <td>le '.$donnees['date'].'</td>
	  <td>';
	 if($pun_user['g_id']==PUN_ADMIN || $donnees['membre']==$pun_user['username']){
		echo'<form method="post" action="enregistrement_ADDON.php?action=supprimer&id='.Securisation_html(Securisation_javascript($donnees['id'])).'"> <p><input type="submit" value="Supprimer"/><br /> </p></form>';
	}else echo'Aucune action possible';
	echo'</td>
   </tr>';
}
 echo'</table></fieldset>';
 
  echo' <fieldset><legend>Liste des classes enregistrés</legend>  
	<table class="pun">
		<tr>
			<th>Classes</th>
			<th>Definitions</th>             
			<th>Membres</th>
			<th>Date</th>
			<th>Action</th>
	   </tr>';
while ($donnees = mysql_fetch_array($repons) )
{
 echo'
    <tr>
      <td>'.Securisation_html(Securisation_javascript($donnees['classe'])).'</td> 
	  <td>'.Securisation_html(Securisation_javascript($donnees['definition'])).' </td> 
	  <td> Ajouté par '.Securisation_html(Securisation_javascript($donnees['membre'])).'</td>
	  <td>le '.$donnees['date'].'</td>
	  <td>';
	if($pun_user['g_id']==PUN_ADMIN || $donnees['membre']==$pun_user['username']){
		echo'<form method="post" action="enregistrement_ADDON.php?action=supprimerC&id='.Securisation_html(Securisation_javascript($donnees['id'])).'"> <p><input type="submit" value="Supprimer"/><br /> </p></form>';
	}else echo'Aucune action possible';
	echo'</td>
   </tr>';
}
 echo'</table></fieldset>';
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
echo'</div></div><br/>';
require PUN_ROOT.'footer.php';
?>

puis on créer le fichier qui va permettre de valider les informations, enregistrement_ADDON.php
<?php
define('PUN_ROOT', './');
require PUN_ROOT.'include/common.php';			
$db->end_transaction();
$db->close();
unset($db);

require PUN_ROOT.'include/config_ADDON.php';	
require PUN_ROOT.'include/fonctions_ADDON.php';

if($pun_user['g_id']==PUN_ADMIN||$pun_user['g_id']==PUN_MOD||$pun_user['g_id']==PUN_MEMBER)
{	global $db;
	$dic=mysql_connect($bdd_host,$bdd_username,$bdd_password) or die( mysql_error() );
	mysql_select_db($bdd_name) or die( mysql_error() );
	$membre=Securisation_sql($pun_user['username']);
    if($pun_user['g_id']==PUN_ADMIN || antiflood($membre,DELAI))
	{
		switch ($_GET['action']) 
		{ 
			case 'mot':
			{	
				$mot=Securisation_sql($_POST['mot']);
				$definition=Securisation_sql($_POST['definition']);
			    if(!empty($mot)&&!empty($definition))
				{
				    if(limit($mot,MAXmot) && limit($definition,MAXdef))
					{
						$exist = mysql_result(mysql_query('SELECT COUNT(*) FROM dictionnaire WHERE mot = "'.$mot.'"'), 0);
						if($exist == 0)
						{
							mysql_query("INSERT INTO dictionnaire (id, membre, mot, definition,date) VALUES('null','".$membre."','".$mot."','".$definition."', '".time()."')")or die( mysql_error() );
							$info='dico';
							mysql_query("INSERT INTO action (id, membre,date) VALUES('null','".$membre."','".time()."')")or die( mysql_error() );
							if(mem_cache_dico())$memo='maj';
							else $memo='unfound';
						}
						else $info='exist';
					}
					else $info='taille';
				}
				else $info='vide';	
			}
			break;
			case 'doc':
			{
				$classe=Securisation_sql($_POST['classe']);
				$definition2=Securisation_sql($_POST['definition2']);
			    if(!empty($classe)&&!empty($definition2))
				{
					if(limit($classe,MAXmot) && limit($definition2,MAXdef))
					{
						$exist = mysql_result(mysql_query('SELECT COUNT(*) FROM documentation WHERE classe = "'.$mot.'"'), 0);
						if($exist == 0)
						{				
							$date=time();
							mysql_query("INSERT INTO documentation (id, membre, classe, definition,date)VALUES('null','".$membre."','".$classe."','".$definition2."', '".$date."')")or die( mysql_error() );
							$info='dico';
							mysql_query("INSERT INTO action (id, membre,date) VALUES('null','".$membre."','".time()."')")or die( mysql_error() );
							if(mem_cache_doc())$memo='maj';
							else $memo='unfound';
						}
						else $info='exist';
					}
					else $info='taille';
				}	
				else $info='vide';	
			}
			break;
			case 'supprimer':
			{
			   $id =Securisation_sql($_GET['id']);
			   $requete = mysql_query('SELECT membre FROM dictionnaire WHERE id = '.$id.'')or die( mysql_error() );
			   $data = mysql_fetch_assoc($requete);
			   if ($membre == $data['membre']|$pun_user['g_id']==PUN_ADMIN)
			   {
					mysql_query("DELETE from dictionnaire WHERE id = '".$id."'" )or die( mysql_error() );
					$info='sup';
					mysql_query("INSERT INTO action (id, membre,date) VALUES('null','".$membre."','".time()."')")or die( mysql_error() );
					if(mem_cache_dico())$memo='maj';
					else $memo='unfound';
				}
				else $info='error';		
			}
			break;
			case 'supprimerC':
			{
			   $id =Securisation_sql($_GET['id']);
			   $requete = mysql_query('SELECT membre FROM documentation WHERE id = '.$id.'')or die( mysql_error() );
			   $data = mysql_fetch_assoc($requete);
			   if ($membre == $data['membre']|$pun_user['g_id']==PUN_ADMIN)
			   {
					mysql_query("DELETE from documentation WHERE id = '".$id."'")or die( mysql_error() );
					$info='sup';
					mysql_query("INSERT INTO action (id, membre,date) VALUES('null','".$membre."','".time()."')")or die( mysql_error() );
					if(mem_cache_doc())$memo='maj';
					else $memo='unfound';
				}
				else $info='error';		
			}
			break;	
		}
	}
	else $info='flood';		
	mysql_close($dic);
}
else $info='echec'; 
unset($data,$pun_user);	
if($memo=="") header('Location:'.PUN_ROOT.'dictionnaire_ADDON.php?info='.$info.'');
else header('Location:'.PUN_ROOT.'dictionnaire_ADDON.php?info='.$info.'&memo='.$memo.'');
?>

Bon je pense qu'on peut déjà essayer ca, le code n'est pas complet afin que les utilisateurs du forum ne soit pas affectés lors de nos essais.
Mais rassure toi il reste juste une dizaine de lignes de code. wink


Hors ligne


#17 

29-08-2009 11:56:40

Froyok
Membres
Avatar de Froyok
Date d'inscription:
Messages: 4
IP: 92.61.132.122
Courriel  Site web

Bonjour, j'apprécie l'initiative du dictionnaire !
Je passe juste pour signaler ceci :

vertex = sommet
vertices = sommets !

(Référence au premiet post du topic)
Bonne continuation ! smile

Hors ligne


#18 

29-08-2009 12:56:01

nico
Administrateurs
Avatar de nico
Date d'inscription:
Messages: 563
IP: 82.232.128.163
Courriel

Merci Froyok, c'est corrigé wink
Je suis content que ça t'intéresse.


Hors ligne


#19 

29-08-2009 15:15:52

tmyke
Administrateurs
Avatar de tmyke
Date d'inscription:
Messages: 1025
IP: 86.213.162.54
Courriel

Je m'occupe du code demain matin Nico, je devrais être tranquille, toujours aussi peux de temps à moi en ce moment wink


Force et sagesse...

Hors ligne


#20 

29-08-2009 15:17:39

nico
Administrateurs
Avatar de nico
Date d'inscription:
Messages: 563
IP: 82.232.128.163
Courriel

Ok, pas de soucis wink


Hors ligne


#21 

30-08-2009 08:53:42

tmyke
Administrateurs
Avatar de tmyke
Date d'inscription:
Messages: 1025
IP: 81.51.29.59
Courriel

Bon, voilà, j'ai effectué les ajout que tu décris ci-dessus...

PS: dans quel mesure serait-il possible d'utiliser un serveur dédié, avec son propre FTP et aussi donc sa propre BD ?
Par contre je ne sais pas comment cela se passerait pour faire le lien avec le forum.


Force et sagesse...

Hors ligne


#22 

30-08-2009 09:26:15

nico
Administrateurs
Avatar de nico
Date d'inscription:
Messages: 563
IP: 82.232.128.163
Courriel

Cool, apparement il y a un probleme de connexion, il faudrait essayé de mettre ça: $bdd_host = 'mysql5-1';

Alors cela doit être faisable, perso j'y avait pensé que pour les tests, mais le problème c'est qu'il faut qu'en même que je me connecte à la bdd du forum pour voir si les membres sont bien enregistrés, donc cela serait un problème je pense,
l'avantage sur la bdd que tu m'a passé, c'est qu'il y a aucune données sensibles comme mot de passe, ou encore niveau de privilège. grace a la bdd du forum. Donc je pense que tout décentraliser amenerai a plus de risque de sécurité. par contre pour les tests c'est super, mais dit moi le fond de ta pensée.


Hors ligne


#23 

30-08-2009 10:20:13

tmyke
Administrateurs
Avatar de tmyke
Date d'inscription:
Messages: 1025
IP: 81.51.29.59
Courriel

nico Ecris:

Cool, apparement il y a un probleme de connexion, il faudrait essayé de mettre ça: $bdd_host = 'mysql5-1';

Je suis pas sur, car en passant par MySQLAdmin, je rentre bien mysql5-1.300gp, et cela fonctionne bien. J'ai ré-injecté le fichier 'config-ADDON' au cas ou.
Ceci dit la base est vide.

nico Ecris:

Alors cela doit être faisable, perso j'y avait pensé que pour les tests, mais le problème c'est qu'il faut qu'en même que je me connecte à la bdd du forum pour voir si les membres sont bien enregistrés, donc cela serait un problème je pense,

Oui, c'est bien ce que je pensais...

nico Ecris:

l'avantage sur la bdd que tu m'a passé, c'est qu'il y a aucune données sensibles comme mot de passe, ou encore niveau de privilège. grace a la bdd du forum. Donc je pense que tout décentraliser amenerai a plus de risque de sécurité. par contre pour les tests c'est super, mais dit moi le fond de ta pensée.

Effectivement, vue sur ce plan, j'avoue n'être absoluement pas un spécialiste de la prog WEB, et donc je n'ai pas à l'espris les bon reflexes.


Force et sagesse...

Hors ligne


#24 

30-08-2009 10:30:20

nico
Administrateurs
Avatar de nico
Date d'inscription:
Messages: 563
IP: 82.232.128.163
Courriel

Est ce que le site est hebergé chez ovh? car il met cette erreur:Unknown MySQL server host 'mysql5-1.300gp'
http://forum.irrlicht.fr/dictionnaire_ADDON.php


Hors ligne


#25 

30-08-2009 10:54:53

tmyke
Administrateurs
Avatar de tmyke
Date d'inscription:
Messages: 1025
IP: 81.51.29.59
Courriel

La base de donnée que j'ai fourni est bien chez OVH, par contre le forum lui n'y est pas, je viens de percuter.... hmm


Force et sagesse...

Hors ligne


Options Liens officiels Caractéristiques Statistiques Communauté
Préférences cookies
Corrections
irrlicht
irrklang
irredit
irrxml
Propulsé par Django
xhtml 1.0
css 2.1
884 membres
1440 sujets
11337 messages
Dernier membre inscrit: Saidov17
159 invités en ligne
membre en ligne: -
RSS Feed