Pb lors de l'include d'une classe

Résolu
elonaenjy -  
 elonaenjy -
Bonjour,
Configuration: Windows / Chrome 79.0.3945.130


J'ai écrit un traitement d'envoi de mail appelé par un formulaire php. L'envoi de mail fonctionne bien. Mais j'ai voulu compliquer le sujet en paramétrant l'adresse du destinataire dans une base de données.
Voici les sources :
Début du traitement envoiMail.php
<?php
require_once 'Modele/Utilisateur.php';

$dest = new Utilisateur();

$infoUtilisateur = getUtilisateur($_POST['dest']);


Classe Utilisateur.php
<?php
require_once 'Modele/Modele.php';
class Utilisateur extends \Modele
{
    public function infoUtilisateur($cdUtilisateur)
    {
            $sql = "SELECT * FROM _pedagogie, lb_pedagogie FROM utilisateur WHERE login_utilisateur = \"$cdUtilisateur\"";
            $infoUtilisateur = $this->executerRequete($sql);
            
            if ($infoUtilisateur->rowCount() > 0)
                echo "je passe dans le select";
                return $infoUtilisateur->fetch();  // Accès à la première ligne de résultat
      //          else
      //              throw new Exception("Aucune information recteur trouvé pour l'identifiant '$cdUtilisateur'");
                
        // TODO - Insert your code here
    }


EDIT : AJout des balises de code.

Je travaille avec une arborescence de type MVC : envoiMail.php est dans le répertoire "Contrôleur" et la classe "utilisateur" dans le répertoire Modèle.

Je plante avec le message d'erreur "impossible d'ouvrir le flux Utilisateur.php".

Merci d'avance pour votre aide

2 réponses

  1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
     
    Bonjour,

    Le message d'erreur ne semble pas provenir du code que tu nous montres
    a moins qu'il ne vienne de ta class "Modele" que tu nous montres pas.

    Ensuite, je suppose que tu bosses en PDO
    et dans ce cas, la méthode rowCount n'est pas à utiliser sur le résultat d'une requête select.
    un rowCount ne s'utilise que sur un update/delete

    Je vois également dans ton code que tu fais appel à une fonction getUtilisateur ....
    sauf que... cette fonction n'existe nul-part dans le code que tu nous montres.

    Toi, ce que tu sembles faire, c'est :
    //récupération PROPRE des variables AVANT de les utiliser
    $dest = !empty($_POST['dest']) ? $_POST['dest'] : NULL;
    
    //initialisation de l'objet 
    $oDest = new Utilisateur();
    
    //récupération des infos de l'utilisateur
    $infoUtilisateur = $oDest->infoUtilisateur($dest);
    

    0
    1. elonaenjy
       
      Merci pour votre aide. J'ai un peu modifié le code. En effet la fonction getUtilisateur n'existait pas : c'est bien infoUtilisateur qu'il fallait utiliser
      J'ai retiré le rowcount...

      Voilà le message d'erreur que je continue à avoir :

      Avertissement: require_once (Modele / Utilisateur.php): échec d'ouverture du flux: aucun fichier ou répertoire de ce type dans D: \ wamp64 \ www \ Institut_Docteur_Angelique \ Controleur \ envoiMail.php sur la ligne 3

      Voici le code du traitement envoiMail.php
      <?php
      
      require_once 'Modele/Utilisateur.php';
      
      $dest = new Utilisateur();
      
      $infoUtilisateur = infoUtilisateur($_POST['dest']);
      
      
      $sujet = 'Mail en provenance du site i-docteurangelique.fr';
      $message = "Bonjour,<br />
      <strong>Ceci est un message html envoyé à partir du site i-docteurangelique.fr.</strong><hr />".$_POST['message']."";
      $expediteur = $_POST['name']." ".$_POST['firstname'];
      
          $dest = $infoUtilisateur['email_utilisateur'];
      echo $dest;
      $email = $_POST['email'];
      $headers = "From: \"$expediteur\"<".$email.">\n";
      $headers .= "Reply-To: <$email>\n";
      $headers .= "Content-Type: text/html; charset=\"iso-8859-1\"";
      
      if(mail($dest,$sujet, utf8_decode($message),$headers))
      {
          $message = "Bonjour,<br />
              <strong>Ceci est une copie du message html envoyé à partir du site i-docteurangelique.fr à ".$dest. "</strong><hr />".$_POST['message']."";
          $expediteur = "Institut Docteur Ang´lique";
          $dest = $email;
          $email = "***@***";
          $envoimail = mail($dest,$sujet, utf8_decode($message),$headers);
          header("location:/index.php?action=contact&envoiMail=ok");
      }
      else
      {
          header("location:/index.php?action=contact&envoiMail=ko");
      }
      ?>
      
      Et voici le code de la classe Utilisateur :
      
      <?php
      
      require_once 'Modele/Modele.php';
      /**
       *
      
      
      * @author Institut Docteur Angelique
      
      *        
      
      */
      class Utilisateur extends \Modele
      {
      
          public function infoUtilisateur($cdUtilisateur)
          {
                  $sql = "SELECT * FROM _pedagogie, lb_pedagogie FROM utilisateur WHERE login_utilisateur = \"$cdUtilisateur\"";
                  $infoUtilisateur = $this->executerRequete($sql);
                  
                  return $infoUtilisateur->fetch();  // Accès à la première ligne de résultat
            //    
          }
      }
      

      EDIT : Ajout des balises de code

      0
      1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832 > elonaenjy
         
        Le message est assez clair.....
        Le fichier n'est pas à l'emplacement que tu indiques...
        Je suppose que ton dossier Modele se trouve au même niveau que ton dossier Controleur....

        Donc
        require_once __DIR__ . '/../Modele/Utilisateur.php';
        
        0
    2. elonaenjy
       
      Merci beaucoup pour ton aide.
      J'ai compris. Ne pas confondre fonction et méthode....
      Et désolée car la réponse était dans ta première réponse... Mais au moins maintenant j'ai compris....

      Merci mille fois
      0
  2. elonaenjy
     
    Merci Jordan45 pour ton aide.
    Mais j'ai toujours le message " Warning: require_once(Modele/Modele.php): failed to open stream: No such file or directory in D:\wamp64\www\Institut_Docteur_Angelique\Modele\Utilisateur.php on line 3"
    alors que le fichier Utilisateur.php est bien a l emplacement ou il dit ne pas trouver le fichier.
    0
    1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
       
      Non... là c'est un autre fichier dont il est question c'est à cause de ton
      require_once 'Modele/Modele.php';
      

      Qui... si trouve dans ta class Utilisateur
      Hors.. le fichier se trouve dans le même dossier que ton fichier Utilisateur... et non pas dans un SOUS DOSSIER qui se nommerait MODELE.
      0
    2. elonaenjy
       
      Bien vu.... :-)
      Maintenant je plante plus loin "Erreur fatale: erreur non interceptée: appel à la fonction non définie infoUtilisateur () dans D: \ wamp64 \ www \ Institut_Docteur_Angelique \ Controleur \ envoiMail.php sur la ligne 7"
      require_once __DIR__ . '/../Modele/Utilisateur.php';


      $dest = new Utilisateur();
      $infoUtilisateur = infoUtilisateur($_POST['dest']);

      :-(
      0
      1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832 > elonaenjy
         
        car ta fonction est une METHODE de ta class ...
        TU as légèrement oublié d'indiquer l'objet ...
        sous la forme
        $monObjet->mamethode();
        
        0