Creer une requette a partir d'un formulaire? php

voila dans une page j’ai des balises du genre :


<input type="checkbox" name="champ1" value="nom">


et dans l'autre page : if(isset($_POST['submit'])){ 

$champs_selectionnes = " id"; 

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

$champ = "champ".$i; 
if(isset($_POST[$champ])){ 
$champs_selectionnes .= ", ".$_POST[$champ]; 
} 
} 

$select = "SELECT ".$champs_selectionnes." FROM groupe"; 

echo $select; 

}

voila ben je ne comprends pas la page reste blanche !!!
Edité le 11/06/2008 à 13:43

Salut,
d’abord dans la page qui contient le formulaire, tu dois mettre des balises "form"l
ex:

<form action="cible.php" method="post">
<p>
<input type="text" name="prenom" /> <input type="submit" value="Valider" />
</p>
</form>

et puis tu fais:

$_POST['submit'] 

qui contient ce que l’utilisateur a rentré dans le formulaire.
Et le nom que tu as mis dans le formulaire est “champ1”
dans la requette, tu regardes si il y a qqch dans “champ”, tu as oublié le 1
www.siteduzero.com…
Edité le 11/06/2008 à 12:28

pour la premiere partie dsl c’est parce que j’ai juste posté une balise :ane: mais c’est bien ce que j’ai fait…et puis je pense pas avoir oublié le “1” parce que justement grave a la ligne : $champ = “champ”.$i; ca se fait tt seul … :o(

Non, il n’a pas oublié le 1, puisqu’il fait :

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

     if (isset($_POST[$champ]))
     {
          $champs_selectionnes .=  ", " . $_POST[$champ];
     }
}

Par contre, ce que je vois moi, c’est qu’une checkbox n’a pas de value : ça sert à rien, puisque ça renvoie “coché” ou “pas coché”.

Es-tu sûr d’arriver jusqu’au if(isset($_POST[‘submit’])) dans ton code ?
À ta place, je mettrais un echo avant et après ce if, vois si tu entres dans la condition !

J’ai rien dit ! En HTML, c’est vrai que si c’est coché, alors le formulaire envoie “value”, et ne l’envoie pas si c’est pas coché… :stuck_out_tongue:
Edité le 11/06/2008 à 13:56

donc selon toi je dois faire comment pour mettre des conditons dans ma requete sql en fonction des cases cochées :etonne:
grosse prise de tete :peur: :smiley:

Non non, t’as bien raison : je m’a trompé (cf. mon edit) ! En HTML, la case à cocher à bien le fonctionnement que tu exploites : si pas cochée, alors n’envoie pas la value, si cochée alors envoie la value.

Sinon, ce que je te suggère, c’est de voir si tu rentres dans tes conditions de test, comme je disais avant.
C’est en général là que ça foire quand t’as pas une valeur que tu attendais, et que t’as pas de message d’erreur quand même.
Edité le 11/06/2008 à 14:20

du coup j’ai un peu changé le code :

for($i=1;$i<4;$i++){ 
if(isset($_POST[$i])){ 
$select= $select.','.$_POST[$i]; 
	} 
}
$select = "SELECT ".$select." FROM groupe"; 
echo $select; 

et j’ai aussi modifier correctement le nom des balises ds l’autre page… :wink:
mais ce n’est pas convaincant…la il rentre ds la condition vu qu’il me renvoi : $select undefined variable a l’avant derniere ligne et donc du cou grave a mon post j’obtient : select from groupe …snif :frowning:

autremen dis je ne rentre jamais dans ma condition mais c’est pas logique …
Edité le 11/06/2008 à 14:35

Par “bien renommé les balises”, tu veux dire qu’à la place de champ1, tu as mis 1, champ2 --> 2, etc… ?

Arf… bon, alors essaye de faire un

echo $select;

à chaque passage de ta boucle for, juste après avoir mis $select à jour, histoire de voir ce que ça raconte.

oui c’est ce que je voulais dire par renommer les balises en effet…
ben en mettant l’echo apres ma condition si et bien jai ecris autant de fois que de balise : select from groupe…donc tout fonctionne a part la condition !!! :arf:

Bon, on peut donc en conclure que le isset($_POST[$i]) renvoie faux à chaque fois.
Donc faut pas appeler tes checkboxes 1, 2 et 3 tout court. Rappelle les champs1, champs2 et champs3.
Ensuite, modifie ton code PHP comme suit :


$select = "SELECT ";

for ($i = 1; $i < 4; $i++)
{ 
     if (isset($_POST['champs' . $i]))
     {
          $select .= ", " . $_POST['champs' . $i];
          echo $select;
     }
}

$select = $select . " FROM groupe";
echo $select;

Et reviens me dire ce que ça te raconte.
Edité le 11/06/2008 à 15:02

ben ca a vraiment pas fait de mal…ca fonctionne bien sauf que cette fois la value de la checkbox n’est pas prise en compte je me retrouve a chaque fois avec : select from groupe
qu’elles soient cochées ou nn :frowning:

Alors essaye de cette manière :


$select = "SELECT ";

for ($i = 1; $i < 4; $i++)
{
     $currentChamps = $_POST['champs' . $i];

     if (!empty($currentChamps))
     {
          $select .= ", " . $currentChamps;
          echo $select;
     }
}

$select .= " FROM groupe";
echo $select;

Edité le 11/06/2008 à 15:19

tjr la meme chose …sauf qu’il y a les erreurs : Undefined index: champ1 et ceci pour tout mes champs (ici jusqu’a 3 lol)…donc apparemment il les repere par rapport au formulaire…ou pas :neutre:


je suis condamné a utiliser des dizaines de SI :peur:

?

Réfléchis.

Les données POST ne sont pas forcément remplies, donc si tu as “undefined index”, tu lis ton code, tu analyse, et tu verras que c’est $_POST[‘champ’ . $i] qui n’a pas d’index “champ1”, et tu feras un test avec isset dessus ("isset($_POST[‘champ’ . $i])).

Mais non :wink:

As-tu bien bien vérifié l’orthographe ? J’ai mis un “s” à champs dans mes $_POST, et apparemment, toi tu n’en mets pas dans le nom de tes checkboxes. Or il faut que l’orthographe soit exactement la même.

Ensuite, tes <input type=“checkbox” … /> sont bien dans le formulaire <form … > qui est envoyé, et le bouton aussi ?
Aucun de tes input n’est “disabled”, et tes checkboxes sont bien toutes cochées au moment où tu envoies le formulaire ?

oui oui niveau de l’ortographe je corrigeai bien avec ces “S”
et puis oui il sont bien en enabled…au bon endroit

Heu… Sans-Nom : on est déjà passé par là.
C’est même la première chose qu’il a posté.
Le problème étant que justement, apparemment il ne retrouve pas les champs du formulaire dans $_POST…

Donc on cherche pourquoi il ne récupère pas ces “champs”.


clement1138, essaye avec ça : appelle toutes tes checkboxes “champs[]”. Ca devrait te donner ça :


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

Et adapte le code PHP de cette manière :


$select = "SELECT id";

if (isset($_POST['champs']))
{
     for ($i = 0; $i < count($_POST['champs']); $i++)
     {
          $select .= ", " . $_POST['champs'][$i];
          echo $select;
      }
}

$select .= " FROM groupe";
echo $select;

Edité le 11/06/2008 à 16:03

ben toujours le meme pb…select id from groupe…
je commence a en avoir marre :o
a quoi serve les value des checkbox si on ne peut pas les recuperer ???


et puis j'ai essayé un vieux truc : ``` if (isset($_POST['champ1'])){ echo "efzghrrrrrrrrrrrrrr"; } ```

j’ai beau le coché ya rien !!!

ce qui est etonnant aussi c’est si je met une condition du genre $_POST[‘champ1’]!=" " et bien il ne reconnait meme pas l’index champ1…donc c’est pas etonnant qu’il ne rentre jamais dans la condition vu qu’il ne sais meme pas ce que c’est que champ1

$_POST[‘champs’][ 1 ]; C’est comme ca.

Ps : et ca commence à 0
Edité le 11/06/2008 à 16:48