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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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

    à+

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