Pb formulaire en php

Benoit -  
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

10 réponses

Darshu Messages postés 303 Date d'inscription   Statut Membre Dernière intervention   64
 
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 :)
0
benoit
 
Salut,

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
0
Darshu Messages postés 303 Date d'inscription   Statut Membre Dernière intervention   64
 
Comme je te l'ai dit, regarde le cours sur le SQL sur ce même site, et tu comprendras comment ça marche les sélections de données ...

Et voila même le lien puisque tu ne l'a pas trouvé :

sqlrestr
0
pour_quoi_pas Messages postés 40 Date d'inscription   Statut Membre Dernière intervention   10
 
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.
0
Benoit
 
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;
0
pour_quoi_pas Messages postés 40 Date d'inscription   Statut Membre Dernière intervention   10
 
Si tu veus que l'utilisateur choisisse ce qui est extrait tu peus faire quelque chose comme ça :
$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
0

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

Posez votre question
benoit
 
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
0
Darshu Messages postés 303 Date d'inscription   Statut Membre Dernière intervention   64
 
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
<?

$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];
     } 
} 

?> 


0
Bneoit
 
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.

$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
0
Benoit
 
Bon je viens d'essayer plein de choses mais rien n'y fait, je n'arrive plus à afficher le résultat de ma requête.

Donc si Darshu était dans les parrages bon m'aider à trouver une solution, je suis preneur car vraiment je ne voit pas ou se situe l'erreur.
0
Darshu Messages postés 303 Date d'inscription   Statut Membre Dernière intervention   64
 
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 !
$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 ...
0
Benoit
 
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]; } } ?>

<?

$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];
     } 
} 

?>
 
0
Benoit
 
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:
<?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.
0
Zetomate Messages postés 11 Date d'inscription   Statut Membre Dernière intervention  
 
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
0
Darshu Messages postés 303 Date d'inscription   Statut Membre Dernière intervention   64
 
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 :)
0
Zetomate Messages postés 11 Date d'inscription   Statut Membre Dernière intervention  
 
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
0