Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/05/2011, 17h52   #1
Candidat au titre de Membre du Club
 
Inscription : février 2009
Messages : 94
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 94
Points : 11
Points : 11
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 :
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 :
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
claude77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2011, 17h59   #2
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
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 :
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'
";
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2011, 18h01   #3
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
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 :
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.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 11/05/2011, 22h27   #4
Candidat au titre de Membre du Club
 
Inscription : février 2009
Messages : 94
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 94
Points : 11
Points : 11
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
claude77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2011, 22h40   #5
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 278
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 278
Points : 2 324
Points : 2 324
Bonsoir,

Code php :
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
__________________
Je ne réponds pas aux questions envoyées par mp
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2011, 09h54   #6
Candidat au titre de Membre du Club
 
Inscription : février 2009
Messages : 94
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 94
Points : 11
Points : 11
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
claude77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2011, 09h58   #7
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
Pour séléctionner plusieurs status à la fois:
Code :
1
2
3
4
 
$status = array(1,2,3);
 
$query = "SELECT DISTINCT(email_adh) FROM `$table` WHERE `id_status` IN (" . implode(',', $status) . ")";
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 11
Vieux 12/05/2011, 16h56   #8
Candidat au titre de Membre du Club
 
Inscription : février 2009
Messages : 94
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 94
Points : 11
Points : 11
Merci de ta réponse, mais je ne comprends pas ce que représente le 1-2-3

dans
Code :
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

à+
claude77 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 12/05/2011, 17h31   #9
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
D'accord je documente:
Code :
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.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2011, 17h39   #10
Candidat au titre de Membre du Club
 
Inscription : février 2009
Messages : 94
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 94
Points : 11
Points : 11
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 :
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;
claude77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2011, 17h45   #11
Candidat au titre de Membre du Club
 
Inscription : février 2009
Messages : 94
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 94
Points : 11
Points : 11
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
claude77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2011, 18h20   #12
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
Citation:
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à...
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 13/05/2011, 10h12   #13
Candidat au titre de Membre du Club
 
Inscription : février 2009
Messages : 94
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 94
Points : 11
Points : 11
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
claude77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2011, 10h31   #14
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
Citation:
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/
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h02.


 
 
 
 
Partenaires

Hébergement Web