Récupération d'un ID

celine34
Invité n'ayant pas de compte PHPfrance

30 juil. 2011, 19:25

Bonjour a tous.
Je suis en train de créer un petit forum et j'y inclue la possibilité de recevoir par email un message automatique indiquant une nouvelle réponse au sujet posté.
Le problème c'est que je n'arrive pas à récupérer l'id du sujet en question.
Un petit exemple.
Je poste mon sujet (il prend comme valeur id=5) et je coche la case "recevoir par email les réponses" (reception_mail=1) et comme c'est un sujet et non une réponse, id_reponse=0
Une personne répond, son message prend la valeur id=6 et id_reponse=5 (id du sujet).
je désire donc récupérer l'id=5 et l'inclure dans l'adresse internet qui se trouve dans le corps de l'email

Voici mon code:
// Gestion des envois par email
if ($envoiParMail && function_exists('mail')) {
	$emails = '';
	// Récupération des emails pour l'envoi
	$sql = 'SELECT DISTINCT(email) as mail FROM '.$cat1.' WHERE (reception_mail=1) AND (email<>"'.mysql_real_escape_string($email).'")';
	$sql.= ' AND (id='.mysql_real_escape_string($id_reponse).' OR id_reponse='.mysql_real_escape_string($id_reponse).')';

	$res = mysql_query($sql) or die(showError('3', mysql_error()));
	if (mysql_num_rows($res)>0) {
		// Contenu du mail

		$sujet = 'Vous avez une réponse en attente. ';
		$corps = 'Bonjour,'."\n\n";
		$corps.= $nom;
		$corps.= ' a apporté une réponse à  votre sujet "';
		$corps.= $titre;
                $corps.= '". Vous pouvez consulter le message en cliquant sur l\'adresse ci-dessous: '."\n\n";
		$corps.= 'http://www.nom_de_domaine.fr/forum/'.$cat1.'/read_mess.php?id='. $id;
		$corps.= "\n\n\n";
		// Envoi des emails
		while($r = mysql_fetch_array($res)) {
			mail($r['mail'], $sujet, $corps,'From: '.$cat1.' '.$nomsite.' <'.$webmail.'>'."\n");
		}
	}
}
mysql_close();
Si quelqu'un a une idée... :-)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

31 juil. 2011, 01:51

salut,

je comprend pas ta question.

où est le problème ?

tu a $id_reponse dans tes requêtes SQL tu ne sais pas l'utiliser après dans le mail ?


@+
Il en faut peu pour être heureux ......

celine34
Invité n'ayant pas de compte PHPfrance

31 juil. 2011, 14:13

Oups, j'ai un peu honte la...
J'étais tellement à la recherche de la récupération de $id que je n'ai pas pensé à $id_reponse
Merci de m'avoir aidé, cela fonctionne parfaitement :-)

celine34
Invité n'ayant pas de compte PHPfrance

31 juil. 2011, 17:44

Nouveau petit soucis
// Gestion des envois par email
if ($envoiParMail && function_exists('mail')) {
        $emails = '';
        // Récupération des emails pour l'envoi
        $sql = 'SELECT DISTINCT(email) as mail FROM '.$cat1.' WHERE (reception_mail=1) AND (email<>"'.mysql_real_escape_string($email).'")';
        $sql.= ' AND (id='.mysql_real_escape_string($id_reponse).' OR id_reponse='.mysql_real_escape_string($id_reponse).')';

        $res = mysql_query($sql) or die(showError('3', mysql_error()));
        if (mysql_num_rows($res)>0) {
                // Contenu du mail

                $sujet = 'Vous avez une réponse en attente. ';
                $corps = 'Bonjour,'."\n\n";
                $corps.= $nom;
                $corps.= ' a apporté une réponse à  votre sujet "';
                $corps.= $titre;
                $corps.= '". Vous pouvez consulter le message en cliquant sur l\'adresse ci-dessous: '."\n\n";
                $corps.= 'http://www.nom_de_domaine.fr/forum/'.$cat1.'/read_mess.php?id='. $id_reponse;
                $corps.= "\n\n\n";
                // Envoi des emails
                while($r = mysql_fetch_array($res)) {
                        mail($r['mail'], $sujet, $corps,'From: '.$cat1.' '.$nomsite.' <'.$webmail.'>'."\n");
                }
        }
}
mysql_close();
Je voudrai rajouter dans la requête quelque chose du genre "Si id_reponse=0=1er enregistrement alors pas d'envois d'email"
mais je ne trouve nul part comment faire :oops:

Eléphant du PHP | 343 Messages

31 juil. 2011, 18:26

if (mysql_num_rows($res)>0 && $id_reponse>0)
?
Développeur web

Invité
Invité n'ayant pas de compte PHPfrance

31 juil. 2011, 21:54

Sam12, le problème avec
if (mysql_num_rows($res)>0 && $id_reponse>0)
c'est que id_reponse qui est égal a 0 ne sera jamais pris en compte pour l'envoi de mail automatique.
Celui qui écrit le sujet prend id=5 par ex et automatiquement récupère la valeur id_reponse=0
Quelqu'un répond à ce même sujet, il prendra la valeur id=6 et id_reponse=5
et encore une autre personne répond, id=7 et id_reponse=5
Lors de la validation du sujet ou de la réponse, il y a l'option d'envoi automatique de mail pour prévenir d'une réponse.
Et le créateur du sujet qui demande a être averti ne le sera pas car id_reponse=0 et
if (mysql_num_rows($res)>0 && $id_reponse>0)
empêchera l’envoie a id_reponse=0
il faut donc réussir a différencier id_reponse=0 lors de la création du sujet et id_reponse=0 lorsqu'une personne a répondu.
J'espère bien me faire comprendre :mrgreen: :mrgreen:

Eléphant du PHP | 343 Messages

01 août 2011, 04:06

D'après ce que je comprends, tu as peur que le créateur du topic garde un $id_reponse à 0 ce qui avec ma solution ne corrige pas le probleme.
Il faut revoir une partie du code alors. Ce n'est pas parce-qu'on ne poste pas qu'on n'est pas intéressé d'ailleurs.
$id_reponse ne devrait pas servir à envoyer le mail. Il faut plutôt créer un nouveau booléen et par une checkbox (par exemple) rajoute true ou false dans ce champ.
Si le membre clique => on passe à true et le prochain qui poste envoie 1 mail groupé à tous ce qui ont coché la case (donc tous ceux qui ont la valeur à true).

En y réfléchissant c'est ce que devrait faire reception_mail=1 non?
Développeur web