Fatal error: Call to undefined method Membres::mailactivation() [Résolu]

Signaler
Messages postés
408
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
18 décembre 2012
-
Messages postés
408
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
18 décembre 2012
-
Bonjour,

Je débute en POO. J'ai un problème avec mon code j'ai :

Fatal error: Call to undefined method Membres::mailactivation()

Mon code est le suivant :

class Membres {
function register(...) {
...
$this->mailactivation($emailcode);
}
function mailactivation($cle) {
...
$this->sendmail('noreply@site.com','site.com',$mail,'site.com : Activation de votre compte',$Mailtexte);
}
}

Je ne comprends pas, es-ce que l'emploi de $this est faux ?

Merci d'avance pour votre aide
A voir également:

9 réponses

Messages postés
1654
Date d'inscription
dimanche 7 septembre 2008
Statut
Membre
Dernière intervention
11 septembre 2013
16
tu es pas loin ...
essaye

<?php 
class Mail { 
  
  public function sendmail($FromE,$FromN,$To,$Sujet,$Mes){ 
  //message en mode texte (affiché uniquement si l'affichage en HTML n'est pas possible) 
  $msg_texte = preg_replace("/\(.*?)\<\/a\>/","\\2",$Mes); 
  $msg_texte = preg_replace("/\
/","\\n",$msg_texte); 
  //message au format HTML 
  $msg_html = $Mes; 
  //on va se servir de la chaîne limite pour délimiter les différentes zones du message 
  $limite = "-----=" . md5( uniqid ( rand() ) ); 
  $headers = "From: "".$FromN.""<".$FromE.">\n"; 
  $headers .= "MIME-Version: 1.0\n"; 
  $headers .= "Content-Type: multipart/alternative; boundary="$limite""; 
  $message = "This is a multi-part message in MIME format.\n\n"; 
  $message .= "--" . $limite . "\n"; 
  $message .= "Content-Type: text/plain; charset="iso-8859-1"\n";
  $message .= "Content-Transfer-Encoding: 8bit\n\n"; 
  $message .= $msg_texte; 
  $message .= "\n\n"; 
  $message .= "--" . $limite . "\n"; 
  $message .= "Content-Type: text/html; charset="iso-8859-1"\n"; 
  $message .= "Content-Transfer-Encoding: 8bit\n\n"; 
  $message .= $msg_html; 
  $message .= "\n\n"; 
  $message .= "--" . $limite . "--\n"; 
  mail($To,$Sujet,$message,$headers); 
  } 

  public function mailactivation($cle,$To) { 
   
    $this->sendmail('noreply@site.com',
    'Site.com',
    $To,
    'Site.com : Activation de votre compte',
    "Bienvenue,

Vous venez de rejoindre la grande famille site
    www.site.com.
    

Pour activier votre compte cliquez sur le lien suivant :
    http://www.site.com/register.php?varcle=$cle
"
    ); 
  
  } 
}


$envoi = new Mail;
$envoi->mailactivation('123','unmail@free.fr'); 
?> 


Bonne programmation !
Messages postés
408
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
18 décembre 2012

Trouvé... Il fallait utiliser self::sendmail(''); Pourquoi ?! Je tiens à te remercier pour ton support dans tous les cas.
Messages postés
1654
Date d'inscription
dimanche 7 septembre 2008
Statut
Membre
Dernière intervention
11 septembre 2013
16
bonjour

utilise un constructeur ...

<?php
class Membres{ 

private $toto;

function __construct($m){
$this->toto[0] = $m[0]; /*titi*/
$this->toto[1] = $m[1]; /*quesaisje*/
$this->register($this->toto[0]);
}


function register($t) { 
$this->mailactivation($this->toto[1]); 
} 

function mailactivation($cle) { 

$mail='toto@free.fr';
$Mailtexte='te';
//echo $this->sendmail('noreply@site.com','site.com',$mail,'site.com : Activation de votre compte',$Mailtexte); 
echo 'noreply@site.com','site.com',$mail,'site.com : Activation de votre compte',$Mailtexte; 
} 

} 



$emailcode='quesaisje';
$membre=array('titi',$emailcode);
$test = new Membres($membre);
?>



Bonne programmation !
Messages postés
408
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
18 décembre 2012

Salut,

Merci pour ta réponse ;) Mais je comprend pas plusieurs points :

Je me retrouve donc avec :


function __construct($password,$email,$pseudo,$cle){
$this->password = $password;
$this->email = $email;
$this->pseudo = $pseudo;
$this->Register($this->password,$this->email,$this->pseudo);
$this->login($this->pseudo,$this->password);
$this->mailactivation($this->cle);
}

function register($password,$email,$pseudo) {
$password = strtolower($password);
$email = strtolower($email);
$pseudo = strtolower($pseudo);

$password = crypt($password,'CRYPT_SHA512');
$pseudo = Secure::Crypter($pseudo,$this->Cle);
$email = Secure::Crypter($email,$this->Cle);
$emailcode = Secure::coderand(19);
$ip = crypt($_SERVER['REMOTE_ADDR'],'CRYPT_SHA512');
$reponse = crypt($reponse,'CRYPT_SHA512');
$Requete="INSERT INTO table( pseudo, password, email , emailcode , ip ) VALUES ('$pseudo', '$password', '$email', '$emailcode', '$ip');";
echo $Requete;
Mysql::MyQuery($Requete);
$this->mailactivation($cle);
}

Ja'i toujours malgré cela : Fatal error: Call to undefined function mailactivation()

Merci d'avance pour votre aide.
Messages postés
1654
Date d'inscription
dimanche 7 septembre 2008
Statut
Membre
Dernière intervention
11 septembre 2013
16
bonjour

comme il me manque une partie du code de la class j'ai mis md5 tu comprendras la suite ...

<?php
class Membres2{

private $password;
private $email;
private $pseudo;
private $cle;


function __construct($password,$email,$pseudo,$cle){ 

$this->password = $password; 
$this->email = $email; 
$this->pseudo = $pseudo; 
$this->cle=$this->Register($this->password,$this->email,$this->pseudo); 

/*c'est deux methodes tu peux les appeler depuis register
si register ok 
//$this->login($this->pseudo,$this->password); 
//$this->mailactivation($this->cle); 
*/
} 

function Register($password,$email,$pseudo) { 
echo $password = strtolower($password); 
echo $email = strtolower($email); 
echo $pseudo = strtolower($pseudo); 
echo $password = md5($password); 
/*
$pseudo = Secure::Crypter($pseudo,$this->Cle); 
$email = Secure::Crypter($email,$this->Cle); 
$emailcode = Secure::coderand(19); 
$ip = crypt($_SERVER['REMOTE_ADDR'],'CRYPT_SHA512'); 
$reponse = crypt($reponse,'CRYPT_SHA512'); 
$Requete="INSERT INTO table( pseudo, password, email , emailcode , ip ) VALUES ('$pseudo', '$password', '$email', '$emailcode', '$ip');"; 
echo $Requete; 
if(Mysql::MyQuery($Requete)){ 
$this->mailactivation($cle); 
$this->login($this->pseudo,$this->password); 
}else{
}
*/
}

}


//$membre=array('titi','titi@free.fr','toto','123');
$test2 = new Membres2('titi','titi@free.fr','toto','123');
?>



Bonne programmation !
Messages postés
408
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
18 décembre 2012

Salut et encore merci pour ton aide,

Si je comprends bien pour la method construct, il faut definir toutes les variables et methodes utilisé dans le classe.

Puis creer un objet de type :

$users = new Membres($_POST['password'],$_POST['email'],$_POST['pseudo']);

Puis utiliser la methode directement qui aura directement les variables nécéssaire.

$users->Register;

Par contre je ne vois pas vraiment comment organiser ca pour le reste : j'ai une methode sendmail dans la classe Membre :


function sendmail($FromE,$FromN,$To,$Sujet,$Mes)
{
//message en mode texte (affiché uniquement si l'affichage en HTML n'est pas possible)
$msg_texte = preg_replace("/\(.*?)\<\/a\>/","\\2",$Mes);
$msg_texte = preg_replace("/\
","\\n",$msg_texte);
//message au format HTML
$msg_html = $Mes;
//on va se servir de la chaîne limite pour délimiter les différentes zones du message
$limite = "-----=" . md5( uniqid ( rand() ) );
$headers = "From: "".$FromN.""<".$FromE.">\n";
$headers .= "MIME-Version: 1.0\n";
$headers .= "Content-Type: multipart/alternative; boundary="$limite"";
$message = "This is a multi-part message in MIME format.\n\n";
$message .= "--" . $limite . "\n";
$message .= "Content-Type: text/plain; charset="iso-8859-1"\n";
$message .= "Content-Transfer-Encoding: 8bit\n\n";
$message .= $msg_texte;
$message .= "\n\n";
$message .= "--" . $limite . "\n";
$message .= "Content-Type: text/html; charset="iso-8859-1"\n";
$message .= "Content-Transfer-Encoding: 8bit\n\n";
$message .= $msg_html;
$message .= "\n\n";
$message .= "--" . $limite . "--\n";
mail($To, $Sujet, $message, $headers);
}

Peut être devrai-je regrouper mailactivation et sendmail dans une classe mail ? J'ai toujours l'erreur comme quoi il ne retrouve pas ma methode mailactivation. Serai-ce mieux?

Merci d'avance.
Messages postés
1654
Date d'inscription
dimanche 7 septembre 2008
Statut
Membre
Dernière intervention
11 septembre 2013
16
le constructeur est toujours appelé par defaut
soi il est vide soit tu y mets des variables

<?php
class Affichage{

private $mavarprivee;
public $resultat;
public $resultat2;

  function __construct($valeur){
  $this->mavarprivee=$valeur;
  /*j'appelle affichera*/
  $this->affichera($this->mavarprivee);
  }
    
  public function affichera($affichemoi){
  $this->resultat=$affichemoi;
  /*j'appelle ecritGrand*/
  $this->ecritGrand($this->resultat);
  }
  
  public function ecritGrand($affichemoi){
  $this->resultat2=strtoupper($affichemoi);
  }
  

}

$ex='toto';
$test = new Affichage($ex);
echo $test->resultat;
echo $test->resultat2;
echo $test->mavar;/*ici privee pas accessible donc une erreur Notice: Undefined property: Affichage::$mavar in C:\wamp\www\cod57\activate\ex.php on line 31*/
?>




Bonne programmation !
Messages postés
408
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
18 décembre 2012

Merci pour ton aide encore. Je préfère laissé de coté les constructeurs pour le moment car j'ai vraiment du mal à tout assimilé, tout structuré.

J'ai essayé de faire une classe propre à Mail... Regarde cette classe toute simple affiche :
Fatal error: Call to undefined method Membres::sendmail() in /home/site/public_html/site/class/Mail.php on line 31

<?php
class Mail {
function sendmail($FromE,$FromN,$To,$Sujet,$Mes)
{
//message en mode texte (affiché uniquement si l'affichage en HTML n'est pas possible)
$msg_texte = preg_replace("/\(.*?)\<\/a\>/","\\2",$Mes);
$msg_texte = preg_replace("/\
","\\n",$msg_texte);
//message au format HTML
$msg_html = $Mes;
//on va se servir de la chaîne limite pour délimiter les différentes zones du message
$limite = "-----=" . md5( uniqid ( rand() ) );
$headers = "From: "".$FromN.""<".$FromE.">\n";
$headers .= "MIME-Version: 1.0\n";
$headers .= "Content-Type: multipart/alternative; boundary="$limite"";
$message = "This is a multi-part message in MIME format.\n\n";
$message .= "--" . $limite . "\n";
$message .= "Content-Type: text/plain; charset="iso-8859-1"\n";
$message .= "Content-Transfer-Encoding: 8bit\n\n";
$message .= $msg_texte;
$message .= "\n\n";
$message .= "--" . $limite . "\n";
$message .= "Content-Type: text/html; charset="iso-8859-1"\n";
$message .= "Content-Transfer-Encoding: 8bit\n\n";
$message .= $msg_html;
$message .= "\n\n";
$message .= "--" . $limite . "--\n";
mail($To, $Sujet, $message, $headers);
}

function mailactivation($cle,$To) {
$this->sendmail('noreply@site.com','Site.com',$To,'Site.com : Activation de votre compte',"Bienvenue,

Vous venez de rejoindre la grande famille sitewww.site.com.

Pour activier votre compte cliquez sur le lien suivant : http://www.site.com/register.php?varcle=$cle
");
}
}
?>

Pourtant $this-> est bien utilisé... Je pense que même avec un constructeur cela ne marche pas,j'ai essayé pour la class membre et no resultat

Merci d'avance pour ton aide.
Messages postés
408
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
18 décembre 2012

Salut!

Merci pour ta réponse.

Alors j'ai bien ajouté les public (j'y avais pas pensé) MAIS toujours la même erreur.

Fatal error: Call to undefined method Membres::sendmail() in /home/site/public_html/site/class/Mail.php on line 31
..

Cependant j'ai essayé de creer un nouveau objet Mail et là ca marche! J'aimerai quand même pouvoir appeler une méthode depuis une autre methode dans une même classe ...

Une idée? Ca doit te désépérer à la longue