Code correct ?

Code correct ? - PHP - Programmation

Marsh Posté le 04-07-2004 à 13:37:30    

Bonjour,
 
Suite à mon précédent topic http://forum.hardware.fr/hardwaref [...] 4263-1.htm je recolle une partie de mes interrogations ici.
---
 
Tout fonctionne maintenant, mais j'aimerai un ou plusieurs avis sur le code php que j'ai réalisé. (je rappelle, c'est le 1er :sol:) J'ai tout refondu pour faire de la poo (*habitué à faire du java* :ange:), et j'aimerai votre avis sur mon code donc ! J'ai juste fait une classe "Tribune" qui regroupe les méthodes qui lui sont appropriés.
 
Qu'est ce qui ne va pas en gros, qu'est ce que je pourrai améliorer, les éventuelles failles ? etc. Je me demandais par exemple comment bien gérer les connections à MySQL, j'aurai aimé un destructeur, mais napa.  :whistle:
 
Le php : ici
Je rappelle la page :
 
Merci à/aux âme(s) charitable(s) qui lirai(en)t le code. :o
---
 
Et dans une interrogation plus large, est ce bon de faire de la POO en php ? :D

Reply

Marsh Posté le 04-07-2004 à 13:37:30   

Reply

Marsh Posté le 04-07-2004 à 20:02:59    

andOceans a écrit :


Et dans une interrogation plus large, est ce bon de faire de la POO en php ? :D


 
Pour répondre à cette question, je te recommande cet article


---------------
fermez vos topics résolus avec le tag [Résolu] en fin de titre. Merci !
Reply

Marsh Posté le 04-07-2004 à 20:36:46    

1° pour la première fonction, c'est une mauvaise approche, un show table est meilleur car il te donnera une réponse plus proche de la vérité. Ici, tu te choppes un message d'erreur et tu ne vérifies même pas ce qu'il vaut.
 
2° les valeurs de connexion de devraient jamais se trouver en dur dans la classe.
 
3° les fonctions avec valeurs par défaut, je suis pas trop pour, ca laisse une part de flou dans l'utilisation
 
4° le die n'est pas une bonne pratique. Tu dis que tu as l'habitude du java et tu n'effectues même pas une traitement approprié de l'erreur.
 
5° la recherche de la bdd pour la tribue c'est du grand n'importe quoi. Soit elle existe et on l'utilise de suite, soit elle n'existe pas et on ne s'amuse pas à la rechercher dans l'ensemble des db dispos mais on traite l'erreur proprement
 
6° Tout ce qui est création de la tribune (DB, tables, etc...) ne doit pas se trouver dans cette classe, cela fait partie de l'installation du script, pas de son utilisation classique.
 
7° dans add, le deuxième message d'erreur écrase le premier
 
8° elseif inutile dans la fonction add, else suffit.
 
9° un insert sans préciser les champs et ensuite être obligé de mettre des champs à null, c'est mal.
 
10° dans la fonction show_message, quel chippotage juste pour traiter le cas initial!
 
11° l'appel systématique à la fonction add dans la page est a éviter.
 
Voila, c'est ce que je vois rapidement dans le code, mais il est fort possible que j'ai laissé passer l'un ou l'autre truc.

Reply

Marsh Posté le 05-07-2004 à 13:32:14    

Okay, ca fait plaisir, je vais voir tout ça.
 
Merci à vous deux.

Reply

Marsh Posté le 05-07-2004 à 20:29:07    

J'ai réécris la fonction avec un show table, elle est correcte ? (ca fonctionne en tout cas :d)
 

Code :
  1. // ---------------------------------------------------
  2. // Retourne true si $table existe dans la bdd $db_name
  3. // ---------------------------------------------------
  4. function mysql_table_exists($table, $sql, $db_name) {
  5. $tables = mysql_query('SHOW TABLE STATUS FROM ' . $db_name, $sql);
  6. if ($tables)
  7.  while ($data = mysql_fetch_array($tables))
  8.   if ($data['Name'] == $table)
  9.    return true;
  10. return false;
  11. }


 
 
edit:
7° dans add, le deuxième message d'erreur écrase le premier
8° elseif inutile dans la fonction add, else suffit.  
> non, car je traite le cas ou rien n'est rempli aussi en fait. donc le message d'erreur ne peut jamais contenir les deux, et le elseif, pour ca aussi. Mais cela changera certainement, vu que je vais traiter le cas dans la fonction appelante pour éviter "d'adder" tout le temps comme tu fais remarquer.


Message édité par andOceans le 05-07-2004 à 20:39:54
Reply

Marsh Posté le 05-07-2004 à 21:03:34    

Ca fonctionne mais c'est loin d'être optimale.
 
SHOW TABLES FROM DB LIKE 'NOM_DE_LA_TABLE' te donne directement une réponse positive ou négative, sans traitement suppélmentaire nécessaire (en supposant que tu as déjà vérifier ta connexion à la db)

Reply

Marsh Posté le 05-07-2004 à 21:17:15    

Effectivement, j'ai raccourci la fonction. Je pense que ça ira non ? :d

Code :
  1. function mysql_table_exists($table, $sql, $db_name) {
  2. $foo = mysql_query('SHOW TABLE STATUS FROM ' . $db_name . ' LIKE \'' . $table . '\'', $sql);
  3. return mysql_fetch_array($foo) == TRUE;
  4. }

Reply

Marsh Posté le 06-07-2004 à 19:29:13    

2° les valeurs de connexion de devraient jamais se trouver en dur dans la classe.
 
> Euh, si on prend l'exemple du mysql_connect(), je ne vais tout de même pas créer une nouvelle connection dans les fonctions qui en auront besoin ?! De plus, il y a toujours la gestion d'erreur lourde, donc, il vaut mieux ne l'avoir qu'une fois, ce que j'ai fait en créant une fonction qui renvoie une ressource de mysql_connect() mais cette solution me paraît mauvaise. Puis si je passe la ressource en argument, c'est assez étrange, ça n'a rien à faire en argument ahma. D'où ma mise en attribut qui arrange tous les problèmes. :) Est ce correct ?
 
A moins qu'en parlant de "valeur de connection", tu ne parlais que des arguments de fonctions ? (host, user etc que j'ai effectivement supprimé de la classe pour les mettre dans un fichier à part)

Reply

Marsh Posté le 06-07-2004 à 19:37:23    

andOceans a écrit :


A moins qu'en parlant de "valeur de connection", tu ne parlais que des arguments de fonctions ? (host, user etc que j'ai effectivement supprimé de la classe pour les mettre dans un fichier à part)


 
tout à fait.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed