Pb lors de l'include d'une classe [Résolu]

Signaler
-
 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

Messages postés
27656
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
23 février 2020
2 136
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);

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

jordane45
Messages postés
27656
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
23 février 2020
2 136 > 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';
jordane45
Messages postés
27656
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
23 février 2020
2 136 > elonaenjy
PS: A l'avenir, merci d'utiliser les BALISES DE CODE pour poster ton code sur le forum
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
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
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.
jordane45
Messages postés
27656
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
23 février 2020
2 136
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.
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']);

:-(
jordane45
Messages postés
27656
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
23 février 2020
2 136 > 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();