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 :

probleme de requete


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Inscrit en
    Février 2009
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 168
    Par défaut probleme de requete
    Bonjour à tous

    j'ai un problème sur un script d'envoi de mailing pour une association

    sur la table adhérents j'ai un champ statut
    1=bureau 2= admin 4=adhérents actifs 5=anciens adhérents
    à partir de ces listes j'envoie en post le choix de la liste de mailing
    sur la variable $select_statut
    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
    20
    21
    22
    23
    24
    25
    26
    27
     
    if ($select_statut == 1)
    {
    	$statut = 1 ; // email aux membres du bureau seuls
    }
    elseif ($select_statut == 2)
    {
    	$statut= 1  // email aux membres bureau + administrateurs
      or
       	$statut= 2 ;
    }
    elseif ($select_statut == 4)
    {
    	$statut= 4  // email aux adhérents
    or
    	$statut= 2  // y compris administrateurs
    	or
    	$statut= 1 ; // et membres du bureau
    }
    elseif ($select_statut == 5)
    {
    	$statut= 5 ; // email aux anciens adhérents
    }
    elseif ($select_statut == 9)
    {
    	$statut= 9 ;  // essais
    }
    la recherche n'est pas faite sur tout ls statuts
    exemple sur le select_statut 4 je devrais avoir les adhérents statut 1 + statut 2 + statut4 et je n'ai que les emails de statut 4
    en fait mon OR ne fonctionne pas

    ensuite la requête
    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
    20
    21
    22
    23
    24
    //------------------------------------------------------------------------------
    //-----------------Requete recherche des emails-------------------------------
    //------------------------------------------------------------------------------
    $requete = "
    SELECT DISTINCT email_adh
    FROM $table
    where
    id_statut= '$statut'
    ";
     
    $result = mysql_query($requete);
    $taillepaquet = mysql_num_rows($result); //Nbre Enregistrements trouvés
     
    $paquet = '';
    $paquet = array();
     
    while ($array = mysql_fetch_array($result)) {
    	$paquet[] = $array['email_adh'];
    }
    $paquet = implode(',', $paquet); // on met une virgule aprés chaque email sauf le dernier
     
    // ***********Verification de la reception des emails de la requette*******
     
    $email_bcc = $paquet;
    merci de votre aide

  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
    On fait du PHP, pas de la physique quantique.
    Une variable ne peut pas avoir une valeur au choix.

    Tu peux faire un truc comme ça :
    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
     
    if ($select_statut == 1)
    {
    	$statut = " = 1" ; // email aux membres du bureau seuls
    }
    elseif ($select_statut == 2)
    {
    	$statut = "IN (1,2)" // email aux membres bureau + administrateurs
    }
     
    $requete = "
    SELECT DISTINCT email_adh
    FROM $table
    where
    id_statut " . $statut'
    ";
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Un gros elseif dégeu ne pourrait-il pas être remplacé par un joli switch ?

    L'instruction 'or' est ici utilisée à tord, elle ne sert qu'a définir un traitement en cas d'erreur.

    Si ta recherche n'est pas faite sur tous les status, c'est parce que ta variable status est un scalaire. Il faut que tu utilise des tableaux.

    Pour faire une requête de selection sur plusieurs valeurs possibles, on utilise la clause IN. Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT machin FROM truc WHERE bidule IN (1,2,3)
    De plus ta requête est fausse.

    Je te recommande un petit coup de ce tutoriel.

  4. #4
    Membre confirmé
    Inscrit en
    Février 2009
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 168
    Par défaut
    Bonjour merci et à vous deux

    j'ai mis ton code avec IN
    même problème, pour 1 ou 5 seul ça fonctionne avec ma requête, mais pas avec la tienne ?????
    requête: ma requête fonctionne correctement pour 1 et 5
    donc il y a toujours un problème pour récupérer le cumul de 2 ou 3 Statuts
    avec IN là on ne récupère plus rien

    j'avais fait avec switch, mais le problème était identique pour récupérer plusieurs statuts

    çà fait mal une variable scalaire avec de la physique quantique????

    restons simple

    Merci d'avance et bonne soirée

  5. #5
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    Bonsoir,

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $requete = "
    SELECT DISTINCT email_adh
    FROM $table
    where
    id_statut= '$statut'";

    ton id_statut est probablement numérique donc les simples quotes sont à exclure. Quoi qu'il en soit, le IN ne doit pas être entouré de simples quotes

  6. #6
    Membre confirmé
    Inscrit en
    Février 2009
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 168
    Par défaut
    bonjour madfrix

    merci de ta réponse

    je ne vois pas de différence entre ta requête et la mienne

    si je mets des doubles cotes a la place des simples cotes

    where
    id_statut="$statut"
    ";
    j'ai une erreur de syntaxe,
    alors qu'avec les simples cotes çà fonctionne

    si tu as 5 mn pour regarder mon problème de IN, je suis vraiment coincé

    il faut envoyer séparément le mailing à chaque liste, c'est pas pratique

    Bonne journée

  7. #7
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Pour séléctionner plusieurs status à la fois:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $status = array(1,2,3);
     
    $query = "SELECT DISTINCT(email_adh) FROM `$table` WHERE `id_status` IN (" . implode(',', $status) . ")";

  8. #8
    Membre confirmé
    Inscrit en
    Février 2009
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 168
    Par défaut
    Merci de ta réponse, mais je ne comprends pas ce que représente le 1-2-3

    dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $statut = array(1,2,3);
     
    //$query = "SELECT DISTINCT(email_adh) FROM `$table` WHERE `id_statut` IN (" . implode(',', $statut) . ")";
    si tu peux prendre 5 mn pour me documenter le code qui va avant

    je galère depuis plusieurs jours sur cette dernière bricole

    à+

  9. #9
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    D'accord je documente:
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
     
    // Imaginons, mais c'est une supposition comme dirait l'autre "purement hypothétique"
    // qu'on doivent trouver des champs - très justement - nommés email_adh
    // dans une table dont on connaitrait le nom avec une variable - elle aussi
    // très justement nommée-  $table. Imaginons ensuite qu'on ne cherche pas
    // les lignes qui correspondent à un et un seul status mais bien à plusieurs
    // status. Comme si par exemple, je demandais à un marchand quels sont 
    // les produits de son magasin qui coûtent 1, 2 ou 3 euros. Tu suis jusque là ?
    // Bien ! Une variable scalaire, c'est à dire une variable dont le contenu 
    // n'est pas une série de valeurs - donc soit une chaîne de caractères
    // soit un entier soit un nombre à virgule flottante soit un booléen - ne
    // peut donc bien évidement pas convenir. Il va nous falloir utiliser une 
    // liste de valeurs, autrement dit, un tableau - encore qu'une instance
    // d'une classe dérivée de ArrayIterator peut aussi bien faire l'affaire.
    // C'est justement le but de la déclaration de la ligne ci-dessous que je vais
    // m'efforcer d'éclaircir. Le premier caractère $ (dollar) suivi d'un nombre
    // arbitraire de caractères alphanumériques commençant par une lettre
    // forment ensemble une variable. Puis, pour des besoins de lisibilité évidents
    // nous allons ajouter un espace suivi d'un caractère = (égal) qui va nous 
    // servir à initialiser notre variable avec une valeur. La directive array quand 
    // à elle va nous permettre de créer un tableau, ce qui nous est bien pratique
    // car c'est justement ce qu'on veut avoir. En suivant les directives décrites
    // dans le manuel de PHP relatif aux tableaux et à leur manipulation, on va 
    // définir trois valeurs, respectivement 1, 2 et 3. On aura au final créé une 
    // variable nommée 'status' qui contient un tableau de trois entrées, 1, 2 et 3.
    // Je reconnais toute la difficulté de compréhension que cela peut nécessiter 
    // et les connaissances solides qu'il faut avoir pour comprendre ça.
    $status = array(1,2,3);
     
    // Sur le même principe que tout à l'heure, nous allons alors créer une 
    // nouvelle variables (cf le passage sur la déclaration des variables) nommée
    // 'query' qui contrairement à sa soeur 'status' sera elle de type scalaire car
    // elle  caractérisera une chaine de caractères. Cette variable va nous servir
    // à définir ce qu'on appelle "une requête SQL". SQL signifie Simple Query
    // Langage et sert pour l'interaction entre notre script - le fichier que tu es
    // en train d'écrire avec ton éditeur favori - et la base de données que je
    // supposerai être MySQL. Un SGBD ou Système de Gestion de Bases 
    // de Données comme MySQL est un logiciel responsable de l'enregistrement
    // de données selon un processus bien spécifique qu'on dit Relationnel. Par
    // Relationnel on entends que les données sont "mises en relation" comme si
    // par exemple je demandais à notre cher commerçant de tout à l'heure
    // quels sont ses amis (ou Relations). C'est à dire qu'une donnée (notre 
    // commerçant) peut nous "mener" à d'autres données (ses amis).
    // Dans notre exemple, la requête de séléction - notre morceau de 
    // code SQL que nous allons mettre dans la variable query - ne fais pas
    // intervenir de relation (et dieu merci parce que je sens qu'on y passerait
    // la nuit) mais simplement une séléction de données selon un critère dont
    // nous verrons plus bas qu'il est défini dans la clause where. En PHP comme
    // dans de nombreux autres langages comme Java ou C, les chaines de 
    // caractères sont déclarées à l'aide du caractère " (guillemets doubles) 
    // ou ' (guillemet) avec une spécificité qui nous intéresse fortement en ce
    // moment: les variables qu'on insérera dans les chaines crées à l'aide 
    // de guillements doubles sont "interprétées" par PHP, ce qui signifie qu'elle
    // seront in-fine remplacées par leur valeur. C'est justement ce qu'on 
    // fera à l'aide de notre variable 'table'. On remarque que la chaine est 
    // découpée, la coloration syntaxique nous aide beaucoup à mettre ce genre
    // de fantaisie en relief. Ce découpage se fait à l'aide de l'opérateur '.' (point)
    // qui est en fait l'opérateur de concaténation - une concaténation est 
    // l'assemblage d'une chaine de caractères avec une autre. Cette requête
    // donne en quelque sorte un "ordre" au SGBD, ordre qui est "donne moi
    // tous les champs email_adh distincs depuis la table - dont le nom est
    // donnée par une variable - sachant qu'on ne veut que les entrée dont
    // le statut est dans cette liste." La liste étant justement ce qu'on définit
    // lors de la concaténation de la requête avec la fonction 'implode'. 
    // Implode est une fonction PHP qui permet de réunir plusieurs valeur 
    // d'une liste (notre tableau de tout à l'heure - faut suivre) en insérant
    // une chaine de caractère entre chaque élément (ou pièce dans notre
    // jargon) avant de renvoyer une chaine de caractère. On dis donc à MySQL
    // d'utiliser ces éléments comme une liste avec laquelle il doit effectuer
    // une vérification - qui dans notre cas porte sur la colonne id_status.
    // Tout cela se fait avec la magie du mot clé 'IN' en SQL et qui signifie
    // en quelque sort "est parmi".
    $query = "SELECT DISTINCT(email_adh) FROM `$table` WHERE `id_status` IN (" . implode(',', $status) . ")";
    J'espère que je n'ai rien oublié. Si tu ne comprends toujours pas, peut être faut-il reprendre les bases du langage et lire un peu de documentation.

  10. #10
    Membre confirmé
    Inscrit en
    Février 2009
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 168
    Par défaut
    Merci Benjamin

    ça fonctionne super ton affaire, un grand merci
    ci après le code qui fonctionne et peut servir à d'autres

    Bonne journée

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    // //////////////////////////////////////////////////////////////////////////////
    // **********Requete d'envoi email en fonction du statut de l'adhérent**********
    // //////////////////////////////////////////////////////////////////////////////
    //$select_statut = 9;  //pour essai
     
    $select_statut=$_GET['select_statut'];//Recuperation du statut du mailing
     
    echo "<br />";
     
    if ($select_statut == 1)
    {
    	$statut = array($select_statut = 1);
    }
    elseif ($select_statut == 2)
    {
    $statut = array($select_statut = 1,$select_statut = 2);
    }
    elseif ($select_statut == 4)
    {
    $statut = array($select_statut = 1,$select_statut = 2,$select_statut = 4);
    }
    elseif ($select_statut == 5)
    {
    $statut = array($select_statut = 5);
    }
    elseif ($select_statut == 9)
    {
    $statut = array($select_statut = 1);
    }
    //------------------------------------------------------------------------------
    //-----------------Requete recherche des emails-------------------------------
    //------------------------------------------------------------------------------
    $requete = "SELECT DISTINCT(email_adh) FROM `$table` WHERE `id_statut` IN (" . implode(',', $statut) . ")";
    $result = mysql_query($requete);
    $taillepaquet = mysql_num_rows($result); //Nbre Enregistrements trouvés
     
    $paquet = '';
    $paquet = array();
     
    while ($array = mysql_fetch_array($result)) {
    	$paquet[] = $array['email_adh'];
    }
    $paquet = implode(',', $paquet); // on met une virgule aprés chaque email sauf le dernier
     
    // ***********Verification de la reception des emails de la requette*******
     
    $email_bcc = $paquet;

  11. #11
    Membre confirmé
    Inscrit en
    Février 2009
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 168
    Par défaut
    Désolé, mais je n'avais pas vu ta prose avant mon post

    tu vois quand tu veux, tu peux commenter HI!!HI!!!!!!!!!!

    salut et merci

  12. #12
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    tu vois quand tu veux, tu peux commenter HI!!HI!!!!!!!!!!
    C'est dommage qu'il y ait pas une emote :facepalm: pour ces cas là...

  13. #13
    Membre confirmé
    Inscrit en
    Février 2009
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 168
    Par défaut
    Citation Envoyé par Benjamin Delespierre Voir le message
    C'est dommage qu'il y ait pas une emote :facepalm: pour ces cas là...

    Bonjour Benjamin

    tu vois ,tu recommences à me dire des choses désagréables
    "emote :facepalm:" ?????? kezaco?

    à 64 printemps j'apprends déjà le PHP pour le site de mon association si en plus il me faut apprendre les dialectes, HI!!!!!
    http://www.developpez.net/forums/ima...s/icon_lol.gif
    j'ai voté pour ta pertinente réponse !!!
    merci encore et bonne journée

  14. #14
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    tu vois ,tu recommences à me dire des choses désagréables
    En règle générale, on est là pour aider les utilisateurs du forum, on ne devrait pas avoir à revenir sur les mécanismes de base du langage comme je l'ai fait dans mon ironique commentaire.

    Si tu souhaite te former sur PHP, et je t'y encourage, tu trouvera nombre de tutoriels sur developpez.com:
    - http://php.developpez.com/cours/
    - http://php.developpez.com/faq/

Discussions similaires

  1. probleme de requete
    Par doudou1 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 30/04/2004, 13h42
  2. probleme avec requete sql aime pas les strings
    Par lil_jam63 dans le forum Bases de données
    Réponses: 3
    Dernier message: 24/02/2004, 14h45
  3. PROBLEME DE REQUETE IMBRIQUEE
    Par fleuve007 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 31/12/2003, 15h33
  4. probleme de requete
    Par LineLe dans le forum ASP
    Réponses: 8
    Dernier message: 17/09/2003, 16h47
  5. Probleme de requete
    Par misterbillyboy dans le forum Requêtes
    Réponses: 4
    Dernier message: 15/07/2003, 08h24

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