IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Tableau et envoi e-mail PHP


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 24
    Par défaut Tableau et envoi e-mail PHP
    Bonjour je vous explique mon problème :

    Je dois envoyer un mail présentant l'annonce publiée à toutes les personnes inscrites à différents types d'activités en rapport avec cette annonce lorsqu'elle est créé.

    mon champs type d'activité peut comprendre plusieurs valeurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $type_activite = "3;5;29;";
    Dois-je envoyer le mail en me basant à partir du $_POST du formulaire pour récupérer les activités (méthode que j'utilise actuellement) ou dois-je envoyer le mail à partir de l'enregistrement en base pour faire un affichage du dernier enregistrement ?

    perso je fais un foreach
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $type_activite = $_POST['type_actvite'];
    foreach($type_activite as $Valuectivite){
     
    $nouvellevaleur = $Valuectivite;
    }
     
      $sql_membres = 'select jcba.email, jcba.activite from commite jcba where jcba.activite LIKE "%'.$nouvellevaleur.'%"';
    Par contre il faudrait que je fasse un for pour passer toutes les valeurs dans une boucle mais je ne sais pas comme faire pour un tableau (pour l'array) de ma nouvellevaleur

    Je pense que cela donnerait quelques choses de comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $i = 0;
    $max = count( $nouvellevaleur ); 
    while( $i < $max ) {
      $sql_membres = 'select jcba.email, jcba.activite from commite jcba where jcba.activite LIKE "%'.$nouvellevaleur.'%"';	
     
    }
    L'objectif étant d'envoyer pour chaque type d'activité un mail à toutes les personnes auquel fait référence l'annonce publiée.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Bonjour,

    Excuse moi mais tes explications et ton codes sont tres confuses.
    Reprenons point par point :

    Dois-je envoyer le mail en me basant à partir du $_POST du formulaire
    De quel formulaire parles-tu ?
    Tu as une page qui lit la base, affiche un formulaire et quand tu valides envoie les mails ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $type_activite = $_POST['type_actvite'];
    foreach($type_activite as $Valuectivite){
    $nouvellevaleur = $Valuectivite;
    }
    La a chaque tour de foreach, tu ecrases $nouvellevaleur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    where jcba.activite LIKE "%'.$nouvellevaleur.'%"';
    Si les activités sont indexés numeriquement comme j'ai cru comprendre, pourquoi ne fais-tu pas = au lieu de LIKE ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $i = 0;
    $max = count( $nouvellevaleur );
    while( $i < $max ) {
    $sql_membres = 'select jcba.email, jcba.activite from commite jcba where jcba.activite LIKE "%'.$nouvellevaleur.'%"';
    }
    Si ton $i ne change pas dans la bouche, ca va tourner longtemps car $i sera toujours inférieur à $max.


    Je pense en fait que tu veux écrire un truc comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach ($_POST['type_actvite'] as $activite_id) {
    $sql_membres = 'select jcba.email, jcba.activite from commite jcba where jcba.activite=' . intval($activite_id);
    ......
    }
    ou si un seul mail est envoyé pour une série d'activités :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $lstActivites = implode(",", $_POST['type_actvite']);
    $sql_membres = 'select jcba.email, jcba.activite from commite jcba where jcba.activite IN(' . lstActivites . ')';
    ......
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 24
    Par défaut
    je vais réexpliqué :

    j'insère dans une table des annonces par le biais d'un formulaire, qui lorsque je le valide me renvoie un message m'indiquant que les informations ont bien été enregistrés dans la base.

    ce que je fais après l'insertion de ma requete cé un foreach, comme indiqué au dessus ce que je souhaite c'est quand j'ajoute une annonce, un mail personnalisable avec nom & prénom de la personne soit envoyé si dans son profil (la personne) a indiqué comme type d'activités les mêmes que ceux présent dans l'annonce créé juste avant.

    En clair : si il y a 5 types d'activités sélectionnées dans l'annonce, chaque personne qui aura au moins un des 5 types d'activités ou les 5 en commun avec ceux de son profil recevra un mail

    le champs d'activité peut comprendre plusieurs valeurs séparé par des points virgules, exemple : 56;3;59;9

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    // on decoupe la chaine 
    $lstActivites = explode(";", $_POST['type_actvite']);
     
    // on controle ce qu'on a reçu
    foreach($lstActivites as $activite_id) {
       $activites = intval($activite_id);
    }
    $sql_membres = 'select jcba.email, jcba.activite from commite jcba where jcba.activite IN(' . implode(",", $activites . ')';
    on pourrait faire un truc peut etre plus élégant avec des expressions regulieres.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 24
    Par défaut
    Ou peut on trouver des informations sur IN pour mysql ?

    J'ai fais autrement en partie mais peut etre peux tu m'éclairer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    $type_activite = '23;37;';
    if ($type_activite[strlen($type_activite)-1] == ';') {
    	$type_activite = substr($type_activite,0,-1);
    	}
    $type_activite_nv = explode(";", $type_activite);
     
     
    	for($vd=0;$vd < sizeof($type_activite_nv) ;$vd++) {
     
    	$sql_membres='select jcba.email,jcba.activite from commite jcba where jcba.activite IN ('.$type_activite_nv[$vd].')';
    	$database->setQuery($sql_membres);
    	$membres_choix = $database->loadObjectList();
     
     for($pp=0;$pp<sizeof($membres_choix);$pp++){
     $email_envoi = ''.$membres_choix[$pp]->email.';';
    }
     
          }
    Par contre ce qui est bizzare c'est que je n'ai pas le même nombre de résultat lors de l'envoi et ce que je compare en base.

    Par exemple si j'ai 2 secteurs, il va peut etre me trouver 11 personnes, quand je fais l'envoi il va en envoyer plus de 11, quand je vérifie la base en faisant la ou les requetes il m'en trouve 11, mais si je fais une comparaison entre les mails envoyés et ma base et que je recherche les emails qu'il m'a sorti en plus ceux trouvé dans la base (11), je me retrouve avec un resultat supérieur à 11. Pourtant Quand je fais une vérification dans ma table commite en faisant une recherche par email et que je vérifie si ce type d'activité est présent dans son profil, et qui est bien présent, pourquoi il ne me l'affiche pas dans les résultats de ma requete ?

    je ne sais pas si j'ai été clair.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 24
    Par défaut
    J'ai rajouté intval, et j'ai enfin le bon nombre de résultat, incroyable si tu as plus d'explications a donner ca m'intéresse en tout cas merci pour l'aide

Discussions similaires

  1. Envoi de mail PHP
    Par Raptimus dans le forum Langage
    Réponses: 2
    Dernier message: 26/06/2014, 11h41
  2. Erreur d'envoi de mails php
    Par jlb59 dans le forum Langage
    Réponses: 2
    Dernier message: 14/06/2013, 12h39
  3. Envoi de mail PHP avec mail()
    Par toinou62 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 5
    Dernier message: 12/07/2011, 14h59
  4. un envoi de mail PHP qui ne marche PRESQUE nul part
    Par laurentSc dans le forum Langage
    Réponses: 15
    Dernier message: 02/05/2011, 18h09
  5. [Mail] envoi de mail php
    Par nicordi dans le forum Langage
    Réponses: 16
    Dernier message: 31/10/2006, 00h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo