begin process at 2012 05 27 22:15:52
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

SQL

 > CLASSE MYSQL SIMPLE (ABSTRACTION DES REQUÊTES SQL)

CLASSE MYSQL SIMPLE (ABSTRACTION DES REQUÊTES SQL)


 Information sur la source

Note :
6,67 / 10 - par 3 personnes
6,67 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :SQL Classé sous :mysql, classe Niveau :Débutant Date de création :03/06/2006 Date de mise à jour :11/12/2006 15:26:22 Vu :9 710

Auteur : antoine129

Ecrire un message privé
Site perso
Commentaire sur cette source (44)
Ajouter un commentaire et/ou une note

 Description

Classe permettant d'utiliser des fonctions simples plutôt que d'écrire des requêtes SQL.
Avec gestion des erreurs, gestion de la multi-instanciation de connexions, etc.
Par exemple pour insérer des données:

$db = new BDD('mabase','localhost','user','password');
$data ['login'] = 'Moi';
$data['password'] = 'bgqpsegvspib';
$data['email'] = 'moi@moi.com';
$n = $db->insert('users',$data);
echo 'Utilisateur #'.$n.' ajouté.';

Source

  • <?php
  • /**
  • * Classe d'abstraction de base de données MySQL.
  • * @version 2.1
  • * @php 4
  • * @author Antoine Rousseau - http://mout.fr/
  • */
  • class BDD {
  • var $host;
  • var $user;
  • var $pass;
  • var $db;
  • var $link;
  • var $template;
  • var $prefix;
  • /**
  • * Instancie un objet BDD, se connecte au SGBD spécifié,
  • * et sélectionne la base spécifiée.
  • *
  • * @param String $base la base de données
  • * @param String $host le serveur
  • * @param String $user le login de connexion au SGBD
  • * @param String $pass le mot de passe de connexion au SGBD
  • * @param String $prefix préfixes des tables, par défaut aucun
  • */
  • function BDD($base, $host, $user, $pass, $prefix=''){
  • $this->host = $host;
  • $this->user = $user;
  • $this->pass = $pass;
  • $this->db = $base;
  • $this->prefix = $prefix;
  • $this->template = array(0=>'',1=>'');
  • //connexion au SGBD :
  • $this->link = mysql_connect($this->host, $this->user, $this->pass)
  • or die($template[0].'Error connecting to "'.$this->host.'":<pre>'.mysql_error().'</pre>'.$template[1]);
  • //sélection de la base de données ("use") :
  • mysql_select_db($this->db, $this->link)
  • or die($template[0].'Error selecting "'.$this->db.'" database:<pre>'.mysql_error().'</pre>'.$template[1]);
  • }
  • /**
  • * Sélectionne des enregistrements.
  • *
  • * @param String $fields champs à retourner (SELECT, peut être '*')
  • * @param String $tables table(s) à lire (FROM)
  • * @param String $conditions critères de filtrage (WHERE)
  • * @param String $order ordre de tri (par défaut par ordre croissant)
  • * @param int $limit limite du nombre de résultats renvoyés, par défaut aucune limite
  • * @return Array tableau contenant les enregistrements sélectionnés (1 enregistrement = 1 ligne)
  • */
  • function select($fields, $tables, $conditions='1', $order='', $limit=0){
  • $requete = 'SELECT '.$fields.' FROM '.$this->list_prefix_tables($tables).' WHERE '.$conditions;
  • if(!empty($order))
  • $requete.= ' ORDER BY '.$order;
  • if(!empty($limit) && $limit>0)
  • $requete.= ' LIMIT '.$limit;
  • $q = $this->query($requete);
  • $t = array();
  • while($r = mysql_fetch_array($q, MYSQL_ASSOC))
  • $t[] = $r;
  • return $t;
  • }
  • /**
  • * Insert des données dans la base.
  • *
  • * @param String $into table où insérer les données (INTO)
  • * @param Array $data tableau contenant les données (1 ligne = 1 champ)
  • */
  • function insert($into, $data){
  • foreach($data as $k => $v){
  • $keys[] = $k;
  • $vals[] = $this->quote_smart($v);
  • }
  • $this->query('INSERT INTO '.$this->prefix.$into.' ('.implode(',',$keys).') VALUES ('.implode(',',$vals).')');
  • return mysql_insert_id($this->link);
  • }
  • /**
  • * Modifie des données dans la base.
  • *
  • * @param String $into table où modifier les données
  • * @param Array $data tableau contenant les données (1 ligne = 1 champ)
  • * @param String $conditions conditions permettant la sélection des enregistrements à modifier
  • */
  • function update($into, $data, $conditions='1'){
  • foreach($data as $k => $v)
  • $modifications[] = $k.'='.$this->quote_smart($v);
  • $this->query('UPDATE '.$this->prefix.$into.' SET '.implode(',',$modifications).' WHERE '.$conditions);
  • }
  • /**
  • * Supprime des données dans la base.
  • *
  • * @param String $from table où supprimer des données
  • * @param String $conditions conditions permettant la sélection des enregistrements à supprimer
  • */
  • function delete($from, $conditions){
  • $this->query('DELETE FROM '.$this->prefix.$from.' WHERE '.$conditions);
  • }
  • /**
  • * Vide une table.
  • *
  • * @param String $table table où supprimer des données
  • */
  • function truncate($table){
  • $this->query('TRUNCATE TABLE '.$this->prefix.$table);
  • }
  • /**
  • * Effectue une requête.
  • *
  • * @param String $requete Requete SQL
  • */
  • function query($requete){
  • $r = mysql_query($requete, $this->link)
  • or die($this->template[0].'<b>Error in the query : </b><pre>'.$requete.'</pre>'
  • .'<b>MySQL answered : </b><p>'.mysql_error().'</p>'.$this->template[1]);
  • return $r;
  • }
  • /**
  • * Incrémente ou décrémente une variable.
  • *
  • * @param String $table table subissant la modification
  • * @param String $champ variable à incrémenter/décrémenter de $n
  • * @param int $n delta à appliquer à la variable $champ
  • * @param String $conditions conditions permettant la sélection des enregistrements dont il faut modifier cette variable
  • */
  • function delta($table, $champ, $n, $conditions){
  • $delta = $n>0 ? "+$n" : "-$n";
  • $this->query('UPDATE '.$this->prefix.$table.' SET '.$champ.'='.$champ.$delta.' WHERE '.$conditions);
  • }
  • /**
  • * Compte les lignes d'une ou plusieurs tables, selon des conditions ou non.
  • *
  • * @param String $tables tables dans lesquelles on compte
  • * @param String $conditions conditions de comptage
  • */
  • function count($tables, $conditions='1'){
  • $r = $this->query('SELECT COUNT(*) FROM '.$this->list_prefix_tables($tables).' WHERE '.$conditions);
  • return mysql_result($r,0,0);
  • }
  • /**
  • * Préfixe les tables en paramètre
  • *
  • * @param Array $tables les tables à préfixer
  • * @return Array les tables préfixées
  • */
  • function list_prefix_tables($tables){
  • if(is_array($tables)){
  • foreach($tables as $t)
  • $tablesP[] = $this->prefix.$t;
  • return implode(',',$tablesP);
  • }
  • else
  • return $this->prefix.$tables;
  • }
  • /**
  • * Protège la variable
  • * @author PHP.NET
  • *
  • * @param String $value la variable à protéger
  • * @return String la variable protégée
  • */
  • function quote_smart($value){
  • if(get_magic_quotes_gpc())
  • $value = stripslashes($value);
  • if(!is_numeric($value))
  • $value = "'".mysql_real_escape_string($value)."'";
  • return $value;
  • }
  • /**
  • * Modifie la template d'affichage des erreurs
  • *
  • * @param String $begin le code précédant l'erreur
  • * @param String $end le code suivant l'erreur
  • */
  • function set_template($begin='', $end=''){
  • $this->template[0] = $begin;
  • $this->template[1] = $end;
  • }
  • }
  • ?>
<?php
/**
 * Classe d'abstraction de base de données MySQL.
 * @version 2.1
 * @php 4
 * @author Antoine Rousseau - http://mout.fr/
 */

class BDD {
   var $host;
   var $user;
   var $pass;
   var $db;
   var $link;
   var $template;
   var $prefix;
   
   /**
    * Instancie un objet BDD, se connecte au SGBD spécifié, 
    * et sélectionne la base spécifiée.
    * 
    * @param String $base la base de données
    * @param String $host le serveur
    * @param String $user le login de connexion au SGBD
    * @param String $pass le mot de passe de connexion au SGBD
    * @param String $prefix préfixes des tables, par défaut aucun
    */
   function BDD($base, $host, $user, $pass, $prefix=''){
      $this->host = $host;
      $this->user = $user;
      $this->pass = $pass;
      $this->db = $base;
      $this->prefix = $prefix;
      $this->template = array(0=>'',1=>'');
      //connexion au SGBD :
      $this->link = mysql_connect($this->host, $this->user, $this->pass)
         or die($template[0].'Error connecting to "'.$this->host.'":<pre>'.mysql_error().'</pre>'.$template[1]);
      //sélection de la base de données ("use") :
      mysql_select_db($this->db, $this->link)
         or die($template[0].'Error selecting "'.$this->db.'" database:<pre>'.mysql_error().'</pre>'.$template[1]);
   }
   
   /**
    * Sélectionne des enregistrements.
    * 
    * @param String $fields champs à retourner (SELECT, peut être '*')
    * @param String $tables table(s) à lire (FROM)
    * @param String $conditions critères de filtrage (WHERE)
    * @param String $order ordre de tri (par défaut par ordre croissant)
    * @param int $limit limite du nombre de résultats renvoyés, par défaut aucune limite
    * @return Array tableau contenant les enregistrements sélectionnés (1 enregistrement = 1 ligne)
    */
   function select($fields, $tables, $conditions='1', $order='', $limit=0){
      $requete = 'SELECT '.$fields.' FROM '.$this->list_prefix_tables($tables).' WHERE '.$conditions;
      if(!empty($order))
         $requete.= ' ORDER BY '.$order;
      if(!empty($limit) && $limit>0)
         $requete.= ' LIMIT '.$limit;
      $q = $this->query($requete);
      $t = array();
      while($r = mysql_fetch_array($q, MYSQL_ASSOC))
         $t[] = $r;
      return $t;
   }
   
   /**
    * Insert des données dans la base.
    * 
    * @param String $into table où insérer les données (INTO)
    * @param Array $data tableau contenant les données (1 ligne = 1 champ)
    */
   function insert($into, $data){
      foreach($data as $k => $v){
         $keys[] = $k;
         $vals[] = $this->quote_smart($v);
      }
      $this->query('INSERT INTO '.$this->prefix.$into.' ('.implode(',',$keys).') VALUES ('.implode(',',$vals).')');
      return mysql_insert_id($this->link);
   }
   
   /**
    * Modifie des données dans la base.
    * 
    * @param String $into table où modifier les données
    * @param Array $data tableau contenant les données (1 ligne = 1 champ)
    * @param String $conditions conditions permettant la sélection des enregistrements à modifier
    */
   function update($into, $data, $conditions='1'){
      foreach($data as $k => $v)
         $modifications[] = $k.'='.$this->quote_smart($v);
      $this->query('UPDATE '.$this->prefix.$into.' SET '.implode(',',$modifications).' WHERE '.$conditions);
   }
   
   /**
    * Supprime des données dans la base.
    * 
    * @param String $from table où supprimer des données
    * @param String $conditions conditions permettant la sélection des enregistrements à supprimer
    */
   function delete($from, $conditions){
      $this->query('DELETE FROM '.$this->prefix.$from.' WHERE '.$conditions);
   }
   
   /**
    * Vide une table.
    * 
    * @param String $table table où supprimer des données
    */
   function truncate($table){
      $this->query('TRUNCATE TABLE '.$this->prefix.$table);
   }
   
   /**
    * Effectue une requête.
    * 
    * @param String $requete Requete SQL
    */
   function query($requete){
      $r = mysql_query($requete, $this->link)
         or die($this->template[0].'<b>Error in the query : </b><pre>'.$requete.'</pre>'
               .'<b>MySQL answered : </b><p>'.mysql_error().'</p>'.$this->template[1]);
      return $r;
   }
   
   /**
    * Incrémente ou décrémente une variable.
    * 
    * @param String $table table subissant la modification
    * @param String $champ variable à incrémenter/décrémenter de $n
    * @param int $n delta à appliquer à la variable $champ
    * @param String $conditions conditions permettant la sélection des enregistrements dont il faut modifier cette variable
    */
   function delta($table, $champ, $n, $conditions){
      $delta = $n>0 ? "+$n" : "-$n";
      $this->query('UPDATE '.$this->prefix.$table.' SET '.$champ.'='.$champ.$delta.' WHERE '.$conditions);
   }
   
   /**
    * Compte les lignes d'une ou plusieurs tables, selon des conditions ou non.
    * 
    * @param String $tables tables dans lesquelles on compte
    * @param String $conditions conditions de comptage
    */
   function count($tables, $conditions='1'){
      $r = $this->query('SELECT COUNT(*) FROM '.$this->list_prefix_tables($tables).' WHERE '.$conditions);
      return mysql_result($r,0,0);
   }
   
   /**
    * Préfixe les tables en paramètre
    * 
    * @param Array $tables les tables à préfixer
    * @return Array les tables préfixées
    */
   function list_prefix_tables($tables){
      if(is_array($tables)){
         foreach($tables as $t)
            $tablesP[] = $this->prefix.$t;
         return implode(',',$tablesP);
      }
      else
         return $this->prefix.$tables;
   }
   
   /**
    * Protège la variable
    * @author PHP.NET
    * 
    * @param String $value la variable à protéger
    * @return String la variable protégée
    */
   function quote_smart($value){
      if(get_magic_quotes_gpc())
         $value = stripslashes($value);
      if(!is_numeric($value))
         $value = "'".mysql_real_escape_string($value)."'";
      return $value;
   }
   
   /**
    * Modifie la template d'affichage des erreurs
    * 
    * @param String $begin le code précédant l'erreur
    * @param String $end le code suivant l'erreur
    */
   function set_template($begin='', $end=''){
      $this->template[0] = $begin;
      $this->template[1] = $end;
   }
   
}
?>



 Historique

03 juin 2006 17:27:06 :
Ajout de : return mysql_insert_id($this->link); dans BDD::insert()
06 juin 2006 04:12:45 :
Bon, j'ai commencé à corriger quelques détails avec vos conseils, mais il me reste encore la gestion des erreurs... une idée ? Pour le fait que select() renvoie un tableau, je le laisse, même si ça implique souvent un doublement de lecture des lignes de résultat... a moins que vous n'ayez là aussi une idée :)
11 décembre 2006 15:26:24 :
antispam

 Sources du même auteur

Source avec Zip MINI LISTE GÉNÉRIQUE AFFICHANT UNE TABLE MYSQL ET PERMETTANT...
Source avec Zip MINI LISTE DE COURSES SIMPLE MAIS EFICACE EN UN SEUL SCRIPT ...
LISTE DES ANNIVERSAIRES POUR LES N PROCHAINS JOURS, DANS L'O...
MINI PARSER DE LOG QUAKE 3 (BASEQ3/GAMES.LOG) : MAP ET SCORE...
Source avec Zip Source avec une capture BASE DE DONNÉES DE FICHIERS : LISTAGE ET AJOUT MYSQL, ET REC...

 Sources de la même categorie

Source avec Zip CLASS PHP :: REQUÊTES MYSQL par devgoneti
Source avec Zip Source avec une capture CONVERTIR BASE FIREBIRD EN MYSQL par castelfrederic29
Source avec une capture SQL/EXE EXECUTEUR DE REQUETTES SQL par enokbyreal
Source avec Zip ESPACE MEMBRE BASIQUE par bonhommecrea
Source avec Zip Source avec une capture MODIFICATEUR DE DONNEES DANS UNE BASE SQL AVEC LISTING DES T... par cram121

 Sources en rapport avec celle ci

CLASSE MYSQL UTILISANT LES FONCTIONS PDO par Vince66
Source avec Zip Source avec une capture DBOC - V3.1 [AJAX][PHP5] par Morphinof
Source avec Zip [PHP5.2] CLASSE PDO par hornetbzz
Source avec Zip CLASSE SQL par benjycorp
Source avec Zip Source avec une capture GÉNÉRATION DE CLASSES D'ACCÈS AUX DONNÉES À PARTIR DES TABLE... par djroulo

Commentaires et avis

Commentaire de antoine129 le 03/06/2006 17:20:32

Mais c'est quoi votre coloration syntaxique de merde sur PHPCS?!!
Vous connaissez pas :
http://fr.php.net/manual/fr/function.highlight-string.php
???

Commentaire de Mikiman le 03/06/2006 18:05:07

Parle autrement, soit content que l'on puisse partager nos sources de cette manière.
Respecte le boulot des autres avant tout

Commentaire de kankrelune le 03/06/2006 18:49:58

Tout à fait d'accord avec Mikiman... si t'es pas content Antoine vas poster ailleurs... que dirais tu si je te disais...

"Mais c'est quoi cette class bdd de merde avec du html dedans... tu sais ce que c'est que la poo : http://www.php.net/manual/fr/language.oop.php ???"

Bref c'est complètement inconstructif comme remarque... qui plus est si tu avais réfléchis ne serait ce que deux secondes tu aurais remarqué que les site code-source sont codé en asp et non pas en php... donc tu peux toujours courrir avec ton highlight_string()... y a pas que le php dans la vie... .. .

Bref un commentaire qui ne me donne même pas envie de regarder la source plus que ça... .. .

@ tchaOo°

Commentaire de kankrelune le 03/06/2006 18:51:34

Au fait... met error_reporting à E_ALL dans ton php.ini à vu de nez tu devrais avoir quelques messages d'erreur... notament dans le constructeur... .. .

@ tchaOo°

Commentaire de antoine129 le 03/06/2006 18:58:46

bon ok je suis peut-être un peu brutal, mais bon, il s'agit bien d'un site dont le but principal est de partager des sources! (en l'occurence en PHP ici)
après tout j'ai bien le droit de critiquer...
et puis de là à dire que ce site est l'ultime et l'unique solution de poster gratuitement nos sources, faut arrêter... d'abord il en existe plein d'autres (j'ai poste cette source sur celui-ci car j'en avais posté d'autres ici avant), et en plus si c'est gratuit c'est pas financé par leur bon coeur, mais plutôt par la pub !
enfin, à propos de la POO, c'est pas parce que ça existe, que c'est à la mode (certes c'est propre, pratique tout ce que vous voulez), mais là le seul html que je pond ce sont les erreurs, et après tout c'est une classe standalone donc bon... la POO...
et la source je la met pas pour que tout le monde la télécharge, si elle ne vous intéresse pas je vais pas en mourir!!!

Commentaire de antoine129 le 03/06/2006 18:59:52

heuu je n'ai aucun message d'erreur...
qu'est-ce qui te choque?  :-S

Commentaire de Andrei2006 le 03/06/2006 19:13:35

"Mais c'est quoi votre coloration syntaxique de merde sur PHPCS?!!"

>Au risque de me faire engueuler à mon tour, je trouve qu'Antoine a raison et qu'il faut mettre Geshi. Mais comme CS c'est du ASP... il faut en faire un nouveau. Parce que la colorisation c'est de la m***e pour le moment :)

Commentaire de antoine129 le 03/06/2006 19:16:50

merci :)
avec 5 espaces publicitaires par page, vous nous devez bien ça phpcs ^^

Commentaire de malalam le 03/06/2006 19:36:51 administrateur CS

Antoine129 => si tu n'es pas content, personne ne t'oblige à venir ici.  Et comme le souligne andrei2006, c'est effectivement de l'asp. Ensuite, j'aimerais vous voir coder un CS, moi, avec autant de sites pour des langages différents, le tout unifié, et faire uen coloration parfaite pour chaque langage. Et puis satisfaire quelques 670000 membres en même temps.

Non sérieux, j'adore...vous râlez après un site que VOUS n'avez pas fait, sur lequel VOUS trainez, qui ne VOUS coûte rien, et qui VOUS apporte moultes codes, et une aide que je juge de qualité dans les forums, et ce sur un beau paquet de langages.
Gratuit.
Et ça râle quand même...?
Je n'ai rien contre les critiques, mais justifiées, et en y mettant la forme.

Ca ne te plait pas que ce soit financé par la pub ? ben tien...t'as raison. Nix devrait tout sortir de sa poche, juste pour faire plaisir à quelques uns de la communauté qui ronchonnent pour un oui ou pour un non.

Au cas ou vous ne le sauriez pas, CS est gratuit, développé à titre gratieux, amélioré à titre gratieux, administré, modéré à titre gracieux. Pourquoi ? Par passion, par envie de donner à la communauté. A côté, ce sont des gens qui bossent, qui ont une vie en dehors! Et vous trouvez quand même moyen de parler de leur travail comme ça ?
Non, mais franchement...y a pas à dire, le respect se perd.

Antoine129, on ne te doit rien. Mais alors, rien de rien. CS est une histoire de passion. Et tu n'as aucun droit de te comporter de cette manière.

Montre moi ton site, aussi bien foutu que CS -malgré ses défauts, il en a, EVIDEMMENT! et l'équipe essaye de l'améliorer tous les jours -...montre moi si tu donnes autant à la communauté. Montre moi que toi, tout ce que tu fais est parfait, mieux que ce qui est fait ici, plus gratuit, montre moi que toi, tu payerais de ta poche pour donner à la communauté.

Alors ouais, je suis comme Kankrelune, franchement écoeuré, et aucune envie de mater ta source. Qui doit être parfaite, de toutes manières, je suppose.

Et je la laisse, avec ton commentaire. Les gens jugeront.

Un admin de CS écoeuré.

Commentaire de antoine129 le 03/06/2006 19:55:51

OK j'y met pas la forme, je voulais juste critiquer la coloration du code, j'ai le droit, non? J'ai pas critiqué gratuitement que je sache?! Certes je le redis, j'y ai pas mis la forme... personne n'est parfait, n'est-ce pas ;-)
Je n'ai jamais critiqué CS, d'ailleurs je serais pas là sinon...
Mais bon puisque tout le monde le prend si mal, je vais aller voir ailleurs, et puis comme vous avez des "670000 membres", ça devrait rien changer :)

Commentaire de FhX le 03/06/2006 19:58:13

+100 pour Malalam...

A ceci près que moi, j'ai maté son code... et que faire de la POO en PHP4, ca reste de la POO merdique :/
Ensuite :

"#  $q = $this->query($requete);
# $i = 0;
# $t = array();
# while($r = mysql_fetch_array($q, MYSQL_ASSOC)){
# $t[$i] = $r;
# $i++;"
Beurk...
$t = array();
while ( $data = mysql_fetch_array($q, MYSQL_ASSOC) ) {
    $t[] = $data;
}

Pas besoin de se faire chier avec $i ici :)

Un gros manque dans ta classe quand même ==> mysql_real_escape_string()//mysql_escape_string().

Commentaire de FhX le 03/06/2006 20:00:00

J'ai oublié... y'a aucune gestion de typage des variables que tu transmets.

Si tu fais un insert d'INT en mettant des ' ' dans ta requete SQL sur un champ INT... attention au risque !
La chose est également vrai à l'inverse !

Commentaire de antoine129 le 03/06/2006 20:01:55

humm je vais potasser tout ça, merci :)

Commentaire de momoxe le 03/06/2006 21:34:48

Antoine129, saches que MALALAM a raison.
Plein de choses sont faites ici pour vous, gratuitement, et de plus, on ne vous demande rien en retour.
Que demander de plus?
Il y a une communauté, une équipe soudée, et une bonne ambiance, alors que demander de plus?
Si tu n'est pas content, fais ton phpcs mais je doute qu'il soit aussi bien que celui-ci.
Personnellement, je pense que le seul site communautaire qui arrive a la cheville de codes-sources soit sourceforge.
Voila, c'est mon avis.
Bonne soirée a ceux qui respectent le travail des admins de codes-sources.

Commentaire de antoine129 le 03/06/2006 21:37:03

que CS soit populaire OK, mais c'est pas une raison pour ne pas l'améliorer et donc rejeter les critiques.
et le comparer à Sourceforge... hahaha!

Commentaire de momoxe le 03/06/2006 21:48:30

Qui a dit que CS n'était jamais amélioré?
Les forums Cs viennent d'être refaits a neuf?
Et nix est sans cesse en train de refaire des trucs...
Certes, tu as un an d'ancienneté, mais as tu regardé les nouveatés ou les as tu constatées?
Ce n'est pas le fait d'avoir fait l'IUT d'orsay qui fait que tu es superieur avec tes connaissances et que cela te permet de critiquer gratuitement le travail bénévole des admins CS.
@+

Commentaire de antoine129 le 03/06/2006 21:55:48

haha je savais pas que l'IUT d'Orsay me faisait paraitre supérieur ^^
je pensais plutôt au contraire mais bon, tant mieux :D
bref aucun rapport. m'enfin au moins c'est bien tu as appris à lire un profil utilisateur.
bon sinon, je n'ai encore une fois jamais dis que CS ne s'améliorait pas, je disais juste que vous n'acceptiez pas ma remarque qui permettrait de l'améliorer sur ce point, qui me semble important car c'est une des principales fonctionnalités du site que de montrer des codes sources. si on est obligé de les copier coller dans un éditeur de texte pour que ça soit lisible, je trouve ça dommage et préfère le dire que de me taire... je critique quoi! mais ça n'enlève rien aux autres fonctionnalités du site!
je suis conscient que c'est votre passion, que vous y passez du temps, etc, et c'est très bien, mais acceptez les remarques!

Commentaire de momoxe le 03/06/2006 22:01:06

Si ca ne te convient pas le colorateur de nix, fais le même en asp et soumets le lui!
On verra de quoi tu es capable :p
@+

Commentaire de antoine129 le 03/06/2006 22:04:32

j'y ai pensé, mais je connais pas l'ASP :D
même si c'est proche du PHP, je n'ai jamais essayé et je n'ai pas de serveur pour faire tourner de l'ASP :)

Commentaire de Nurgle le 03/06/2006 22:22:08 administrateur CS

Bonjour tout le monde,

1. CodeS-SourceS n'est pas fait en ASP ni en PHP mais en ASP.NET !

2. Vous pouvez critiquer CodeS-SourceS ou critiquer ceux qui critiquent CodeS-SourceS, mais bon je vous le dis : l'équipe CS accepte très bien les remarques, il y a même une section du forum qui est maintenant dédié à toutes les améliorations que vous désireriez voir dans CS.

3. Antoine129, plutôt que de critiquer le colorateur syntaxique actuel, tu aurais pû aller là bas pour demander de l'améliorer (je suis d'accord, au final ça revient au même, mais c'est quand même mieux quand c'est demandé gentillement  !)

4. L'amélioration du moteur de coloration syntaxique fait partit de la (longue) liste de choses qui pourraient être envisagées dans un avenir plus ou moins proche, donc, eh bien, il faut attendre un peu... :p

Sur ce, A++
Nurgle

Commentaire de antoine129 le 03/06/2006 22:28:36

ok :)

Commentaire de malalam le 04/06/2006 10:54:36 administrateur CS

Je viens pas lgtmps le week-end, alors j'en profite pour faire long ;-)

Antoine129 => ce qui m'a profondément énervé et écoeuré, c'est ta façon de dire les choses. Dire que CS n'accepte pas les critques est faux. J'ai bien précisé que ce qui m'avait géné, c'était la forme. Pas le fond. Je suis le premier à dire que la coloration syntaxique a de sérieux ratés. Mais quand on est un développeur, on se rend vite compte de ce qu'est CS : une énorme usine! Et on ne fait pas évoluer une énorme usine comme on fait évoluer un code de 200 lignes (ou 169). Il faut de la patience, des priorités, de l'organisation.
je ne fais pas partie de l'équipe de dév, je suis plutôt un spécialiste du PHP que de l'ASP.NET (merci Nurgle, et bienvenue, au passage, vu que j'ai rien mis sur le board :-) ).  Mais je suis conscient du fait que c'est du gros boulot bien lourd, CS.
Et je pense, Antoine, que tu devrais l'être aussi.
Il est clair que CS fonctionne mieux avec IE qu'avec Firefox. Et il est clair que les dév ASP et cie utilisent probablement plus IE que Firefox, alors que c'est sans aucun doute l'inverse pour les dév PHP. Bref : copie colle ce code à partir d'IE, tu verras que ça fonctionne très bien.
Et tu verras aussi que dans quelques temps, ça marchera aussi avec FF, ou Opera. Et que la coloration syntaxique sera meilleure. Et qu'il y aura des tas de fonctionnalités en plus. Bref, CS est en constante évolution. Et si tu as des remarques, des critiques à faire, fais les...mais en respectant le travail des bénévoles qui développent CS, c'est un minimum.

Je ne pense pas que tu apprécierais que je descende ton code en utilisant ton vocabulaire et ton phrasé...je pense que tu préfèrerais des critiques constructives et faîtes avec tact.

Et bnon, puisque le tout s'est calmé un peu depuis hier matin...ok, je critique ton code, à ma manière. Sans reprendre ce qu'en dit FhC (choses avec lesquelles je suis néanmoins d'accord):
- je ne pense pas que créer dees méthodes générant la requête soit une bonne chose. Ca limite sérieusement les possibilités. Si je veux faire un SELECT ... JOIN...ON...GROUP BY... je fais comment  avec tes méthodes ? Tu n'autorises que des requêtes extrèmement simples.
- tu stockes un lien de connexion, mais tu ne stockes pas la ressource renvoyée par le query (). Ce qui est très dommage. Notamment, tu utilises du coup un nouveau select sur une table, avec un count (*) pour compter des lignes; pourquoi pas un num_rows () sur une requêtes déjà efféctuée...?
- je ne suis pas non plus pour le fait de retourner les résulatst d'une requête sous forme de tableau. Pourrquoi ? parce que tu parcours une fois te requêtes avec un fetch_array (), et que tu es obligé de parcourir une 2ème fois ce résultat, en dehors de ta classe, pour pouvoir exploiter le tableau retourné. Bref, tu fais 2 boucles à chaque fois, quand 1 suffirait dans la plupart des cas, c'est un gâchis de ressources.
- tu ne gères pas correctement les erreurs. Un or die () n'est pas approprié dans une classe, à mon sens encore une fois. Les erreurs, on les intercepte, on les gère, mais on ne stoppe pas l'exécution d'un script. Pas en prod en tous cas. Ca n'est pas franchement approprié de laisser voir à des utilisateurs une erreur mysql_error () sur une page, avec un script stoppé...ca fait vraiment amateur.

Commentaire de stu76 le 04/06/2006 15:26:21

Salut à tous,

Moi perso la couleur j'en n'ai rien f.... Je viens pas sur CS pour ca, lol. On ne trouveras jamais une couleur qui va plaire aux quelques 690 000 membres. Antoine129, pour moi tu t'avance fort, fais un site qui à autant de membre et la même qualité de que celui-ci et puis tu parleras de celui-ci,lol.
Je suis à 100% d'accord avec Malalam, pour le reste je pense qu'il faut quand même se rappeler que c'est un site de prog, pas de design. Et qui puis est qui est administrer par des bénévoles passionnées, je crois que comme dit Nurgle l'équipe accepte la critique, mais elle doit se faire au bonne endroit et de la bonne manière.

++

Stu76

Commentaire de wizard512 le 04/06/2006 19:06:39

Vraiment ils en a qui se prennent la tête pour rien et en plus qui parle mal
Soyer cooooool :)
On est la pour partager, débatre et non pour s'engueuler, non ?
On partage le savoir et on aprend au autre et a soie même.
Quelque soit la couleur ( du code )non ?

Autre chose : Prochainement il se peux que je poste une source similaire

Commentaire de antoine129 le 04/06/2006 19:09:32

J'ai dis O.K.!
C'est bon, vous avez fini de vous acharner?!!
Merci FhX et malalam pour les conseils :)

Commentaire de wizard512 le 04/06/2006 19:15:15

Je ne macharne pas j'ai dis soyon cooool....
alors justement retons cool    :)

Commentaire de Evangun le 04/06/2006 19:36:20

Hello, je suis d'accord avec Krankelune et Malalam, et je sais ce que c'est de se faire critiquer ingratement sur un gros travail bénévole.
"si c'est gratuit c'est pas financé par leur bon coeur, mais plutôt par la pub" : les milliers d'heures de codage qu'a nécessité phpcs, elles, ont été offertes de bon coeur par Nix et les autres. Va demander un devis à une boîte pour développer un site comme celui-ci et tu auras une idée chiffrée (et sous-evaluée) de ce qu'ils ont offert à la communauté... tu peux déjà aligner les billets, laisse-moi te le dire...

Au niveau de la source :  je trouve que les gens ont tort de noter ta source pour d'autres raisons que la qualité du code et son utilité. Je ne te mettrai pas 1. Mais perso je pense que personne ne l'utilisera, elle est trop simple pour qu'on ne la refasse pas en 3 mn et trop confuse pour qu'on perde du temps à la lire. Je ne parlerai pas du html et des autres détails qui me gênent aussi... Mais indente correctement ton code en tt cas, ça pourrait déjà aider. Au final, c'est le genre de script auquel je n'arrive pas à mettre de note, je pense que même si c'est pas trop trop mal fait en soi, ça encombre juste le site.
à+

Commentaire de TheSin le 04/06/2006 20:23:38

moi aussi jpeux critiquer rapide ?
Antoine, tu dis:
"Ajout de : return mysql_insert_id($this->link); dans BDD::insert()"
Seulement là, ton BDD::insert() c'est de l'espace de nom, et on a pas de variables globales de classe dans un espace de nom, mais ... que des fonctions ^^
Bref, c'est plutot BDD -> insert() ou $this -> insert() ;-)

Au passage, CS c'est bien, c'est vrai que le colorisateur syntaxique a des râtés, mais faut pas engueuler les auteurs quand on ne connait pas ASP dot Net, ou alors faut lui proposer un équivalent dans son langage, et pas en php (oui, y'a bien écrit aspx a la fin de la page dans l'URI ;-))

Donc apprend un peu aussi les définitions du PHP et la différence entre classes et espaces de noms ;-)

Commentaire de FhX le 04/06/2006 20:53:14

"Donc apprend un peu aussi les définitions du PHP et la différence entre classes et espaces de noms ;-)"
Je te renvoi la pareil au passage...

"Seulement là, ton BDD::insert() c'est de l'espace de nom, et on a pas de variables globales de classe dans un espace de nom, mais ... que des fonctions ^^"
En francais ca donne quoi concrétement ?
Je peux très bien faire : $result = BDD::insert(), le problème n'est pas la. C'est juste que cette méthode est utilisé pour un emploi statique de méthode de classe.

"Bref, c'est plutot BDD -> insert() ou $this -> insert() ;-)" A partir du moment ou tu instances ta classe ou dans ta classe même.
Mais je peux faire ca aussi :
$link = BDD::connect($host, $user, $pass);
BDD::selectDB($dbname, $link);
$query = BDD::query($sql, $link);
$value = BDD::insert($link);

Ca marche tout aussi bien. Vive l'opérateur de portée !


Au passage, on dit pas fonction de classe, mais méthode de classe.
Merci :)

Commentaire de TheSin le 05/06/2006 00:14:10

a partir du moment ou tu met l'opérateur :: ce n'est plus un objet mais un espace de noms.
concrètement, ca signifie que ta classe ne possède que des méthodes et non des variables.
il est vrai que j'ai ptet' pas parlé francais, désolé, j'étais à peine réveillé.
si tu mettais un reporting_errors a E_ALL et display_errors à On, tu verrais alors que ca poserais problème.
Regarde, en faisant ceci :
$link = BDD::connect($host, $user, $pass);
regarde ta méthode, elle utilise le mot clé $this, réservé aux classes, il est donc impossible d'utiliser la classe avec l'opérateur de l'espace de noms, car dans un espace de nom, le mot clé $this n'existe pas (chapitre 1 des espaces de noms en php4 dans le Zend PHP Certification Study Guide).

On peut parfaitement aussi dire Fonction à la place de méthode, car le mot clé de déclaration est bien Function si je ne me trompe. De toutes facons, cela revient au même, il est vrai qu'on dit plutot méthode, mais on dit tout aussi bien fonction, sinon on écrirais Method ^^

Je souhaitais juste de corriger sur ton opérateur car a partir du moment où tu places des variables dans une classe et que tu utilise le mot clé $this, tu es obligé d'instancier ta classe en objet via un $object = new my_class;
Tandis que si tu n'a pas de variables, que tu n'utilises pas $this, là il n'y a aucun problème pour utiliser la classe comme espace de nom et donc faire par exemple $var = my_class::method();

Au passage, il y a encore une différence entre les 2 : l'objet possède un constructeur et pas l'espace de noms ;)


donc quand tu dis "Ca marche tout aussi bien. Vive l'opérateur de portée !", bin moi je dis FAUX, ça se voit que t'as pas essayé ^^

Commentaire de malalam le 05/06/2006 06:48:23 administrateur CS

Mouais, je rentrerai pas dans ce débat.
Par contre, je vais effacer les notes. Pas tant parce que je ne suis pas sûr du pourquoi de ces notes, mais simplement parce qu'elles ne sont pas justifiées par un commentaire. Donc, si les 2 auteurs veulent laisser un commentaire pour appuyer leur note, ok :-) Ils pourront revoter. Mais en attendant, je les vire (les notes hein lol)

Commentaire de twisteurwin le 05/06/2006 10:47:25

mdr, coloration syntaxique, moi j'suis fidèle au bloc note depuis toujours et pour toujours !

Commentaire de ImmortalPC le 05/06/2006 11:22:16

Salut,
comment vas tu Twisteurwin ?
J' ai jamais compris comment tu faisais pour rester avec bloc note ^^
Sinon la remarque de l' auteur de cette source n' as rien à faire ici.
Ici on poste des commentaires sur la source or la source ici ne parle pas de coloration syntaxique !
Et la façon dont c' est dit est hyper blaissante pour Nix !!

@+

Commentaire de malalam le 05/06/2006 11:56:52 administrateur CS

ON arrête de s'acharner: tout a été dit, il a bien compris le message :-)Merci.

Commentaire de FhX le 05/06/2006 12:55:28

"donc quand tu dis "Ca marche tout aussi bien. Vive l'opérateur de portée !", bin moi je dis FAUX, ça se voit que t'as pas essayé ^^"
Laisse moi le soin de bien rire.
Certes, je me suis moi aussi mal exprimé, mais je vais rentrer dans le détail cette fois.

"Mais je peux faire ca aussi :
$link = BDD::connect($host, $user, $pass);
BDD::selectDB($dbname, $link);
$query = BDD::query($sql, $link);
$value = BDD::insert($link);"
Ce qui signifie quoi ? Où tu as vu que j'utilise les noms de méthodes de sa classe ? Nul part à ce que je sache, je montrais simplement un exemple d'utilisation de l'opérateur de portée !
Je sais très bien qu'on utilise pas $this... merci de me l'avoir rappelé, j'ai pas posté des classes avec instance unique/multiple pour rien !

"On peut parfaitement aussi dire Fonction à la place de méthode, car le mot clé de déclaration est bien Function si je ne me trompe."
Evidement que c'est Function ... ca découle de PHP4 ! Hors on dit une méthode de classe... tout comme on dit une propriété de classe et non une variable de classe !

"Au passage, il y a encore une différence entre les 2 : l'objet possède un constructeur et pas l'espace de noms ;)"
Jdormirai moins con ce soir :)


T'as vu Malalam ? Jviens d'apprendre les classes PHP4 en même pas 1 seul post :p


Ps: Ah oui, pour les méthodes de classes.. voila pourquoi on dit méthode de classe et pas fonction de classe :
http://fr.php.net/manual/fr/function.method-exists.php
http://fr.php.net/manual/fr/function.function-exists.php

Jvoulais dire autre chose aussi, mais je sais plus quoi ;)

Commentaire de antoine129 le 05/06/2006 12:58:03

bon ben j'ai ptet pondu un code pourri mais au moins il génère plein de commentaires instructifs :D

Commentaire de malalam le 05/06/2006 14:01:35 administrateur CS

C'est le moins qu'on puisse dire!

FhX => je n'interviens pas, lol, débrouillez-vous ;-) Pi quoi, tu fais que des classes PHP5 super évoluées, si ça se trouve t'es nul en POO PHP4 hein lol ;-)
The Sin => je crois que tu devrais lire plus attentivement ce que dit FhX. Je ne suis pas sûr que vous soyez en désaccord, mais tu corriges des choses qu'il n'a pas exprimées... Quant à la sémantique, heu...je suis plutôt d'accord avec FhX. On appelle bien ça une méthode de classe. En tous cas, je n'ai jamais entendu autre chose...

Commentaire de Nurgle le 05/06/2006 14:13:00 administrateur CS

Bon, pour terminer cette histoire de méthode, la réponse donnée par FhX à TheSin est pas mal, mais elle n'est pas assez générale :

Les classes possèdent bien des méthodes, et parmis ces méthodes, il y a les fonctions.
Et comme dans certains langages de programmation il n'y qu'un type de méthode (les fonctions) et que dans d'autres il y en a deux (les fonctions et les procédures), et bien, les gens ont tendance à mélanger "méthode" et "fonction" ! Attention c'est parfois différent !

voilà, c'est tout ce que j'avais à dire (c'est quand même le 38e commentaire sur cette source !) lol

Commentaire de FhX le 05/06/2006 14:13:51

"FhX => je n'interviens pas, lol, débrouillez-vous ;-) Pi quoi, tu fais que des classes PHP5 super évoluées, si ça se trouve t'es nul en POO PHP4 hein lol ;-)"
Ouais bah, on peut pas être bon partout :p

"Je ne suis pas sûr que vous soyez en désaccord, mais tu corriges des choses qu'il n'a pas exprimées..."
Entièrement d'accord, on exprime la même chose avec des mots différents :)

Commentaire de stu76 le 05/06/2006 14:46:14

Salut tout le monde,

Débat très animé pour une couleur, lol. Bon comme dit Malalam tout à été dit sur le sujet.
Moi je voudrais juste mourir moins con si possible. Donc j'ai une question vous parler souvent de classe, fonction, méthod, ... Quelle est la différence et leurs utilités, si quelqu'un pouvait me m'informer sur le sujet se serait sympa ou me donner un lien qui pourrait m'être utile style un tuto ou autre.

Merci à tous

++

Stu76

PS: Courrage Antoine129, bcp ton un peu chambré, mais il sont sympa et pas rencunié.

Commentaire de jlgrall le 05/06/2006 16:50:55

Pour la coloration syntaxique automatique, allez voir ce lien qui est très intéressant:
http://www.dreamprojections.com/syntaxhighlighter/Default.aspx

Commentaire de antoine129 le 05/06/2006 17:27:24

bah voilà, parfait :)
en plus c'est javascript donc calculs côté client :P
CS, c'est ce qu'il vous faut!

Commentaire de kankrelune le 05/06/2006 18:39:36

[quote=antoine129]heuu je n'ai aucun message d'erreur...[/quote]

Dans ton constructeur d'où vient la variable $template ?

Sinon comme dit malalam les or die ne sont pas adaptés... il ne devrait pas y avoir de html dans le code ta class gère mysql point barre... en cas d'erreur ta class stock les infos dans un attribut et c'est une autre class, fonction ou bout de code qui récupère les infos et gère l'affichage de cette dernière... .. .

[quote=FhX]Un gros manque dans ta classe quand même ==> mysql_real_escape_string()//mysql_escape_string().[/quote]

+1

[quote=FhX]y'a aucune gestion de typage des variables que tu transmets.

Si tu fais un insert d'INT en mettant des ' ' dans ta requete SQL sur un champ INT... attention au risque[/quote]

+1

Après comme le dit Malalam c'est un peu trop simpliste mais tout dépend des besoins... tout le monde ne fait pas de requetes complexe avec groupement, jointure, etc... donc pour, par exemple, un petit site ça peut suffire... .. .

Je met 5/10... .. .

@ tchaOo°

Commentaire de wizard512 le 05/06/2006 21:44:14

Je note 7/10 pour les commentaires qui sont eux trés instructifs
( comme koi tu a bien faits de poster cette source )

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Formulaire avec select et update de bdd mysql [ par arnold002 ] Bonjour &#224; tous,J'ai un formulaire qui contient 2 champs de type select : classe et annee.Je veux associer chaque classe &#224; chaque ann&#233;e passage de variables de form vers bdd mysql [ par arnold002 ] Bonjour,Mon probl&#232;me n'avance pas...Mon form contient 2 champs select for($i<FONT color=#008000 s Problème affichage BD multiples [ par ekipage2 ] Bonjour,j'ai plusieurs BD : eleve / matières / et exercicesLorque l'élèv se connecte, il peut afficher la liste des exercices correspondants à sa clas Recherche mysql [ par simon0000 ] salut tous le monde ,j'ai une table mysql nom&#233;&nbsp;ecole ou il ya Retour des données d'une classe MySQL [ par Jerem_ ] Salut, Depuis ce matin, j'asseye de coter une classe MySQL pour mon site. La classe marche tr&#232;s bien quand je fait une requete INSERT, etc .. M Bug dans une double liste [ par stu76 ] Bonjour, Malalam m'a donné des infos hier sur les doubles liste, et je le remercie car ca ma été super utile. J'ai presque résolu le prob sauf que je Problème de code [ par stu76 ] Bonjour tout le monde ,Voil&#224; je planche sur un programme scolaire et j'ai un gros prob, je travaille sur un programme qui utilise trois base de d Problème d'utilisation d'une classe MySQL du site [ par tataye ] Bonjour,Je suis en train de faire des tests avec la classe SQL  de FhX (source N°33135) et je rencontre actuellement quelques difficultés.J'ai fait un appeller de fonction "interclasses" [ par DDelec24 ] Bonjour.Je suis bloqué depuis hier sur un problème pour appeller une fonction.Pour résumé:Je possède une classe mysql pour gérer tout ce qui est reque Classe Connexion.php la plus simple possible .... [ par Tartuffe245 ] Bonjour à tous,J'ai créé une classe connexion pour mon site internet et il se trouve que j'ai une erreur qui revient souvent mais je ne sais pas comme


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,530 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales