Creer une requete a partir d'un form

clement1138 Messages postés 52 Date d'inscription mardi 8 février 2011 Statut Membre Dernière intervention 28 juillet 2011 - 12 juin 2008 à 11:52
JoJo738 Messages postés 1267 Date d'inscription mercredi 7 juillet 2004 Statut Membre Dernière intervention 29 juin 2010 - 12 juin 2008 à 16:24
bon d'abord le code apres j'explique :
$z=0;
if(isset($_POST['submit'])){ 


$societe_selectionnes = " "; 


for($i=1;$i<4;$i++){
 for($j=1;$j<15;$j++){
  for($k=1;$k<18;$k++){
  
$societe = "societe".$i; 
if(isset($_POST[$societe])){ 
$societe_selectionnes .= $_POST[$societe].','; 
} 
$site = "site".$j; 
if(isset($_POST[$site])){ 
$site_selectionnes .= ", ".$_POST[$site]; 
}
$service = "service".$k; 
if(isset($_POST[$service])){ 
$service_selectionnes .= ", ".$_POST[$service]; 
}  
 }
 }
 }
$requete=mysql_query("select id,nom,prenom from ".$societe_selectionnes."");
 while ($row=mysql_fetch_row($requete)){
    $id = $row[0];
 $nom=$row[1];
 $prenom=$row[2];
 if ($id>1){
 $z++;
    $resultat="fiche_perso.php?id=$id";
 $resultat2="$nom $prenom ";
 echo $resultat2.'

';
}
}
}


echo $z. " résultats trouvés dans la base de données";


 Voila donc en gros les 3 boucles c'est parce qu'il y a 3 types de checkbox....... puis je veux les placer dans ma requete :
pr celles de la 1ere boucles je veux que ca definissent les bases ds le FROM
2eme boucle: Une condition du where
3eme boucle: Une autre condition......
mais comment gerer sa?? par exemple le coup des virgules et egalement les jointures dans le where...
enfin help je suis paumé lol  

14 réponses

cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
12 juin 2008 à 12:31
for($i=1;$i<4;$i++){
 for($j=1;$j<15;$j++){
  for($k=1;$k<18;$k++){
  
$societe = "societe".$i;
if(isset($_POST[$societe])){
$societe_selectionnes .= $_POST[$societe].',';
}
$site = "site".$j;
if(isset($_POST[$site])){
$site_selectionnes .= ", ".$_POST[$site];
}
$service = "service".$k;
if(isset($_POST[$service])){
$service_selectionnes .= ", ".$_POST[$service];

 }
 }
 }

> pour quoi 3 boucles imbriqués ?
pourquoi je pas faire
for($i=1;$i<4;$i++){
    $societe = "societe".$i;
    if(isset($_POST[$societe])){
        $societe_selectionnes .= $_POST[$societe].',';
}
for($j=1;$j<15;$j++){
    $site = "site".$j;
    if(isset($_POST[$site])){
        $site_selectionnes .= ", ".$_POST[$site];
    }
}
for($k=1;$k<18;$k++){
        $service = "service".$k;
        if(isset($_POST[$service])){
            $service_selectionnes .= ", ".$_POST[$service];
        }
}
0
clement1138 Messages postés 52 Date d'inscription mardi 8 février 2011 Statut Membre Dernière intervention 28 juillet 2011
12 juin 2008 à 14:16
oui c'est vrai je ne suis pas obligé de les imbriqués mes boucles sa a été un peu bete car beaucoup de perte de tps d"execution...merci pour le conseil.....
mais ca ne change rien a mon pb encore......
0
cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
12 juin 2008 à 14:35
Il faut suivre le principe suivant.
$requete = "select ";
for ( $i=1; $i < 10; $i++) {
    $requete = $requete . $tableau[$i];
    if (i < 9) {
        $requete = $requete . ", ";
    }
}
$requete = $requete . " from  ";
for ( $j=1; $j < 10; $j++) {

    $requete = $requete . $tableau2[$j];

    if ($j < 9) {

        $requete = $requete . ", ";

    }

}
$requete = $requete . " where   ";

for ( $j=k; $k < 10; $k++) {


    $requete $requete ."parametere " . $tableau3[$k];


    if ($k < 9) {


        $requete = $requete . "AND ";


    }


}
0
JoJo738 Messages postés 1267 Date d'inscription mercredi 7 juillet 2004 Statut Membre Dernière intervention 29 juin 2010 2
12 juin 2008 à 14:36
Salut,

Il manque une } à ton code laurent ^^ (1ere boucle)

Par contre, peux tu m'expliquer comment fonctionne ta base de donnée ?
tu veux faire ca : SELECT id,nom,prenom FROM table WHERE seciete="societe4" AND site="site15" AND service="service18" ?

<hr />Si ma reponse te convient, merci de l'accepter ! 
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
clement1138 Messages postés 52 Date d'inscription mardi 8 février 2011 Statut Membre Dernière intervention 28 juillet 2011
12 juin 2008 à 14:40
non c'est pas ca que je veux faire.....enfin a peu pres lol.....la value de ce que je recupere dans ma premiere boucle sa va etre par exemple...svg ou vgo ou encore groupe...donc dans mon FROM j'aurais ca......ce qui correspond aux values des checkbox..... toi tu as pri les name en compte....et pui oui j'avais rectifié pour la }
0
clement1138 Messages postés 52 Date d'inscription mardi 8 février 2011 Statut Membre Dernière intervention 28 juillet 2011
12 juin 2008 à 14:41
et puis comment je dois declarer les tableaux ???
0
clement1138 Messages postés 52 Date d'inscription mardi 8 février 2011 Statut Membre Dernière intervention 28 juillet 2011
12 juin 2008 à 14:46
et puis pour expliquer un peu ma base : j'aurais un champs site ou je en sais quoi  et je veux que si la case est cochée alors j'ai qq chose du genre : where site="xxxxxxx"
0
JoJo738 Messages postés 1267 Date d'inscription mercredi 7 juillet 2004 Statut Membre Dernière intervention 29 juin 2010 2
12 juin 2008 à 14:49
Re,

dsl, je crois que j'avais mal compris.
laurent, moi je mettrais les , & AND avant, car si il n'existe pas de valeur, il n'y a pas de décalage.

$req_select = '';
for ( $i=1; $i < 10; $i++)
{
    if( isset($tableau[$i) )
    {
        if( !empty($req_select) )
        {
            $req_select .= ', ';
        }
        $req_select .= $tableau[$i];
    }
}
$req_from = '';
for ( $i=1; $i < 10; $i++)
{
    if( isset($tableau2[$i) )
    {
        if( !empty($req_from) )
        {
            $req_from .= ', ';
        }
        $req_from .= $tableau[$i];
    }
}

$req_where = '';
for ( $j=i; $i < 10; $i++)
{
    if( isset($tableau3[$i) )
    {
        if( !empty($req_where) )
        {
            $req_where .= ' AND ';
        }        $req_where .'parametere ' . $tableau3[$i];
    }
}

$sql = 'SELECT ' . $req_select . ' FROM ' . $req_from . ' WHERE ' . $req_where;

// OU
// Pas de verification ici ;). La flemme :p
$req array(0> array(), 1 => array(), 2 => array());

for ( $i=1; $i < 10; $i++)
{
    $req[0] = $tableau[$i];
}
for ( $i=1; $i < 10; $i++)
{
    $req[1] = $tableau[$i];
}
for ( $j=i; $i < 10; $i++)
{
    $req[2] = 'parametere = ' . $tableau3[$i];
}

$sql = 'SELECT ' . implode(', ', $req[0]) . ' FROM ' . implode(', ', $req[1]) . ' WHERE ' . implode(' AND ', $req[2]);

<hr />Si ma reponse te convient, merci de l'accepter ! 
0
JoJo738 Messages postés 1267 Date d'inscription mercredi 7 juillet 2004 Statut Membre Dernière intervention 29 juin 2010 2
12 juin 2008 à 14:51
Hum ... je pije pas trop ta table.

Pourrais tu faire un exemple de ce que tu voudrait que ton script retourne ?

SELECT ...

<hr />Si ma reponse te convient, merci de l'accepter ! 
0
clement1138 Messages postés 52 Date d'inscription mardi 8 février 2011 Statut Membre Dernière intervention 28 juillet 2011
12 juin 2008 à 14:59
deja juste un truc ou vs n'aver pas compris j'ai du mal m'exprimer...le select sera tjr le meme .....ya que le from et les conditions qui changent!!
sa va ressembler a sa: SELECT  id,nom,prenom FROM groupe WHERE site='chalon' and service='comptabilite' ;
 voila.....donc en gros ..1ere boucle : le FROM
2eme boucle : le site...sachant qu'il peut y en avoir plusieurs ou pas du tt
3eme boucle : le service...avec les memes conditions que le site.....
voila j'espere que j'ai été clair cette fois
0
JoJo738 Messages postés 1267 Date d'inscription mercredi 7 juillet 2004 Statut Membre Dernière intervention 29 juin 2010 2
12 juin 2008 à 15:20
D'accord.

Par contre, pour la 1er boucle ... tu as quoi comme valeur possible ? (je ne pije pas trop :s) Cela correspond aux sociétés ou c'est une valeur fixe ?

Sinon, pour le reste (je ne me suis occupé que de la boucle 2 et 3) :

$where = array();

if( isset($_POST['site']) && is_array($_POST['site']) )
{
    foreach( $_POST['site'] as $name => $value )
    {
        $where[] = 'site = "' . mysql_escape_string($value) . '"';
    }
}
if( isset($_POST['service']) && is_array($_POST['service']) )
{
    foreach( $_POST['service'] as $name => $value )
    {
        $where[] = 'service = "' . mysql_escape_string($value) . '"';
    }
}

$sql = ' SELECT id, nom, prenom FROM groupe ';
if( !empty($where) )
{
    $sql .= implode(' AND ', $where);
}
Par contre, ici, il faut faire un formulaire différent :












<hr />Si ma reponse te convient, merci de l'accepter ! 
0
clement1138 Messages postés 52 Date d'inscription mardi 8 février 2011 Statut Membre Dernière intervention 28 juillet 2011
12 juin 2008 à 15:21
la 1ere boucle je peux avoir 3 chose differentes !!!! c'est les bases possibles que je dois ensuite placer dans le from
0
clement1138 Messages postés 52 Date d'inscription mardi 8 février 2011 Statut Membre Dernière intervention 28 juillet 2011
12 juin 2008 à 15:23
donc ici vu ce que tu as mis dans "value" je vais devoir placer dans mon champs site nn plus le nom des villes mais site + 1 numéro ????
0
JoJo738 Messages postés 1267 Date d'inscription mercredi 7 juillet 2004 Statut Membre Dernière intervention 29 juin 2010 2
12 juin 2008 à 16:24
Arf, c'est que je cerne pas très bien ton problème :s (fatigué ^___^).
Euh, non. Là c'est un exemple. Tu peux mettre Arras, Paris, Lyon, Toulouse. Tu mets ce que tu veux ;) (idem pour les services).
En fait l'avantage de ce script, c'est que tu ne dois plus te soucier du  coté php. Tu rajoute un chheckbox et je script le gère automatiquement (si il existe dans la BD)

boule 1 : tu parle de id, nom, prenom ?
Id
select[]" value="nom" /> Nom
select[]" value="prenom" /> Prénom

<hr size="2" width="100%" />
$select = array();
if( isset($_POST['select']) && is_array($_POST['select']) )
{
    foreach( $_POST['select'] as $name => $value )
    {
        $where[] = mysql_escape_string($value);
    }
}
et à la place on met :
$sql = ' SELECT ' . implode(', ', $select) . ' FROM groupe ';
<hr />Si ma reponse te convient, merci de l'accepter ! 
0
Rejoignez-nous