Forum Clubic

Creer une requette a partir d'un formulaire? php (page 2)

si tu met

$_POST['champ1']!=" "

sa veut dire que ta variable existe et que tu peut l’utilise

par contre

isset($_POST['champ1'])

permet de verifier qu’elle existe

donc pas du tout pareil

et la valeur des textbox tu peut les recuperer exactement comme n’importe quelle zone de text.

pour ton souci essaye un truc comme sa


if (isset($_POST[''.$champ.1.''])){
ton traitement
}

voila cette solution marche pour moi
Edité le 11/06/2008 à 16:52

ptin mais sa veut dire que c’est dans mon html qu’il y a des erreurs !!! je suis aller voir sur 10 000 sites ils mettent pour verifier si la checkbox est cochée : if (isset($_POST[‘nom_checkbox"’])){ }


[quote="blopjerem"]

par contre

isset($_POST['champ1'])

permet de verifier qu’elle existe

[code]
[/quote]
je suis pas sur de ca parce que sinon je rentrerai TOUJOURS dans ma condition et la c’est jamais lol… :paf:

Et en remplaçant le isset(…) par !empty(…) dans le if ?
Avec la dernière méthode que je t’ai filé, hein !

Sinon, tu veux pas me montrer ton code HTML ? Histoire que je vois ce que ça donne ?


Ah, ouais ! T'es sous quel navigateur aussi ? Internet Explorer ?

Essaye de faire ça si c’est le cas :


<input type="checkbox" name="champs[]" id="champs[]" value="nom" />

je suis bien sur IE mais apparemment ca ne vient pas de ca nn plus tient mon html :

<b>Selectionnez la société</b><br><br>
<form action="resultat_detaille.php" method="post" enctype="text/plain">
<input type="checkbox" name="champs[]" id="champs[]" value="nom"><br>
<input type="checkbox" name="champs[]" id="champs[]"  value="prenom"><br>
<input type="checkbox" name="champs[]" id="champs[]"  value="email"><br>
<input type="submit" name="submit" value="Rechercher">
</form>

Edité le 11/06/2008 à 17:20

Pas la peine de nommer ton submit.

Et vire le enctype=“text/plain” ! La seule valeur utilisable pour le enctype d’un form est “application/x-www-form-urlencoded” !! C’est pour ça qu’elle est facultative, on n’a pas le droit de mettre autre chose !

Ré-essaye sans le enctype et dis-moi ce que ça donne.
Edité le 11/06/2008 à 17:28

:sweet:

Ca veut dire quoi ? Ca passe toujours pas ? :confused:

ben si sa y’est au depart c’etait une erreur de ma part mais ca fonctionne …ptin pour un pauvre truc serieu :grrr:
merci en tt cas :oui:

Ben, de rien. Ouais, c’est sûr que quand c’est dû à ce genre de petits détails, c’est rageant. Mais faut voir que ce petit détail là faisait que ton form envoyait les données dans un format d’encodage pas réglementaire, et donc PHP ne pouvait pas récupérer quoi que ce soit…

Et puis, vois le bon côté des choses !
Tu sais désormais que si enctype existe pour un form, c’est inutile de le saisir puisqu’on a le droit d’y mettre qu’une seule valeur.
Et t’as 25 façons différentes de récupérer la valeur de tes checkboxes, car à mon avis, elles marchent toutes très très bien !! :stuck_out_tongue:

ben voila maintenant je conais plein de chose sur les checkbox mdr…enfin bon en + j’avais senti que sa venais du html mais j’ai jamais pensé a poster mon form…enfin sa yé c’est resolu en tout cas …:p:p:p

bon autre question…je vais poster mon code et l’expliquer apres… :smiley:

$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="<a href=$resultat>$nom $prenom </a>";
	echo $resultat2.'<br><br>';
}
}
}

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 :frowning: et egalement les jointures dans le where…
enfin help je suis paumé lol

Déjà, pourquoi les boucles FOR sont imbriquées les unes dans les autres… Les checkboxes ne sont pas indépendantes, c’est ça ? Donc, pour une société, tu boucles sur les sites, et pour chaque site, tu boucles sur les services ?

Comment as-tu déclaré tes checkboxes en HTML ? Ca va être important.

ben oui c’est ca les checkbox ne sont PAS independantes…donc je les ais nommé comme ca :


<form action="resultat_detaille.php" method="post" >
<input type="checkbox" name="societe1"  value="groupe">Selectour voyages Girardot  <br>
<input type="checkbox" name="societe2"  value="autocars">Autocars Girardot<br>
......
<input type="checkbox" name="site1" value="cahlon nord">Chalon Nord<br>
<input type="checkbox" name="site2" value="dijon perrigny">Dijon Perrigny<br>
......
<input type="checkbox" name="service1" value="comite d'entreprise">Comité d'entreprise<br>
<input type="checkbox" name="service2" value="comptabilite">Comptabilité <br>
....
<input type="submit" name="submit" value="Rechercher">

voila mon code html…bon bien sur j’ai pas mises toutes les balises :D:D d’ou les ‘…’

Ok, donc tu n’as pas de lien réel quand même, puisqu’apparemment, chaque entreprise n’a pas sont jeu de site, et chaque site n’a pas son jeu de service…
Elles ne sont liées que dans ta conception de comment ça doit fonctionner.

Si elles avaient été réellement liées, t’aurais plutôt eu ça :


<form action="resultat_detaille.php" method="post" >
<input type="checkbox" name="societe1" value="groupe">Selectour voyages Girardot <br>
          <input type="checkbox" name="soc1site1" value="cahlon nord">Chalon Nord<br>
                    <input type="checkbox" name="soc1sit1service1" value="comite d'entreprise">Comité d'entreprise<br>
                    <input type="checkbox" name="soc1sit1service2" value="comptabilite">Comptabilité <br>

          <input type="checkbox" name="soc1site2" value="dijon perrigny">Dijon Perrigny<br>
                    <input type="checkbox" name="soc1sit2service1" value="comite d'entreprise">Comité d'entreprise<br>
                    <input type="checkbox" name="soc1sit2service2" value="comptabilite">Comptabilité <br>

<input type="checkbox" name="societe2" value="autocars">Autocars Girardot<br>
          <input type="checkbox" name="soc2site1" value="cahlon nord">Chalon Nord<br>
                    <input type="checkbox" name="soc2sit1service1" value="comite d'entreprise">Comité d'entreprise<br>
                    <input type="checkbox" name="soc2sit1service2" value="comptabilite">Comptabilité <br>

          <input type="checkbox" name="soc2site2" value="dijon perrigny">Dijon Perrigny<br>
                    <input type="checkbox" name="soc2sit2service1" value="comite d'entreprise">Comité d'entreprise<br>
                    <input type="checkbox" name="soc2sit2service2" value="comptabilite">Comptabilité <br>
...
...
...
<input type="submit" name="submit" value="Rechercher">

Tu vois ce que je veux dire ?

Donc en fait, elles ne sont pas vraiment liées. Tel que tu l’as fait, tu peux cocher un site ou un service sans définir de société. Ou pour n’importe quelle des X sociétés, tu peux choisir le site “Chalon Nord”, même si cette société n’a pas de site là-bas… sauf si t’as bridé en JavaScript, mais malgré tout, fondamentalement elles ne sont pas “liées”.
Edité le 12/06/2008 à 14:35

Je pense qu’il faudrait plutôt utiliser array_key_exists().

ok raynor…et oui tu as totalement raison linkovitch elles ne sont pas liees…c’est a dire dependantes des une des autres…c’est justement ce que je compte faire…pouvoir cocher n’importe quelle(s) cases…

Donc, elles ne sont pas liées et tu ne veux pas qu’elles le soient, pour pouvoir cocher n’importe quoi. Ok !
Apparemment, ce que tu veux c’est sélectionner les noms et prénoms en fonction de sociétés et sites et services choisis grâce aux checkboxes.

Alors voilà comment je ferais à ta place ! ;o)


$j = 0;
$from = "";
$where = "";

$tab_societe_added = false;
$tab_site_added = false;
$tab_service_added = false;

if(isset($_POST['submit']))
{
          $societe_selectionnes = "";
          $site_selectionnes = "";
          $service_selectionnes = "";

          for ($i = 1; $i < 4; $i++)
          {
                    $societe = "societe" . $i;

                    if (isset($_POST[$societe]))
                    {
                              if ($societe_selectionnes == "")
                              {
                                        $societe_selectionnes = "'" . $_POST[$societe] . "'";
                              }
                              else
                              {
                                        $societe_selectionnes .= ", '" . $_POST[$societe] . "'";
                              }

                              if (!$tab_societe_added)
                              {
                                        $from = "tab_societe";
                                        $tab_societe_added = true;
                              }
                    }
          }

          for ($i = 1; $i < 15; $i++)
          {
                    $site = "site" . $i;

                    if (isset($_POST[$site]))
                    {
                              if ($site_selectionnes == "")
                              {
                                        $site_selectionnes = "'" . $_POST[$site] . "'";
                              }
                              else
                              {
                                        $site_selectionnes .= ", '" . $_POST[$site] . "'";
                              }

                              if (!$tab_site_added)
                              {
                                        if ($from == "")
                                        {
                                                  $from = "tab_site";
                                        }
                                        else
                                        {
                                                  $from .= ", tab_site";
                                        }

                                        $tab_site_added = true;
                              }
                    }
          }

          for($i = 1; $i < 18; $i++)
          {
                    $service = "service" . $i; 

                    if (isset($_POST[$service]))
                    {
                              if ($service_selectionnes == "")
                              {
                                        $service_selectionnes = "'" . $_POST[$service] . "'";
                              }
                              else
                              {
                                        $service_selectionnes .= ", '" . $_POST[$service] . "'";
                              }

                              if (!$tab_service_added)
                              {
                                        if ($from == "")
                                        {
                                                  $from = "tab_service";
                                        }
                                        else
                                        {
                                                  $from .= ", tab_service";
                                        }

                                        $tab_service_added = true;
                    }
          }

          if ($tab_societe_added)
          {
                    $where = "nom_societe In (" . $societe_selectionnes . ")";
          }

          if ($tab_site_added)
          {
                    if ($where == "")
                    {
                              $where = "nom_site In (" . $site_selectionnes . ")";
                    }
                    else
                    {
                              $where .= " And nom_site In (" . $site_selectionnes . ")";
                    }
          }

          if ($tab_servie_added)
          {
                    if ($where == "")
                    {
                              $where = "nom_service In (" . $service_selectionnes . ")";
                    }
                    else
                    {
                              $where .= " And nom_service In (" . $service_selectionnes . ")";
                    }
          }

          $requete = mysql_query("select id, nom, prenom from " . $from . " where " . $where);

          while ($row = mysql_fetch_row($requete))
          {
                    $id = $row[0];
                    $nom=$row[1];
                    $prenom=$row[2];

                    if ($id > 1)
                    {
                              $j++;
                              $resultat = "fiche_perso.php?id=$id";
                              $resultat2="<a href=$resultat>$nom $prenom </a>";
                              echo $resultat2 . '<br><br>';
                    }
          }
}

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

Attention par contre : la requête telle quelle ne fait qu’un produit cartesien. Ne connaissant pas les relations des tables entres elles, je ne me suis pas permis de mettre les clauses de jointures entre elles dans le $where. Il ne faudra pas oublier de les rajouter !!! Si tu ne vois pas trop comment, faudra me filer les relations entre les tables.
Edité le 12/06/2008 à 15:52

Alors, comme ce sont les noms des gens que tu cherches, si par le plus grand des hasards, il sont stockées dans une table tab_employe, tu peux grandement simplifier le code en mettant par défaut :



$from = "tab_employe";


Et en dégageant tous les tests :



if ($from == "")
{
          xxxxxxxxxx
}
else



Et en ne laissant que la seconde branche du test, puisque $from ne sera jamais vide.

Par contre, si par exemple tu n’as choisis qu’un site, et que pour joindre la table tab_site à tab_employe, t’as besoin de tab_societe, il te faut obligatoirement rajouter ceci dans if (!$tab_site_added) :



if (!$tab_societe_added)
{
          $from .= ", tab_societe";
          $tab_societe_added = true;
}


Et pareil si la table des services à besoin de l’une des autres pour jointure, mais que tu n’as pas choisis de societe ni de site.
Edité le 12/06/2008 à 16:06

relations tu parles des clefs etrangeres dans ma BDD c’est ca ?? bon ton code n’a pas de faute (enfin oubli d’un C a service et un oubli de } mais c’est nickel) il me renvoi l’erreur habituelle Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource
mais ca c’est de ca que tu m’a parlé donc normalement…

Oui, c’est bien des relations primary keys / foreign keys dont je parle ;o)
Donc pense bien à les rajouter au niveau des clauses where.

Argh !! Et dire que je me suis relu plein de fois ! Mais je trouve que pour du code que je n’ai pas exécuté, ni testé, ni rien, je m’en sort bien avec juste un C et une } d’oubliés !! :stuck_out_tongue: