Inscription message d'activation

Petit nouveau ! | 2 Messages

04 nov. 2008, 11:39

Bonjour.

Pour mon inscription, j'aimerais faire une message d'activation.
Mais comment faire?

merci

Mammouth du PHP | 693 Messages

04 nov. 2008, 12:28

C'est à dire ?

Petit nouveau ! | 2 Messages

04 nov. 2008, 13:02

Et dans la plupart des sites.
Lorsqu'on s'inscrit, on recoit un mail, où on clic sur un lien pour activer son compte. Tu dois surement voir de quoi je parle.
J'aimerais savoir comment faire ceci (j'ai déjà le script pour que s'enregistrer).


merci

ViPHP
AB
ViPHP | 5818 Messages

04 nov. 2008, 13:52

Dans ton mail tu envoi un lien avec une variable vers une page de ton site, et en fonction de cette variable tu accepte ou non l'inscription.

Mammouth du PHP | 693 Messages

04 nov. 2008, 13:53

Pour envoyer un mail, le plus simple est d'utiliser la fonction mail(). Par contre, il faut avoir un serveur SMTP pour s'en servir, d'après mes souvenirs.

Lors de l'enregistrement, tu peux générer un identifiant et tu envois par mail un lien vers un script avec comme variable l'identifiant. Le script se chargera d'activer le compte.

Invité
Invité n'ayant pas de compte PHPfrance

04 nov. 2008, 13:59

Bien merci:)
Je vais me renseigner pour ce fameux script alors, avez vous des exemples qui je puisse m'en inspirer?

merci

goerge.
Invité n'ayant pas de compte PHPfrance

05 nov. 2008, 21:17

Rebonjour!
Je me permet un petit up^^
Je ne voit pas comment faire le script, j'ai vraiment besoin d'aide^^

Avatar du membre
ViPHP
ViPHP | 3008 Messages

06 nov. 2008, 10:14

Au moment de l'inscription, tu crées un code que tu envoies ensuite par mail au membre. Dans ta table tu auras 2 champs en plus, un champ "verif" par exemple qui vaut 0 par défaut et un champ "code" qui contiendra le code créé.

Le mail que tu envoies contiendra le lien d'activation qui ressemblera à :
inscription.php?code=012444102 (code que tu as crée).

Lorsque le membre clique sur ce lien, il ira sur la page inscription.php qui contiendra une requête UPDATE qui ressemblera à :
mysql_query('UPDATE ta_table SET verif=1 WHERE code='.intval($_GET['code']));

goerge.
Invité n'ayant pas de compte PHPfrance

06 nov. 2008, 21:01

Bonjour et merci de ta reponse:)

Je comprend mieux maintenant mais j'ai quelques question encore sur ce que tu as dit.

Premierement, le code que j'ai crée, je peut mettre n'importe quoi?
Et ca fait quoi de cliquer dessus? je comprend pas trop en quoi ca valide l'inscription.
Et que signifie intval dans la requête?

merci

ViPHP
AB
ViPHP | 5818 Messages

06 nov. 2008, 21:50

Ben si dans ton lien (pour reprendre l'exemple de charabia) tu indiques l'adresse http:/www.monsite.com/inscription.php?code=1246879

... le lien va donc envoyer le visiteur sur ta page "inscription.php" en passant une variable GET['code']=1246879

Donc cette même page "inscription.php" doit contenir un script qui se connecte à ta dbb puis qui fait la requête
mysql_query('UPDATE ta_table SET verif=1 WHERE code='.intval($_GET['code']));
Si le numéro de code ne correspond à rien la requête va échouer et l'update ne sera pas fait et le compte ne sera pas activé.

Quand à intval, charabia a employé cette fonction pour sécuriser la requête. Si tu veux en connaître le fonctionnement il te suffit de cliquer sur la fonction pour ouvrir le manuel à la page correspondante. C'est magique :wink:

VaN
Mammouth du PHP | 1107 Messages

06 nov. 2008, 22:03

quelques ressources pour t'aider:

Ma fonction pour générer la clé d'activation, et ma fonction d'envoi de mail :
// Génère un string aléatoire, de longueur length
function randomString($length) {
	$string = "";
	$chaine = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz";
	srand((double)microtime()*1000000);
	for($i=0; $i<$length; $i++) {
		$string .= $chaine[rand()%strlen($chaine)];
	}
	return $string;
} 

// Envoi un mail
function sendMail($to, $sujet, $message) {
	require 'vars.php';	
	$sendMailError = 0;
				
	$headers  = "From: no-reply@".$siteDomain."\r\n".
   				"MIME-Version: 1.0\r\n".
				"Content-type: text/html; charset=iso-8859-1";
	
	
	if(!mail($to, $sujet, $message, $headers)) 
		$sendMailError = 1;
	
	return $sendMailError;
}
Envoi du mail :
// Envoi du mail
	$message = "Bonjour ".$_REQUEST['login'].",<br /><br />\n\n";
	$message .= "Merci de vous etre enregistré sur ".$siteName.".<br /><br />\n\n";
	$message .= "Pour activer votre compte, cliquez sur le lien suivant <br />\n";
	$message .= "(ou copiez-le dans la barre d'adresse de votre navigateur, si celui-ci n'est pas cliquable) :<br /><br />\n\n";
	$message .= "<a href=".$siteURL."/index.php?page=activate&login=".$_REQUEST['login']."&key=".$activationKey.">".$siteURL."/index.php?page=activate&login=".$_REQUEST['login']."&key=".$activationKey."</a><br /><br />\n\n";
	$message .= "Cordialement,<br />\n";
	$message .= "L'&eacute;quipe ".$siteName;
		
		
	$sendMailError = sendMail($_REQUEST['mail'], 'Activation de votre compte '.$siteName, $message);
	if($sendMailError == 1) {
		echo '<div class="msgNo">Une erreur est survenue lors de l\'envoi de l\'e-mail d\'activation. 
		<a href="mailto:'.$adminMail.'" class="normal-brown-underline">Contactez l\'administrateur</a>.</div>';
	}
	else {
		echo '<div class="msgYes">F&eacute;licitations ! Votre compte vient d\'&ecirc;tre cr&eacute;e. Un mail vient d\'&ecirc;tre envoy&eacute; &agrave;
        l\'adresse que vous avez fournie. Pour activer votre compte, cliquez sur le lien qu\'il contient.</div>';
	}
Mon script d'activation :
<?php
// On verifie que le login correspond a la key
$login = isset($_REQUEST['login']) ? stripgpc($_REQUEST['login']) : '';

if(!empty($login)) {
	$sql = sprintf("SELECT user_activation_key, user_activated FROM ".$cfg_prefixe."users WHERE user_login = '%s'", mysql_real_escape_string($login)); 
	$query = mysql_query($sql) or die(mysql_error());
	$result = mysql_fetch_array($query);

	if($result['user_activated'] == 1)
		echo '<div class="msgNo">Votre compte est d&eacute;j&agrave; activ&eacute;.</div>';

	elseif($result['user_activation_key'] == $_REQUEST['key']) {
		$sql = sprintf("UPDATE ".$cfg_prefixe."users SET user_activated = 1 WHERE user_login = '%s'", mysql_real_escape_string($login)); 
		$query = mysql_query($sql) or die(mysql_error());
		echo '<div class="msgYes">Votre compte vient d\'&ecirc;tre activ&eacute;. Merci de vous &ecirc;tre enregistr&eacute; sur '.$siteDomain.'.</div>';
		include 'mod.authForm.php';
	}
	else {
		echo '<div class="msgNo">Votre cl&eacute; d\'activation est erron&eacute;e. 
		<a href="mailto:'.$adminMail.'" class="normal-brown-underline">Contactez l\'administrateur</a>.</div>';
	}
}
?>
Passes quelques minutes à comprendre le code, et bidouilles le si besoin. Tu devrai pouvoir t'en sortir avec ça.

Avatar du membre
ViPHP
ViPHP | 3008 Messages

06 nov. 2008, 22:55

Et ca fait quoi de cliquer dessus? je comprend pas trop en quoi ca valide l'inscription.
La champ "verif" de table a une valeur 0 par défaut. Si tu regardes bien la requête, le UPDATE change cette valeur à 1 si le code correspond.

Donc si verif=1 alors compte validé, sinon compte non valide.

goerge.
Invité n'ayant pas de compte PHPfrance

07 nov. 2008, 18:30

Merci beaucoup de vos reponses et de vos precisions!

Je vais de suite essayer le script^^

Petit nouveau ! | 9 Messages

19 nov. 2008, 18:46

pourquoi créer un code d'activation?

on ne peut pas utiliser l'id? à la place du login et du code d'activation ?
je pensais envoyer dans le lien l'id et la variable verif.

VaN, merci pour les scripts. Par contre, le mail que tu envoi est en HTML, non? celà ne risque aps de poser trop de problème est fonction des configuration de sécurités des boites mails?