Newbie - requêtes SQL de sélection et boucle [Résolu] - PHP - Programmation
Marsh Posté le 30-05-2008 à 10:27:46
pas compris la question. Tu cherches à faire quoi? Boucler sur les résultats de ta requête? Si oui, while(mysql_fetch_*(...)){}
Marsh Posté le 30-05-2008 à 11:03:54
sneakz a écrit : Bonjour, |
Si $tab est un tableau, c'est assez bizarre que tu récupères quelque chose,
$sql_query = "select `firstname`,`lastname`,`username`,`password` from $table where `tab` like '$tab'" devrait renvoyer une erreur ...
La requête qu'il faut utiliser est
select `firstname`,`lastname`,`username`,`password` from $table where `tab` IN ('test1', 'test2')
Donc tu fais
$in="'".inplode("', '",$tab)."'";
inplode ("', ",$tab) concatène tous les éléments de tab en les séparant par ', ' =>test1', 'test2
$sql_query = "select `firstname`,`lastname`,`username`,`password` from $table where `tab` IN ($in)";
Au passage, si le tableau est vide, tu auras select `firstname`,`lastname`,`username`,`password` from $table where `tab` IN ('')
Ce n'est peut-être pas le résultat attendu, donc fais y attention ...
Marsh Posté le 30-05-2008 à 11:55:27
La liste déroulante :
Code :
|
$tab = $_POST['tableau']; --> $tab est le résultat de mon POST (sélection multiple à partir d'une liste déroulante ex . test1 test2
Conditions :
1) ma liste déroulante change car le contenu de table 'table' change régulièrement
2) la sélection qui plus est change
Ce que je veux faire :
1) Afficher une liste déroulante dont le contenu est issu d'une première requête SQL (cette partie là fonctionne)
2) Pouvoir sélectionner 1 ou plusieurs éléments de cette liste
Pour cela j'ai ajouter un select multiple et j'ai ajouté [] derrière le nom de la variable tableau (le nom est peut-être mal à proprié)
3) Récupérer la sélection depuis la méthode POST
$tab = $_POST['tableau'];
Paulp --> je récupère bien quelque chose (un echo placé derrière me renvoie bien test1 et test2)
4) Traiter chaque élément de ma sélection pour effectuer une requête SQL sur chacun d'eux
$sql_query = "select `firstname`,`lastname`,`username`,`password` from table where `tab` like '$tab'"; --> ma requête
J'ai pensé alors à une boucle.
5) le reste du code utilise $result et formate les données afin d'exporter un ficher csv.
J'espère que ce complément vous permettra de mieux comprendre ce que je veux faire.
Merci beaucoup
Marsh Posté le 30-05-2008 à 22:36:54
sneakz a écrit : La liste déroulante :
|
Si $tab est une string, tu peux faire
$sql_query = "select `firstname`,`lastname`,`username`,`password` from $table where `tab` IN ('".str_replace(' ',"', '",$tab)."')";
Marsh Posté le 31-05-2008 à 14:24:22
J'ai finalement effectué une boucle de la façon suivante ::
Code :
|
Marsh Posté le 31-05-2008 à 17:41:01
sneakz a écrit : J'ai finalement effectué une boucle de la façon suivante ::
|
As-tu au moins testé ce que j'ai mis ?
C'est idiot de boucler sur une requête quand une requête unique suffit
Marsh Posté le 31-05-2008 à 18:32:38
Paulp, j'avais testé et cela ne fonctionnait pas correctement. Mais je pense que naïvement j'ai placé la requête dans la boucle donc cela ne pouvait pas marcher.
Quand bien même. Je dis certainement des bétises. A travers la boucle, je dégage un "tableau" :
Code :
|
Il m'est plus facile ensuite de traiter l'export vers un csv
Si je m'en tiens uniquement à la requête, je ne vois pas comment boucler sur chaque enregistrement pour créer le fichier csv.
Je manque cruellement de connaissances, je parle donc un peu dans le vide.
Je prendrai le temps Paulp de tester à nouveau ta solution qui apparaît être plus optimale.
Marsh Posté le 30-05-2008 à 10:20:26
Bonjour,
Ci-après le problème que je rencontre :
$tab = $_POST['tableau']; --> $tab est le résultat de mon POST (sélection multiple à partir d'une liste déroulante ex . test1 test2
Actuellement, j'ai ce bout de code :
$sql_query = "select `firstname`,`lastname`,`username`,`password` from $table where `tab` like '$tab'"; --> ma requête
// récupération des données
$result = mysql_query($sql_query) or die("Erreur de connexion ".mysql_error()); --> récupération du résultat de ma requête
$fields_cnt = mysql_num_fields($result);
Cela fonctionne bien mais cela me prend en compte que la dernière sélection soit test2
Comment dois-je insérer une boucle pour que je récupère mon tri sur les 2 sélections ?
exemple :
foreach ($tab as $p) {
}
J'ai lu ici qu'il fallait éviter de placer des requêtes à l'intérieur de boucles
http://www.wikini.net/wakka.php?wi [...] mmationPhP
Pouvez-vous m'aider à insérer correctement cette boucle ? sachant que tout le reste du code utilise le contenu de la variable $result.
Message édité par sneakz le 31-05-2008 à 14:26:16