Creer une requete a partir d'un form

Signaler
Messages postés
52
Date d'inscription
mardi 8 février 2011
Statut
Membre
Dernière intervention
28 juillet 2011
-
Messages postés
1267
Date d'inscription
mercredi 7 juillet 2004
Statut
Membre
Dernière intervention
29 juin 2010
-
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

Messages postés
987
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
30 août 2012
24
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];
        }
}
Messages postés
52
Date d'inscription
mardi 8 février 2011
Statut
Membre
Dernière intervention
28 juillet 2011

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......
Messages postés
987
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
30 août 2012
24
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 ";


    }


}
Messages postés
1267
Date d'inscription
mercredi 7 juillet 2004
Statut
Membre
Dernière intervention
29 juin 2010
1
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 ! 
Messages postés
52
Date d'inscription
mardi 8 février 2011
Statut
Membre
Dernière intervention
28 juillet 2011

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 }
Messages postés
52
Date d'inscription
mardi 8 février 2011
Statut
Membre
Dernière intervention
28 juillet 2011

et puis comment je dois declarer les tableaux ???
Messages postés
52
Date d'inscription
mardi 8 février 2011
Statut
Membre
Dernière intervention
28 juillet 2011

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"
Messages postés
1267
Date d'inscription
mercredi 7 juillet 2004
Statut
Membre
Dernière intervention
29 juin 2010
1
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 ! 
Messages postés
1267
Date d'inscription
mercredi 7 juillet 2004
Statut
Membre
Dernière intervention
29 juin 2010
1
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 ! 
Messages postés
52
Date d'inscription
mardi 8 février 2011
Statut
Membre
Dernière intervention
28 juillet 2011

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
Messages postés
1267
Date d'inscription
mercredi 7 juillet 2004
Statut
Membre
Dernière intervention
29 juin 2010
1
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 ! 
Messages postés
52
Date d'inscription
mardi 8 février 2011
Statut
Membre
Dernière intervention
28 juillet 2011

la 1ere boucle je peux avoir 3 chose differentes !!!! c'est les bases possibles que je dois ensuite placer dans le from
Messages postés
52
Date d'inscription
mardi 8 février 2011
Statut
Membre
Dernière intervention
28 juillet 2011

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 ????
Messages postés
1267
Date d'inscription
mercredi 7 juillet 2004
Statut
Membre
Dernière intervention
29 juin 2010
1
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 !