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

Résolu
cs_zzzzzz Messages postés 408 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 18 décembre 2012 - 7 oct. 2011 à 21:51
cs_zzzzzz Messages postés 408 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 18 décembre 2012 - 10 oct. 2011 à 21:33
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

cod57 Messages postés 1653 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 19
9 oct. 2011 à 19:15
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 !
3
cs_zzzzzz Messages postés 408 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 18 décembre 2012
10 oct. 2011 à 21:33
Trouvé... Il fallait utiliser self::sendmail(''); Pourquoi ?! Je tiens à te remercier pour ton support dans tous les cas.
3
cod57 Messages postés 1653 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 19
8 oct. 2011 à 11:30
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 !
0
cs_zzzzzz Messages postés 408 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 18 décembre 2012
9 oct. 2011 à 00:48
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cod57 Messages postés 1653 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 19
9 oct. 2011 à 10:51
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 !
0
cs_zzzzzz Messages postés 408 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 18 décembre 2012
9 oct. 2011 à 16:46
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.
0
cod57 Messages postés 1653 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 19
9 oct. 2011 à 17:20
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 !
0
cs_zzzzzz Messages postés 408 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 18 décembre 2012
9 oct. 2011 à 18:41
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.
0
cs_zzzzzz Messages postés 408 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 18 décembre 2012
10 oct. 2011 à 19:07
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
0
Rejoignez-nous