Tom's Guide > Forum > Programmation > [php] problème class POO
Mot :    Pseudo :           
 

Bonjour,

Depuis peu je me met à la POO. J'ai récemment écrit un script (qui gère 2 tables: conso1 et conso2), mais j'ai beau cherché et tout essayer je tombe toujours sur une page blanche :S
Voici le code en question, il est scindé en plusieurs page dont la page principal: Résultat.php

  • resultat.php
Code :
  1. <?php
  2. function __autoload($class_name) {
  3.     require_once $class_name . '.class.php';
  4. }
  5. $preparesql = new PrepareSql();
  6. echo 'nombre de criteres de recherche:'.$preparesql->where->i;
  7. $db0 = new SQLiteDatabase('', '', '', '');
  8. echo $preparesql;
  9. $resultat = $db0->query($preparesql);
  10. $rows = $resultat->numFields();
  11. if($rows == 0) {
  12.     echo 'Aucun consommateurs trouvés';
  13. }
  14. else{
  15.     if ($rows == 1) {
  16.         echo '1 consommateur trouvé';
  17.     }
  18.     else {
  19.         echo $rows,' consommateurs trouvés';
  20.     }
  21.     ?>
  22.     <table class="sortable">
  23.     <tr>
  24.     <th>Titre</th>
  25.     <th>Prenom</th>
  26.     <th>Nom</th>
  27.     <th>Age</th>
  28.       <th>Ville</th>
  29.     <th>Code Postal</th>
  30.       <th>Telephone</th>
  31.       <th>Portable</th>
  32.       <th>Email</th>
  33.       <?php
  34.       // si plusieurs tables
  35.       if($preparesql->table->many)
  36.     {
  37.         ?>
  38.         <th>Situation</th>
  39.         <th>Niveau Scolaire</th>
  40.         <th>Revenus du m&eacute;nage</th>
  41.         <th>Revenus perso</th>
  42.         <th>Profession</th>
  43.         <th>Nombre d'enfants</a></th>
  44.         <th>Enfants de 0 &agrave; 5 ans</th>
  45.         <th>Enfants de 6 &agrave; 10 ans</th>
  46.         <th>Enfants de 11 &agrave; 13 ans</th>
  47.         <th>Enfants de 14 &agrave; 17 ans</th>
  48.         <th>Enfants de 18 &agrave; 25 ans</th>
  49.         <th>Enfants de 25 et + </th>
  50.         <th>Autre sujet de r&eacute;unions interess&eacute;</th>
  51.         </tr>
  52.         <?php
  53.     }
  54.     $n =0;
  55.     while ($temp = $resultat->fetch(SQLITE_ASSOC))
  56.     {
  57.           $ligne[$n] = $temp;
  58.         $n++;
  59.     }
  60.     foreach($ligne as $cle=>$valeur)
  61.     {
  62.     echo $cle.' : '.$valeur.'<br />';
  63.     }
  64. }
  65. ?>



Les Classes:

  • PrepareSql.class.php
Code :
  1. <?php
  2. /**
  3.   * Class PrepareSql
  4.   * Class permettant de preparer une requete SQL
  5.   * Params : (int) id
  6.   * Return : (objet) monObjet
  7.   **/
  8. Class PrepareSql {
  9.     public $table; // table ou s'effectue la recherche
  10.     private $select; // éléments à rechercher
  11.     private $where; // criteres de recherche
  12.     function __construct()
  13.     {
  14.         $this->table= new Table();
  15.         $this->where= new Where();
  16.         $this->select= new Select($this->table->many);
  17.         return 'SELECT '.$this->select.' FROM '.$this->table->name.$this->where->build($this->table->many);
  18.     }
  19. ?>


  • Select.class.php
Code :
  1. <?php
  2. Class Select{
  3.     private $select;
  4.     function __construct($many)
  5.     {
  6.         $this->select=    'titre, prenom, nom, naissance, ville, postal, telephone, portable, email';
  7.         if($many)
  8.         {
  9.             $this->select.= 'situation, scolaire, revenus_menage, revenus_perso, profession, enfants, membre1, membre2, memebre3, memebre4, membre5, membre6, autre';
  10.         }
  11.         return $this->select;
  12.     }
  13. }
  14. ?>



  • Table.class.php
Code :
  1. <?php
  2. // class permettant la construction de la name qui contient le nom des tables à disposer plustard dans la requete
  3. class Table{
  4.     public $name;
  5.     public $many;
  6.     function __construct()
  7.         {
  8.         if(!empty($_POST['situation']) OR !empty($_POST['internet']) OR !empty($_POST['entretiens']) OR !empty($_POST['reunions']) OR !empty($_POST['sante']) OR !empty($_POST['beaute']) OR !empty($_POST['alimentaire']) OR !empty($_POST['revenus']) OR !empty($_POST['enfant']) OR !empty($_POST['membre1']) OR !empty($_POST['membre2']) OR !empty($_POST['membre3']) OR !empty($_POST['membre4']) OR !empty($_POST['membre5']) OR !empty($_POST['profession']))
  9.             {
  10.                 $this->name='conso1, conso2';
  11.                 $this->many=TRUE;
  12.             }
  13.         else
  14.             {
  15.                 $this->name='conso1';
  16.                 //une seule table
  17.                 $this->many=FALSE;
  18.             }
  19.         }
  20. }
  21. ?>



  • Where.class.php
Code :
  1. <?php
  2. /**
  3.   * Class Where
  4.   * Class permettant de construire les arguments du WHERE
  5.   * Params : (boolean) $this->table->many
  6.   * Return : (string) WHERE + une liste d'arguments' || ''
  7.   **/
  8.  
  9. class Where{
  10.     public $i; // nombre d'arguments (calculé en fonction des opérateurs logiques (AND, WHERE)
  11.     function __construct()
  12.     {
  13.         $this->i = 0;
  14.     }
  15.     // on construit le WHERE: plusieurs étape: 1.build() 2.data() 3.build_arg() 4.la fonction correspondant à l'input    
  16.     public function build($many)
  17.     {
  18.         //plusieurs tables selectionnées
  19.         if($many)
  20.         {
  21.             retrurn $this->operateur_logique().'(conso1.id = conso2.id)'.$this->data();
  22.         }
  23.         //sinon il n'y a qu'une table de selectionner donc on réduit la recherche
  24.         else
  25.         {
  26.             return $this->operateur_logique().$this->data();
  27.         }
  28.     }
  29.     // fonction qui vérifie les cases à cocher pour ensuite donner accès à la creation d'un argument      
  30.     private function data()
  31.     {
  32.         foreach ($_POST as $varname)
  33.         {
  34.             //exception: pas de verification si le post est membre 1,2,3,4 ou 5
  35.           if($varname='membre1' OR $varname='membre2' OR $varname='membre3' OR $varname='membre4' OR $varname='membre5')
  36.             {
  37.                 return $this->build_arg($varname);
  38.             }
  39.             // verifie si on a bien coché la case à cocher du haut pour les champs constitués d'une case et d'un formulaire
  40.           elseif (!empty($_POST[${$varname.1}]))
  41.           {
  42.               if(!empty($_POST[$varname]))
  43.               {
  44.                   return $this->build_arg($varname); // on construit en fonction du type de formulaire
  45.               }
  46.               else
  47.               {
  48.                   echo 'Vérifiez que vous avez bien rentré une valeur dans le formulaire sous la case cochée('.$varname.')';
  49.               }
  50.           }
  51.           // pour touts les champs constitués d'une case à cocher     
  52.             elseif (preg_match('#^[a-z_]+$#i', $varname)// questionnaire_ligne entretiens... , mais pas de varname avec un nombre à la fin ex: situation1         
  53.           {
  54.               return $this->build_arg($varname);
  55.           }
  56.         }
  57.     }
  58.     private function build_arg($varname)
  59.     {
  60.         if($varname='nom' OR $varname='prenom' OR $varname='profession')
  61.         {
  62.             return $this->like($varname);
  63.         }
  64.         elseif($varname='age')
  65.         {
  66.             return $this->age();
  67.         }
  68.         elseif($varname='option_paris')
  69.         {
  70.             return $this->option_paris();
  71.         }
  72.         elseif($_POST[$varname]=='on')
  73.         {
  74.             return $this->checkbox($varname);
  75.         }
  76.         elseif(preg_match('#^[a-z_]+$]#i', $_POST[$varname]))
  77.         {
  78.             return $this->value($varname);
  79.         }
  80.     }
  81.     private function operateur_logique()
  82.     {
  83.         if($this->i=o)
  84.         {
  85.             $operateur_logique=' WHERE ';
  86.             $this->i++;
  87.         }
  88.         elseif($this->i>0)
  89.         {
  90.             $operateur_logique=' AND ';
  91.             $this->i++;
  92.         }
  93.         return $operateur_logique;
  94.     }
  95.     //fonction pour les noms et prenoms (recherche en LIKE)
  96.     private function like($varname)
  97.     {
  98.         return $this->operateur_logique().'('.$varname."LIKE '%".$_POST[$varname]."%')";
  99.     }
  100.     // fonction pour tout les values des input qui constituent un argument
  101.     private function value($varname)
  102.     {
  103.         return $this->operateur_logique().'('.$varname.'='.$_POST[$varname].')';
  104.     }
  105.     //fonction pour les checkboxs
  106.     private function checkbox($varname)
  107.     {
  108.         if($varname='membre1' OR $varname='membre2' OR $varname='membre3' OR $varname='membre4' OR $varname='membre5' OR $varname='enfants')
  109.         {
  110.             return $this->operateur_logique().'('.$_POST[$varname].'>= 1)';
  111.         }
  112.         else
  113.         {
  114.             return $this->operateur_logique().'('.$_POST[$varname].'= oui)';
  115.         }
  116.     }
  117.     // fonction pour l'age
  118.     private function age()
  119.     {
  120.         if($_POST['age2'] >= $_POST['age'])
  121.         {
  122.             // Calcul des années
  123.             private function annee($age)
  124.             {
  125.                   $today = date('Y');
  126.                   $annees = $today - $age;
  127.               }
  128.             return $this->operateur_logique().'(naissance BETWEEN'.$this->annee($_POST['age2']).' AND '.$this->annee($_POST['age']).')';
  129.         else
  130.         {
  131.             echo 'Veuillez insérer un premier age inférieur au second <br/>';
  132.         }
  133.     }
  134.     // fonction pour l'option région parisienne
  135.     private function option_paris()
  136.     {
  137.         return $this->operateur_logique().'(departement IN ('75','77','78','91','92','93','94','95'))';
  138.     }
  139. }//fin de la class Where
  140. ?>



Voila, si quelqu'un pourrai m'aider ça serai la bienvenue :)

Bonne journée

Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

Salut,

Je n'ai pas tout regardé en détails...
mais tu dis que tu as une page blanche... vu que tu fais plusieurs echo, quels sont les résultats des différents echo que tu fais au début ?

echo 'nombre de criteres de recherche:'.$preparesql->where->i;
echo $preparesql;

Ca te donne quoi ?


Et si tu as vraiment une page toute blanche, c'est que tu dois avoir une erreur qui n'est pas affichée, essaie d'afficher les erreurs en mettant error_reporting(0); au début de ta page ( http://fr.php.net/error_reporting )

------------------------------ Les dessins des seins ou les desseins des saints ?
Répondre à OmaR

On ne sait meme pas ce qui est censé s'afficher, ou quel résultat tu souhaite obtenir, donc le code c'est bien beau, mais, des informations supplémentaires serait pas de refus.

Répondre à okinou
Tom's Guide > Forum > Programmation > [php] problème class POO
Aller à :

Il y a 319 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Attention

Vous allez répondre sur un sujet resté inactif pendant plus de 6 mois.
Assurez-vous d'apporter des éléments nouveaux à la discussion avant de poursuivre.

Répondre Annuler
Liens