Page 1 sur 2

mail d'inscription

Posté : 07 juin 2006, 08:50
par béka
bonjour tout le monde, voila j'ai fait un peit script qui permet a un élève de s'inscrire sur un site. Ses données sont vérifiées et validées par un administration avant de confirmer son inscription et la rendre ainsi définitive. Lorsqu'il a été décidé de confirmer l'inscription (par l'intermédiaire d'un lien dans un mail qui est envoyé à l'admin), je voudrais qu'un mail soit envoyé à l'élève pour lui dire que son inscription est acceptée.
Voila mon script, mais cela ne marche pas, pouvez me dire d'où vient l'erreur. :
<?php
/*********************************************************************/
/*				  Ajout des informations dans la base			     */
/*********************************************************************/

include("../../connexion.php");

//on evoie le mail de confirmation a l'eleve
	$nom_etudiant=$_GET['nom_etudiant'];
	$prenom_etudiant=$_GET['prenom_etudiant'];
	$sql = "SELECT * FROM etudiant WHERE prenom_etudiant='$prenom_etudiant' AND nom_etudiant='$nom_etudiant'";
$resultat = mysql_query($sql);
while ($row = mysql_fetch_array($resultat)) {	
	
$email_etudiant = ($row['email_etudiant']);}

//Corps du message 
$message = "Votre inscription a été validée.\n \n"; 
$message.= "Voila les renseignements vous concernant : \n \n"; 
$message.= "Nom  : ".$nom_etudiant." \n"; 
$message.= "Prenom  : ".$prenom_etudiant." \n"; 
$message.= "Adresse  : ".$adresse_etudiant."  ".$cp_etudiant."  ".$ville_etudiant." \n"; 
$message.= "Numéro de téléphone : ".$tel_etudiant." \n"; 
$message.= "Dernière classe  : ".$derniere_classe." \n"; 
$message.= "Mot de passe : \n ".$password_etudiant." \n"; 
$message.= "Merci de l'intérêt que vous portez à notre établissement.\n"; 

$sujet = "Nouvelle inscription d'étudiant";

$adresse = $email_etudiant;

$entete = "De : [email protected]";

$mailsend=mail($adresse,$sujet,$message,$entete);

//on insère dans la base
$sql = "SELECT * FROM etudiant WHERE prenom_etudiant='$prenom_etudiant' AND nom_etudiant='$nom_etudiant'";
$resultat = mysql_query($sql);
	$query = "UPDATE etudiant SET actif='1'";
	$result = mysql_query($query);
	echo "L'inscription a bien été prise en compte. <br>Vous pouvez fermer cette fenêtre.";
	

?>

Posté : 07 juin 2006, 09:12
par guilt92
Voila mon script, mais cela ne marche pas
Qu est ce qui ne fonctionne pas ? Message d'erreur ? Le mail ne part pas ? Il est plus facile de localiser une erreur quand on sait ce qui ne va pas.... :)

Posté : 07 juin 2006, 09:16
par béka
oui exact, en fait le mail ne part pas

Posté : 07 juin 2006, 09:28
par guilt92
$entete = 'From: [email protected]'."\n"; 
$entete .='Reply-To: inscription@hfontaine'."\n"; 
$entete .='Content-Type: text/html; charset="iso-8859-1"'."\n"; 
$entete .='Content-Transfer-Encoding: 8bit'; 
Tu peux essayer comme ca...
Sinon as tu bien vérifié que l'adresse de destination etait la bonne avec un echo avant d envoyer le mail ?

Posté : 07 juin 2006, 09:31
par béka
ha heu non j'ai pas vérifier. L'erreur ne vient-elle pa aussi qu'il y est deux fois
$sql
et
$resultat
?

Posté : 07 juin 2006, 09:37
par guilt92
L'erreur ne vient-elle pa aussi qu'il y est deux fois
$sql
et
$resultat
?
Non je ne pense pas car les variables ne s entrecroise pas. Ton while de la premiere requete est terminée lorsque tu reaffectes la variable donc ca ne devrait pas poser de probleme. De plus la 2eme utilisation se fait après l envoie du mail donc ca ne devrait pas l affecter.

Posté : 07 juin 2006, 09:42
par béka
j'ai essayé de mettre un echo juste avant l'envoide mail, et cela ne marche pas. rien ne s'affiche. Faut-il décaler l'} du while et le mettre après l'envoi de mail ?

Posté : 07 juin 2006, 09:50
par guilt92
Faut-il décaler l'} du while et le mettre après l'envoi de mail ?
Non car tu ne traites ici qu un seul élève donc une seule adresse email.
Par contre si ta variable est vide il y a peut etre un probleme avec ta requete, rajoute un "or die" et fais un echo de ta requete pr vérifier que les variables sont bonnes.
$nom_etudiant=$_GET['nom_etudiant']; 
$prenom_etudiant=$_GET['prenom_etudiant']; 
$sql = "SELECT * FROM etudiant WHERE prenom_etudiant='$prenom_etudiant' AND nom_etudiant='$nom_etudiant'"; 
$resultat = mysql_query($sql) or die(mysql_error());

Posté : 07 juin 2006, 10:00
par béka
j'ai donc fait un
echo $resultat;
et j'obtient le message suivant
Ressource id#4L'inscription a bien été prise en compte
Vous pouvez fermer cette fenêtre
Normal?

Posté : 07 juin 2006, 10:01
par béka
mais par contre, l'inscriptiona bien été confirmée et validée. Ca veut dire que l'insertion dans la BDD a lieu

Posté : 07 juin 2006, 10:03
par zeus
Rien a voir avec l'envoi de mail, mais la fin de ton script ne correspond surement pas a ce que tu veux faire. Quand je lit
//on insère dans la base
$sql = "SELECT * FROM etudiant WHERE prenom_etudiant='$prenom_etudiant' AND nom_etudiant='$nom_etudiant'";
$resultat = mysql_query($sql);
$query = "UPDATE etudiant SET actif='1'";
$result = mysql_query($query);
echo "L'inscription a bien été prise en compte. <br>Vous pouvez fermer cette fenêtre.";
je me dit que tu doit vouloir rendre actif l'etudiant auxquel tu vient d'envoyer le mail

Or, là, tu sélectionne l'étudiant sans rien faire dans la 1ere requete. Et tu change le champ actif de tous les étudiants de la table :-k

De plus, pourquoi utilises-tu les nom/prenom pour récupérer un enregistrement dans la base ? Ce n'est pas une clause d'unicité suffisante, il vaut mieux utiliser une clé primaire.

Posté : 07 juin 2006, 10:05
par béka
oui c'est bien ce que je veux faire zeus, dans mon UPDATE je devrais mettre en WHERE?
D'après toi, je devrais utiliser nom, prenom et pass ?

Posté : 07 juin 2006, 10:05
par guilt92
j'ai donc fait un
echo $resultat;
et j'obtient le message suivant
Ressource id#4L'inscription a bien été prise en compte
Vous pouvez fermer cette fenêtre
Normal?
Oui, il faudrait plutot faire echo $sql; pour voir ta requête. Et les remarques de Zeus sont à prendre en compte, car si tu as 2 élèves avec le même nom et prénom ton site va bugger...

Posté : 07 juin 2006, 10:12
par béka
oui j'ai pris en compte le comment de zeus
avec un
echo $sql;
voila ce que j'obtient
SELECT * FROM etudiant WHERE prenom_etudiant='' AND nom_etudiant=''
Aucune variable n'est passée

Posté : 07 juin 2006, 10:20
par zeus
Donc, il y a plusieurs problèmes dans ton script :
1/ récupération des variables GET
2/ manière d'identifier l'étudiant
3/ update de l'etudiant

Pour résoudre ces problèmes, je te conseille ça :
1/ Vérifie le lien qui t'envoi vers cette page
2/ Essaye de passer un identifiant
3/ effectivement, il te faut un where dans le update sinon tu le réalise sur toute la table