Votre question

[php] problème class POO

Tags :
  • Echo
  • Programmation
Dernière réponse : dans Programmation
28 Février 2009 17:18:56

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


    Les Classes:

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

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


  • Table.class.php
    1. <?php
    2.  
    3. // class permettant la construction de la name qui contient le nom des tables à disposer plustard dans la requete
    4. class Table{
    5.  
    6. public $name;
    7. public $many;
    8. function __construct()
    9. {
    10. 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']))
    11. {
    12. $this->name='conso1, conso2';
    13. $this->many=TRUE;
    14. }
    15. else
    16. {
    17. $this->name='conso1';
    18. //une seule table
    19. $this->many=FALSE;
    20. }
    21. }
    22. }
    23. ?>


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


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

    Bonne journée
  • Autres pages sur : php probleme class poo

    a c 232 L Programmation
    28 Février 2009 23:23:13

    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 )
    m
    0
    l
    1 Mars 2009 00:46:07

    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.
    m
    0
    l
    Tom's guide dans le monde
    • Allemagne
    • Italie
    • Irlande
    • Royaume Uni
    • Etats Unis
    Suivre Tom's Guide
    Inscrivez-vous à la Newsletter
    • ajouter à twitter
    • ajouter à facebook
    • ajouter un flux RSS