Semaine 4: 07_11/07/2014

J’ai débuté la semaine en réalisant une demande de mon tuteur. Il m’a demandé d’ajouter un lien qui naviguerait sur la page de modification de société si une société ne contient pas un logo pour que la personne chargée puisse ajouter un logo facilement. En plus, bien que quelques sociétés aient leurs logos, ils n’apparaissaient pas sur la page d’affaire. La solution est l’utilisation de la fonction utf8_decode() car le problème vient de la fonction file_exist(). Il fallait utiliser comme ceci :

file_exist(utf8_decode(…)){
  ...
}

Je vais écrire un bout de code que je rencontre pendant le stage :

$sql = " SELECT * FROM saisithermique.wall_type
WHERE id=".$wallType[‘IDParoi’].";";
If(!($result = mysql_query($sql))){
    $echo .= error($sql);
}
While($row2) = mysql_fetch_assoc($result)){
    …
    …
}

En cas d’erreur de requête, on préfère la fonction die($string) au lieu de echo. Parce que il affiche le message en paramètre il fait un simple exit. Ainsi, on ne provoquera pas d’autre erreur qui aura une conséquence de cette erreur.

Ensuite, j’ai trouvé une erreur d’une fonction dans le fichier conenct_mysql.php. C’est un fichier dans lequel on se sert des fonction de connexion à la base de données et quelques fonctions utiles ainsi que mysql_db_exist() ou mysql_table_exist(). J’ai constaté que ça ne fonctionnait pas bien mysql_db_exist pendant que je testais une autre chose. Il fallait juste une condition if qui vérifie le nombre de ligne retourné par mysql_num_rows(). J’ai trouvé bizarre parce que je voulais utiliser celle-là dans la 1ere semaine pour le script php qui détecte les erreurs 404 et include mais je ne l’avais pas remarqué.

Depuis 3 semaines, des fois on recevait une erreur comme ça dans le fichier error.log du jour :

[Fri Jul 11 09:17:49 2014] [error] [client 192.168.0.122] PHP Notice:
Undefined variable: deleteCurrent in 
F:\Dropbox\htdocs\includes\phpdocx_2.5\classes\CreateTemplate.inc
on line 459,
referer: http://sbs-prelem:82/princip/index.php?affaire=469

Je ne l’ai pas analysé car mon tuteur l’avait dit que on ne pouvait rien faire pour ce genre de problème. Cette semaine, j’ai été curieux d’où elle vient cette erreur et j’ai constaté que c’était simple à corriger. Pour cela, il fallait juste déplacer la variable $deletecurrent en dehors de foreach car juste après avoir utilisé foreach, on met dans if cette variable. S’il n’est pas initialisé en dehors de foreach, il sera possible de ne pas entrer le foreach. Donc ca provoquait des fois une erreur de undefined variable.
Et puis j’ai commencé à réaliser une autre mission : C’était d’optimiser le fichier xml.php qui génère un fichier xml qui est utilisé par le logiciel u02. Il a 900 lignes de code.
J’ai essayé de comprendre d’abord la source xml.php
J’ai fait quelques modifications sur la source en créant un autre fichier comme xml2.php
par exemple il y avait 3 fois

if($id <= 1){ … }

et j’ai resynthésé cela
J’ai supprimé quelques variables qui nous sert pas
J’ai trouvé une ligne appramment mal construit:

$hauteur = ($logement['lgniv'] == 0) ? $hauteurRDC[$numBati] : 
($logement['lgniv'] == $attique ) ?
 $hauteurAttique[$numBati] : $hauteurEtage[$numBati] ;

c’est une operateur terniaire imbriqué → selon la référence ca ne marche pas :/
référence: http://www.php.net/manual/fr/language.operators.comparison.php#language.operators.comparison.ternary

parce que moi aussi j’ai essayé ce genre de truc et cela n’a pas marché ..

A part cela, j’ai modifié peu de chose :/
Et aussi, j’ai remplacé les utilisations de echo par la fonction die() en cas d’erreur de requête sql.

Une fois que j’ai voulu comparé (par exemple) a_541.xml que j’ai généré et celui qui est dans P:\divers\Fichiers thermiques XML, j’ai eu problème parce que 1ère raison → il y a beaucoup de lignes
2ème raison → Irina m’a parlé qu’elle pouvait modifier quelques valeurs à la main sur wikimedia donc ce ne sera pas pareil à la comparaison.
(Entre-temps, Irina m’a demandé de régler une erreur d’affichage sur l’onglet Termik, je l’ai fait)
Donc, une idée est venue à l’esprit. Comme j’ai déjà fait XML à l’INSA, j’ai décidé de créer un fichier DTD. Ca nous sert à valider le fichier XML. Par contre que j’ai vu que les balises XML sont un peu mal foutus.

Par exemple:

‹aaa_Type› 
	‹bbb› Nejat ‹/bbb›
	‹aaa_Type›Nejat ‹/aaa›
‹/aaa_Type›

Avec DTD, on ne peut pas valider ce contexte parce que nœud fils et nœud père a le même nom de balise.
Ce que j’ai fait j’ai remplacé ‹aaa_Type› par ‹aaa_type›
Ou bien j’ai utilisé les attributs:

‹aaa_Type ID=12 name=”nejat”›
		‹salaire› 12 ‹/salaire›
‹/aaa_Type›

Avec tout ca, j’ai arrivé à valider le fichier XML.
Pourquoi valider le XML sur wiki? Peut-être ca sert a rien parce que l’on touche jamais à xml.php je crois
Mais en cas d’erreur de invalid format XML → ca peut servir
Mais ce sera une conséquence si je change les balises
une exemple: http://sbs-prelem:82/Nejat/Thermique/Avec_Modifications_Balises/xml.php
J’avoue qu’il y a une autre solution:
Comparer le fichier xml que je génère à partir de la source ancienne au lieu d’utiliser les xml déjà généré par quelqu’un et la mienne.
Mais cela ne m’a pas satisfait. De mon point de vue (professionnel!), j’aurais dû à faire un truc qui validerait le xml. Avec un peu de recherche, j’ai trouvé XML Schéma qui se ressemble à la syntaxe XML et qui est plus puissant que DTD. (j’avoue que j’ai perdu beaucoup du temps avec DTD). Ce que je voulais, en cas d’erreur il faut que je voie d’où elle vient l’erreur et à quelle ligne. J’ai profité la classe DOMDocument. J’ai trouvé quelques sources sur xml en php, il y a des méthodes comme addAttribute ou addChild ..
Du coup, j’ai réalisé un schéma XML qui est censé de valider les fichiers XML généré.
Sans changer le contenu de xml, il vérifie s’il est valide ou pas.

Après avoir fini la 4ième semaine en stage, il ne me reste qu’une mission à faire qu’ils ont prévu avant mon arrivé à Prelem.

Advertisements