Requète PHP

Résolu
Bonjour,
J'ai créé une requète afin d'afficher la liste des membres, bien sur mon problème c'est que rien ne s'affiche ça aurai été trop beau.
Pouvez-vous m'expliquer d'ou peux venir mon soucie s'ils vous plait.
Merci beaucoup de pouvoir m'aider un peu.
Voici ma class
<?php
class Liste_membre_class {

    private $nom;
    private $prenom; 
    private $email;
    private $fixe;
    private $mobile;

 private $bdd;
 
 public function __construct($nom, $prenom, $email, $fixe, $mobile) {

  $this->nom       = $nom;
  $this->prenom      = $prenom;
  $this->email      = $email;
  $this->fixe       = $fixe;
  $this->mobile  = $mobile;
  
  $this->bdd    = bdd();
 }
 
    public static function ListeMembre() {
        $sql = "SELECT * FROM tb_adherent ORDER BY nom, prenom ASC";
  $requete = $this->bdd->prepare($sql);
        $requete->execute();
        $nombre_membre = ($requete->rowCount() > 0) ? $requete->rowCount() . ' Membres' : '0 membre';
        echo '<ul>';
        echo '<li style="margin-left:950px; background-color: #FFFFFF;">'.$nombre_membre.'</li>';
        echo '</ul>';
    
        while($donnees = $requete -> fetchObject('Liste_membre_class')) {
            echo '<tr>';
            echo '<td>'.$donnees->nom.'</td>';
            echo '<td>'.$donnees->prenom.'</td>';
            echo '<td>'.$donnees->email.'</td>';
            $tel1 = $donnees->fixe; $tel1 = wordwrap ($tel1, 2, ' ', 1);
            echo '<td>'.$tel1.'</td>';
            $tel2 = $donnees->mobile; $tel2 = wordwrap ($tel2, 2, ' ', 1);
            echo '<td>'.$tel2.'</td>';
            echo '</tr>';
        }
    }
}

ma page qui est censée afficher la liste des membres
<br/>

 <div id="ListeMembre">
  <table cellpadding="0" cellspacing="1">
   <tr>
    <th width="15%">Nom</th>
    <th width="15%">Prénom</th>
    <th width="36%">Email</th>
    <th width="17%">Téléphone Fixe</th>
    <th width="17%">Téléphone Mobile</th>
   </tr>
<?php
$Liste_membre = new Liste_membre_class($nom, $prenom, $email, $fixe, $mobile);
$Liste_membre->ListeMembre();
?>
  </table>
 </div>

9 réponses

  1. Bonjour
    Ca y est voilà ce que j'ai fait et ça fonctionne
    <?php
    class Liste_membre_class {
    
        private $nom;
        private $prenom;	
        private $email;
        private $fixe;
        private $mobile;
    
    	private $bdd;
    	
    	public function __construct() {
    		
    		$this->nom		= isset($_POST['nom']) ? Security::clean($_POST['nom']) : '';
    		$this->prenom	= isset($_POST['prenom']) ? Security::clean($_POST['prenom']) : '';
    		$this->email     = isset($_POST['email']) ? Security::clean($_POST['email']) : '';
    		$this->fixe		= isset($_POST['fixe']) ? Security::clean($_POST['fixe']) : '';
    		$this->mobile	= isset($_POST['mobile']) ? Security::clean($_POST['mobile']) : '';
    		
    		$this->bdd 			= bdd();
    	}
    

    Merci à vous tous.
    Cordialement
    2
    1. mince j'ai oublié l'autre methode
          public function ListeMembre() {
              $sql = "SELECT * FROM tb_adherent ORDER BY nom, prenom ASC";
      		$requete = $this->bdd->prepare($sql);
              $requete->execute();
              $nombre_membre = ($requete->rowCount() > 0) ? $requete->rowCount() . ' Membres' : '0 membre';
              echo '<ul>';
              echo '<li style="margin-left:950px; background-color: #FFFFFF;">'.$nombre_membre.'</li>';
              echo '</ul>';
          
              while($donnees = $requete->fetchObject()) {
                  echo '<tr>';
                  echo '<td>'.$donnees->nom.'</td>';
                  echo '<td>'.$donnees->prenom.'</td>';
                  echo '<td>'.$donnees->email.'</td>';
                  $tel1 = $donnees->fixe; $tel1 = wordwrap ($tel1, 2, ' ', 1);
                  echo '<td>'.$tel1.'</td>';
                  $tel2 = $donnees->mobile; $tel2 = wordwrap ($tel2, 2, ' ', 1);
                  echo '<td>'.$tel2.'</td>';
                  echo '</tr>';
              }
          }
      
      0
  2. Bonjour

    La prochaine fois, donne le message d'erreur complet, en particulier le numéro de ligne qui permet de savoir où se trouve l'erreur.

    Tu as utilisé $this dans une méthode statique, ce qui est interdit. En effet, $this désigne l'instance d'objet courante, et le mot-clé static signifie justement qu'une méthode peut être appelée sans qu'aucun objet ne soit instancié : c'est une méthode de la classe, pas des objets de cette classe.
    Voir la doc : https://www.php.net/manual/fr/language.oop5.static.php
    En fait, c'est ta méthode ListeMembre qui n'a pas de raison d'être statique.
    1
    1. Bonjour

      Mon erreur est...

      Fatal error: Using $this when not in object context in C

      Je crois comprendre que j'utilise $this en dehors d'un objet ??
      Je n'arrive vraiment pas à résoudre mon soucis.
      Ayez pitié d'un débutant
      Merci vraiment de votre aide.
      0
      1. Bonjour
        Si quelqu'un pourrait m'aider s'ils vous plait, je suis bloqué et j'aimerai bien comprendre.
        Je vous remercie
        0
        1. Bonjour
          Je te remercie "le Père".
          Maintenant j'ai cette erreur tu peux m'expliquer se que cela signifie s'il te plait.
          Je te remercie
          Warning: Missing argument 1 for Liste_membre_class::__construct() in
          

          l'erreur se situe ligne 11
          class Liste_membre_class {
          
              private $nom;
              private $prenom;	
              private $email;
              private $fixe;
              private $mobile;
          
          	private $bdd;
          	
          	public function __construct($nom, $prenom, $email, $fixe, $mobile) {
          
          		$this->nom 		    = $nom;
          		$this->prenom 	    = $prenom;
          		$this->email 	    = $email;
          		$this->fixe 	    	= $fixe;
          		$this->mobile		= $mobile;
          		
          		$this->bdd 			= bdd();
          	}
          
          0
          1. Modérateur
            Bonsoir,

            En effet, il te manque la variable bdd en argument de ta fonction construct.
            0
            1. En fait j'ai bien mis un sixième argument "$bdd" mais ça ne change rien.
              je te renvoie mes 2 fichiers si tu as un peu de temps à me consacré.
              Merci
              <?php
              class Liste_membre_class {
              
                  private $nom;
                  private $prenom;	
                  private $email;
                  private $fixe;
                  private $mobile;
              
              	private $bdd;
              	
              	public function __construct($nom, $prenom, $email, $fixe, $mobile) {
              
              		$this->nom 		    = $nom;
              		$this->prenom 	    = $prenom;
              		$this->email 	    = $email;
              		$this->fixe 	    	= $fixe;
              		$this->mobile		= $mobile;
              		
              		$this->bdd 			= bdd();
              	}
              	
                  public function ListeMembre() {
                      $sql = "SELECT * FROM tb_adherent ORDER BY nom, prenom ASC";
              		$requete = $this->bdd->prepare($sql);
                      $requete->execute();
                      $nombre_membre = ($requete->rowCount() > 0) ? $requete->rowCount() . ' Membres' : '0 membre';
                      echo '<ul>';
                      echo '<li style="margin-left:950px; background-color: #FFFFFF;">'.$nombre_membre.'</li>';
                      echo '</ul>';
                  
                      while($donnees = $requete->fetchObject('Liste_membre_class')) {
                          echo '<tr>';
                          echo '<td>'.$donnees->nom.'</td>';
                          echo '<td>'.$donnees->prenom.'</td>';
                          echo '<td>'.$donnees->email.'</td>';
                          $tel1 = $donnees->fixe; $tel1 = wordwrap ($tel1, 2, ' ', 1);
                          echo '<td>'.$tel1.'</td>';
                          $tel2 = $donnees->mobile; $tel2 = wordwrap ($tel2, 2, ' ', 1);
                          echo '<td>'.$tel2.'</td>';
                          echo '</tr>';
                      }
                  }
              }
              

              <br/>
              <?php
                  $nom		= isset($_POST['nom']) ? Security::clean($_POST['nom']) : '';
                  $prenom		= isset($_POST['prenom']) ? Security::clean($_POST['prenom']) : '';
                  $email     	= isset($_POST['email']) ? Security::clean($_POST['email']) : '';
                  $fixe		= isset($_POST['fixe']) ? Security::clean($_POST['fixe']) : '';
              	$mobile		= isset($_POST['mobile']) ? Security::clean($_POST['mobile']) : '';
              ?>
              	<div id="ListeMembre">
              		<table cellpadding="0" cellspacing="1">
              			<tr>
              				<th width="15%">Nom</th>
              				<th width="15%">Prénom</th>
              				<th width="36%">Email</th>
              				<th width="17%">Téléphone Fixe</th>
              				<th width="17%">Téléphone Mobile</th>
              			</tr>
              <?php
              $Liste_membre = new Liste_membre_class($nom, $prenom, $email, $fixe, $mobile, $bdd);
              $Liste_membre->ListeMembre();
              ?>
              		</table>
              	</div>
              

              En fait ça me retourne 1 erreur pas argument comme il y en a 5 ça fait 5 erreur mais bon c'est la même en fait
               Warning: Missing argument 1 for Liste_membre_class::__construct() in C
              
              0
              1. Modérateur
                public function __construct($nom, $prenom, $email, $fixe, $mobile)


                Ce n'est pas plutôt ceci ?

                public function __construct($nom, $prenom, $email, $fixe, $mobile, $bdd) {
                0
                1. Non en fait j'avais essayé déjà
                  Alors ce que j'ai fait j'ai supprimé les 5 argument et je n'ai plus d'erreur mais par contre ça m'affiche le nombre de membre mais pas la liste des membres.
                  Merci
                  0
                  1. Modérateur
                    Ok.
                    Je laisse la main à "le père."
                    0