Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1677 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [Résolu] Newbie - requêtes SQL de sélection et boucle

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Résolu] Newbie - requêtes SQL de sélection et boucle

n°1739276
sneakz
Posté le 30-05-2008 à 10:20:26  profilanswer
 

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 cité 1 fois
Message édité par sneakz le 31-05-2008 à 14:26:16
mood
Publicité
Posté le 30-05-2008 à 10:20:26  profilanswer
 

n°1739283
skeye
Posté le 30-05-2008 à 10:27:46  profilanswer
 

pas compris la question. Tu cherches à faire quoi? Boucler sur les résultats de ta requête? Si oui, while(mysql_fetch_*(...)){}


---------------
Can't buy what I want because it's free -
n°1739311
Paulp
~, sweet ~
Posté le 30-05-2008 à 11:03:54  profilanswer
 

sneakz a écrit :

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.


 
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 ...

n°1739340
sneakz
Posté le 30-05-2008 à 11:55:27  profilanswer
 

La liste déroulante :
 

Code :
  1. echo "<form action='export.php' method='post'><br>
  2. Veuillez choisir une ou plusieurs valeurs<br>";
  3. echo "\t\t<select name=\"tableau[]\" size=20 style=\"width:100px\" multiple>\n";
  4. $response = mysql_query("SELECT distinct valeur FROM table" ) or die("Erreur SQL : $query<br/>".mysql_error());
  5. while ($data = mysql_fetch_array($response))
  6. {
  7. echo "<option value='$data[valeur]' name='$data[valeur]'>".$data['valeur']."</option>"; 
  8. }
  9. echo "</select><br/><br>";
  10. echo "<input type='submit' value='Valider'/>";
  11. echo "</form>";


 
$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

Message cité 1 fois
Message édité par sneakz le 30-05-2008 à 11:57:55
n°1739541
Paulp
~, sweet ~
Posté le 30-05-2008 à 22:36:54  profilanswer
 

sneakz a écrit :

La liste déroulante :
 

Code :
  1. echo "<form action='export.php' method='post'><br>
  2. Veuillez choisir une ou plusieurs valeurs<br>";
  3. echo "\t\t<select name=\"tableau[]\" size=20 style=\"width:100px\" multiple>\n";
  4. $response = mysql_query("SELECT distinct valeur FROM table" ) or die("Erreur SQL : $query<br/>".mysql_error());
  5. while ($data = mysql_fetch_array($response))
  6. {
  7. echo "<option value='$data[valeur]' name='$data[valeur]'>".$data['valeur']."</option>"; 
  8. }
  9. echo "</select><br/><br>";
  10. echo "<input type='submit' value='Valider'/>";
  11. echo "</form>";


 
$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


 
Si $tab est une string, tu peux faire
$sql_query = "select `firstname`,`lastname`,`username`,`password` from $table where `tab` IN ('".str_replace(' ',"', '",$tab)."')";

n°1739670
sneakz
Posté le 31-05-2008 à 14:24:22  profilanswer
 

J'ai finalement effectué une boucle de la façon suivante ::
 

Code :
  1. if(isset($_POST['tableau']) && !empty($_POST['tableau']))
  2. {
  3.  $col_array = $_POST['tableau'];
  4.  foreach($col_array as $value)
  5.  {
  6.    ...
  7.    $sql_query = "select `firstname`,`lastname`,`username`,`password` from table where `tab` like '$value'";
  8.    ...
  9.  }
  10. }

n°1739719
Paulp
~, sweet ~
Posté le 31-05-2008 à 17:41:01  profilanswer
 

sneakz a écrit :

J'ai finalement effectué une boucle de la façon suivante ::
 

Code :
  1. if(isset($_POST['tableau']) && !empty($_POST['tableau']))
  2. {
  3.  $col_array = $_POST['tableau'];
  4.  foreach($col_array as $value)
  5.  {
  6.    ...
  7.    $sql_query = "select `firstname`,`lastname`,`username`,`password` from table where `tab` like '$value'";
  8.    ...
  9.  }
  10. }



 
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  :sweat:  

n°1739732
sneakz
Posté le 31-05-2008 à 18:32:38  profilanswer
 

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 :
  1. $result = mysql_query($sql_query) or die("Erreur de connexion ".mysql_error());
  2. while($array = mysql_fetch_array($result))
  3.      {
  4.        echo '<pre>';
  5.        print_r($array);
  6.        echo '</pre>';
  7. }


 
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.


Message édité par sneakz le 31-05-2008 à 18:35:02

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [Résolu] Newbie - requêtes SQL de sélection et boucle

 

Sujets relatifs
[C#/SQL Server] Problème de modification de la base[SQL] Problème de compteur
SQL Server : dé-spécialiser guillemets ?[C++ et C] Lister les interfaces réseau d'un PC [resolu]
[C#.NET][pas si resolu] Colorer un ou plusieurs mots dans une textboxRequête sur opération select max
session ne marchent pas...(résolu)[RESOLU]Traduire du C++ en PHP
Plus de sujets relatifs à : [Résolu] Newbie - requêtes SQL de sélection et boucle


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR