Pb formulaire en php
Benoit
-
Zetomate Messages postés 11 Date d'inscription Statut Membre Dernière intervention -
Zetomate Messages postés 11 Date d'inscription Statut Membre Dernière intervention -
Bonjour tous le monde,
C'est la première fois que je viens sur ce forum mais la sje suis totalement despere. Je suis en train de realiser une pllication php qui as la forme d'un formulaire de recherche multicriteres avec un systeme de case a cochée.
Mon problème est de créer une requete en fonction des champs cochés. Je pense que cela vient de ma récupération des données via le système $_POST.
Je joins à ce message mon code php.
<?php
$dbc=mysql_connect('localhost','root',''); //connexion mysql
mysql_select_db('essais'); //selection de la base
$famille=$_POST['famille'];
$chapitre=$_POST['chapitre'];
$depot=$_POST['depot'];
$services=$_POST['service'];
$client=$_POST['client'];
$mois=$_POST['mois'];
$annee=$_POST['annee'];
$article=$_POST['article'];
$representant=$_POST['representant'];
$activite=$_POST['activite'];
if(isset($_POST['check1'])) {
$stdfmm= "STDFMM = '".$mois."'";
}
else
{}
if(isset($_POST['check2'])) {
$stdfaa= "STDFAA = '".$annee."'";
}
else
{}
if(isset($_POST['check3'])) {
$stdepo= "STDEPO = '".$depot."'";
}
else
{}
if(isset($_POST['check4'])) {
$stacti= "STACTI = '".$activite."'";
}
else
{}
$sql = "SELECT * FROM statvene WHERE ".$stdfmm."".$stdfaa."".$stdepo."";
$res = mysql_query($sql) or die ('Erreur SQL : impossible d\'effectuer
la requête : <br />'.$sql);
$total = mysql_num_rows($res);
if ($total) {
while($row = mysql_query($res)) {
echo $row['$res'];
}
}
?>
Bien cordialement
C'est la première fois que je viens sur ce forum mais la sje suis totalement despere. Je suis en train de realiser une pllication php qui as la forme d'un formulaire de recherche multicriteres avec un systeme de case a cochée.
Mon problème est de créer une requete en fonction des champs cochés. Je pense que cela vient de ma récupération des données via le système $_POST.
Je joins à ce message mon code php.
<?php
$dbc=mysql_connect('localhost','root',''); //connexion mysql
mysql_select_db('essais'); //selection de la base
$famille=$_POST['famille'];
$chapitre=$_POST['chapitre'];
$depot=$_POST['depot'];
$services=$_POST['service'];
$client=$_POST['client'];
$mois=$_POST['mois'];
$annee=$_POST['annee'];
$article=$_POST['article'];
$representant=$_POST['representant'];
$activite=$_POST['activite'];
if(isset($_POST['check1'])) {
$stdfmm= "STDFMM = '".$mois."'";
}
else
{}
if(isset($_POST['check2'])) {
$stdfaa= "STDFAA = '".$annee."'";
}
else
{}
if(isset($_POST['check3'])) {
$stdepo= "STDEPO = '".$depot."'";
}
else
{}
if(isset($_POST['check4'])) {
$stacti= "STACTI = '".$activite."'";
}
else
{}
$sql = "SELECT * FROM statvene WHERE ".$stdfmm."".$stdfaa."".$stdepo."";
$res = mysql_query($sql) or die ('Erreur SQL : impossible d\'effectuer
la requête : <br />'.$sql);
$total = mysql_num_rows($res);
if ($total) {
while($row = mysql_query($res)) {
echo $row['$res'];
}
}
?>
Bien cordialement
A voir également:
- Pb formulaire en php
- Whatsapp formulaire opposition - Guide
- Formulaire de réclamation facebook - Guide
- Formulaire de reclamation instagram - Guide
- Easy php - Télécharger - Divers Web & Internet
- Confirmer le nouvel envoi du formulaire err_cache_miss - Forum Webmastering
10 réponses
Salut.
Le problème vient de ta requête. Ca ne veut rien dire de faire WHERE $var (surtout que lesdites variables ne sont pas forcément définies puisque dans tes else tu ne les renseigne pas, ce qui te génèrera des erreurs). Il faut faire WHERE champ = $var par exemple, avec LIKE.
Regarde sur ce site le cours sur le SQL pour apprendre les requêtes :)
Le problème vient de ta requête. Ca ne veut rien dire de faire WHERE $var (surtout que lesdites variables ne sont pas forcément définies puisque dans tes else tu ne les renseigne pas, ce qui te génèrera des erreurs). Il faut faire WHERE champ = $var par exemple, avec LIKE.
Regarde sur ce site le cours sur le SQL pour apprendre les requêtes :)
Salut,
pas besoin de te prendre trop la tête, essayes déjà (comme te l'a judicieusement fait remarquer Darshu) de mettre une valeur par défaut pour les variables que tu utilises dans ta requête (au cas où tu ne passes pas dans tes if) et de revoir ton WHERE :
- WHERE monchamp = $mavar
- WHERE monchamp LIKE 'mavaleur' (le like c'est plutôt à utiliser pour des string, à combiner avec les caractères joker % et autres)
Si tu as encore des soucis précise le libellé de ton erreur ce sera plus simple.
pas besoin de te prendre trop la tête, essayes déjà (comme te l'a judicieusement fait remarquer Darshu) de mettre une valeur par défaut pour les variables que tu utilises dans ta requête (au cas où tu ne passes pas dans tes if) et de revoir ton WHERE :
- WHERE monchamp = $mavar
- WHERE monchamp LIKE 'mavaleur' (le like c'est plutôt à utiliser pour des string, à combiner avec les caractères joker % et autres)
Si tu as encore des soucis précise le libellé de ton erreur ce sera plus simple.
Merci je pense avoir a peut pret saisie ce que vous m'avez expliquer. Mais le probleme que j'ai se situe dans le debut de la requete avant le where. Cette partie doit etre completer en fonction des cases cochées. L'utilisateur doit pouvoir choisir ce qu'il veut extraire de la base et non la totalité d'un seul coup.
Voila ce que j'ai fait d'apres les explications precedentes
if(isset($_POST['check2'])) {
$stdfaa=$annee;
}
else
{$stdfaa="STDFAA IS NULL";
}
------
$sql = "SELECT STACTI FROM statvene WHERE STDFAA LIKE $stdfaa";
$res = mysql_query($sql) or die ('Erreur SQL : impossible d\'effectue la requête : <br />'.$sql);
$total = mysql_num_rows($res);
if ($total) {
while($row = mysql_query($res)) {
echo $row['$res'];
}
}
echo $sql;
Voila ce que j'ai fait d'apres les explications precedentes
if(isset($_POST['check2'])) {
$stdfaa=$annee;
}
else
{$stdfaa="STDFAA IS NULL";
}
------
$sql = "SELECT STACTI FROM statvene WHERE STDFAA LIKE $stdfaa";
$res = mysql_query($sql) or die ('Erreur SQL : impossible d\'effectue la requête : <br />'.$sql);
$total = mysql_num_rows($res);
if ($total) {
while($row = mysql_query($res)) {
echo $row['$res'];
}
}
echo $sql;
Si tu veus que l'utilisateur choisisse ce qui est extrait tu peus faire quelque chose comme ça :
tu continues comme ça pour les autres variables (champs)
puis tu complètes avec :
Par contre il faudra faire gaffe au cas où l'utilisateur n'a choisi aucun champ (pour vérifier ça tu peus utiliser une variable $cpt que tu incrémentes en passant dans tes if).
PS : essayes d'utiliser la balise code
$requete = "SELECT "; if (isset($mavar)) { //On ajoute le nom du champ à sélectionner (il faut que le nom du champ soit le contenu de $mavar) $requete = $requete . $mavar; }
tu continues comme ça pour les autres variables (champs)
puis tu complètes avec :
$requete = $requete . " FROM .... "
Par contre il faudra faire gaffe au cas où l'utilisateur n'a choisi aucun champ (pour vérifier ça tu peus utiliser une variable $cpt que tu incrémentes en passant dans tes if).
PS : essayes d'utiliser la balise code
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Merci de ta reponse, j'essais ca demain car la je suis sur un autre projet. Je repondrais pour savoir comment ca se passe et promis la prochain fois j'utilise la balise code
Bonne soirée
Bonne soirée
Heu, c'est encore plus confus ton truc ! Pourtant c'est assez simple à mettre en oeuvre, juste chiant car long et il faut faire attention aux guillemets mais c'est tout.
tu fais
tu fais
<? $dbc=mysql_connect('localhost','root',''); //connexion mysql mysql_select_db('essais'); //selection de la base $famille=$_POST['famille']; $chapitre=$_POST['chapitre']; $depot=$_POST['depot']; $services=$_POST['service']; $client=$_POST['client']; $mois=$_POST['mois']; $annee=$_POST['annee']; $article=$_POST['article']; $representant=$_POST['representant']; $activite=$_POST['activite']; $req = ""; if(isset($_POST['check1'])) $req .= "STDFMM = '".$mois."'"; if(isset($_POST['check2'])) $req .= "STDFAA = '".$annee."'"; if(isset($_POST['check3'])) $req .= "STDEPO = '".$depot."'"; if(isset($_POST['check4'])) $req .= "STACTI = '".$activite."'"; $sql = "SELECT * FROM statvene WHERE $req; $res = mysql_query($sql) or die ('Erreur SQL : impossible d\'effectuer la requête : <br />'.$sql); $total = mysql_num_rows($res); if ($total) { while($row = mysql_fetch_row($res)) { echo $row[0]; echo $row[1]; } } ?>
Darshu,
Merci de ta réponse. Effectivement pour les arguments situés après where j'étais mal parti por contre dans ce que tu m'a envoyé, il doit y avoir une erreur car quand je l'execute cela me renvoie du code php.
Je pense que le problème vient de la ligne $sql="SELECT....
En tous les cas merci beaucoup, j'ai plus qu'a resoudre le problème de la selection des critères en SELECT et WHERE mais je pense que cela doit etre la meme chose.
Cordialement et merci encore
Merci de ta réponse. Effectivement pour les arguments situés après where j'étais mal parti por contre dans ce que tu m'a envoyé, il doit y avoir une erreur car quand je l'execute cela me renvoie du code php.
$sql = "SELECT * FROM statvene WHERE $req; $res = mysql_query($sql) or die ('Erreur SQL : impossible d\'effectuer la requête : <br />'.$sql); $total = mysql_num_rows($res); if ($total) { while($row = mysql_fetch_row($res)) { echo $row[0]; echo $row[1]; } }
Je pense que le problème vient de la ligne $sql="SELECT....
En tous les cas merci beaucoup, j'ai plus qu'a resoudre le problème de la selection des critères en SELECT et WHERE mais je pense que cela doit etre la meme chose.
Cordialement et merci encore
Salut.
Oui effectivement j'ai fait une erreur, mais pourtant elle est pas compliquée à voir ;) Dans $sql j'ai ouvert des guillemets, mais sans les fermer !
devrait être plus correct déja. Attention cependant, ce que je t'ai donné ne PEUT pas marcher. Pour séparer des closes de WHERE, il faut mettre des virgules entre chaque condition, et regarde bien je ne l'ai pas fait. Donc il va falloir réfléchir et rajouter des tests pour rajouter les virgules ...
Un indice tout de même : prends une variable $i, que tu initialises à 0 et à chaque fois que tu rentres dans un if tu fais $i++. A la fin, $i à compté le nombre de conditions et il ne reste plus qu'à insérer les virgules au bon endroit ...
Oui effectivement j'ai fait une erreur, mais pourtant elle est pas compliquée à voir ;) Dans $sql j'ai ouvert des guillemets, mais sans les fermer !
$sql = "SELECT * FROM statvene WHERE $req";
devrait être plus correct déja. Attention cependant, ce que je t'ai donné ne PEUT pas marcher. Pour séparer des closes de WHERE, il faut mettre des virgules entre chaque condition, et regarde bien je ne l'ai pas fait. Donc il va falloir réfléchir et rajouter des tests pour rajouter les virgules ...
Un indice tout de même : prends une variable $i, que tu initialises à 0 et à chaque fois que tu rentres dans un if tu fais $i++. A la fin, $i à compté le nombre de conditions et il ne reste plus qu'à insérer les virgules au bon endroit ...
Je suis désolé de poster plusieures fois de suite mais je vous envoie le résulatas que j'obtiens quand je valide mon formulaire ainsi que le code que j'ai modifier.
Resultat : ".$sql); $total = mysql_num_rows($res); if ($total) { while($row = mysql_fetch_row($res)) { echo $row[0]; echo $row[1]; } } ?>
Resultat : ".$sql); $total = mysql_num_rows($res); if ($total) { while($row = mysql_fetch_row($res)) { echo $row[0]; echo $row[1]; } } ?>
<? $dbc=mysql_connect('localhost','root',''); //connexion mysql mysql_select_db('essais'); //selection de la base $famille=$_POST['famille']; $chapitre=$_POST['chapitre']; $depot=$_POST['depot']; $services=$_POST['service']; $client=$_POST['client']; $mois=$_POST['mois']; $annee=$_POST['annee']; $article=$_POST['article']; $representant=$_POST['representant']; $activite=$_POST['activite']; echo "bonjour"; $req = ""; if(isset($_POST['check1'])){ $req .= "STDFMM = '".$mois."'";} echo $req; if(isset($_POST['check2'])){ $req .= "AND STDFAA = '".$annee."'"; } echo $req; if(isset($_POST['check3'])){ $req .= "AND STDEPO = '".$depot."'"; } echo $req; if(isset($_POST['check4'])){ $req .= " AND STACTI = '".$activite."'";} echo $req; $sql = "SELECT STACTI FROM statvene WHERE '".$req."'"; $res = mysql_query($sql) or die ("Erreur SQL : impossible d\'effectuer la requête : <br />".$sql); $total = mysql_num_rows($res); if ($total) { while($row = mysql_fetch_row($res)) { echo $row[0]; echo $row[1]; } } ?>
Salut,
Je crois que j'ai présumer de mes forces en php, je vois à peut près ce que tu m'explique Marshu, mais je suis totalement incapable de le mettre en pratique. Je vous demande donc un peu d'aide car la je vais pas m'en sortir à temps.
Voici comment j'ai essayer de résoudre mon problème:
PS: Mon code doit etre dégeulasse mais j'ai pas le niveau pour faire mieux, le but c'est que ca marche et seconde chose je vais pas ca pour mon plaisir c'est pour le travail.
Je crois que j'ai présumer de mes forces en php, je vois à peut près ce que tu m'explique Marshu, mais je suis totalement incapable de le mettre en pratique. Je vous demande donc un peu d'aide car la je vais pas m'en sortir à temps.
Voici comment j'ai essayer de résoudre mon problème:
<?php $dbc=mysql_connect('localhost','root',''); //connexion mysql mysql_select_db('essais'); //selection de la base $famille=$_POST['famille']; $chapitre=$_POST['chapitre']; $depot=$_POST['depot']; $services=$_POST['service']; $client=$_POST['client']; $mois=$_POST['mois']; $annee=$_POST['annee']; $article=$_POST['article']; $representant=$_POST['representant']; $activite=$_POST['activite']; if(isset($_POST['check1'])) { $check1="STDFMM,"; $stdfmm= "STDFMM = '".$mois."' AND"; } else {$check1=""; } if(isset($_POST['check2'])) { $check2="STDFAA,"; $stdfaa= "STDFAA = '".$annee."' AND"; ;} else {$check2=""; ;} if(isset($_POST['check3'])) { $check3="STDEPO,"; $stdepo= "STDEPO = '".$depot."' AND"; ;} else {$check3=""; ;} if(isset($_POST['check4'])) { $check4="STACTI"; $stacti= " STACTI = '".$activite."'"; ;} else {$check4=""; ;} $sql = "SELECT DISTINCT $check1 $check2 $check3 $check4 FROM statvene WHERE $stdepo $stdfmm $stdfaa $stacti"; $res = mysql_query($sql) or die ('Erreur SQL : impossible d\'effectuer la requête : <br />'.$sql); $total = mysql_num_rows($res); if ($total) { while($row = mysql_fetch_row($res)) { echo "$row[0]<br>"; echo " $row[1] "; echo " $row[2] "; } } echo $sql; ?>
PS: Mon code doit etre dégeulasse mais j'ai pas le niveau pour faire mieux, le but c'est que ca marche et seconde chose je vais pas ca pour mon plaisir c'est pour le travail.
Slt,
Je viens de m'inscrire car j'en avais marre de remplir mon profil à chaque fois. En tous cas j'aimerais bien avoir la syntaxe de mon problème, même si ce n'ai que pour deux lignes, j'arrivearis bien à l'adapter pour tous mes champs
Je viens de m'inscrire car j'en avais marre de remplir mon profil à chaque fois. En tous cas j'aimerais bien avoir la syntaxe de mon problème, même si ce n'ai que pour deux lignes, j'arrivearis bien à l'adapter pour tous mes champs
Hélas non, tu retombes dans les même travers qu'avant ! $stdfmm (d'ailleur quel nom à la con, désolé !) n'est pas forcément renseigné !
En outre, je t'ai dit de mettre des ; pour les conditions WHERE et pour SELECT ... Ah oui, et moi c'est Darshu et pas Marshu :)
En outre, je t'ai dit de mettre des ; pour les conditions WHERE et pour SELECT ... Ah oui, et moi c'est Darshu et pas Marshu :)
Dsl Darshu,
J'ai bien mis ; derrière where mais en fait j'ai copier/coller mon code en entier. Sinon je vais essayer de trouver une solution car la ca m'agace vraiment (peut etre passez par deux page différente, l'une ou je selectionne ce que je veut et l'autre au je choisis leszcritères).
Et sinon mon boulot c'est de travailler (jon d'été) sur un AS 400, a la base je suis pas là pour développer en PHP, mais bon c'est un autre sujet.
Par contre tu à pas un lien avec de la doc sur les boucles car je vois pas comment résoudre mon problème de virgules, AND et OR.
Cordialement
J'ai bien mis ; derrière where mais en fait j'ai copier/coller mon code en entier. Sinon je vais essayer de trouver une solution car la ca m'agace vraiment (peut etre passez par deux page différente, l'une ou je selectionne ce que je veut et l'autre au je choisis leszcritères).
Et sinon mon boulot c'est de travailler (jon d'été) sur un AS 400, a la base je suis pas là pour développer en PHP, mais bon c'est un autre sujet.
Par contre tu à pas un lien avec de la doc sur les boucles car je vois pas comment résoudre mon problème de virgules, AND et OR.
Cordialement
Oui j'ai regarder sur google mias je ne trouve pas de sujet correspondant a mon souhait. Il y a bcp de post sur la recherche monocritere mais pas sur une recherche avec selection de criteères. Mais en tous les cas je vais essayer les requetes avec le like meme si je vois pas trop comment m'y prendre.
Cordialement
Et voila même le lien puisque tu ne l'a pas trouvé :
sqlrestr