Php :construction de requête selon variable
Résolu/Fermé
razily
Messages postés
250
Date d'inscription
lundi 9 mars 2009
Statut
Membre
Dernière intervention
4 décembre 2013
-
1 juin 2010 à 16:20
razily Messages postés 250 Date d'inscription lundi 9 mars 2009 Statut Membre Dernière intervention 4 décembre 2013 - 7 juin 2010 à 21:22
razily Messages postés 250 Date d'inscription lundi 9 mars 2009 Statut Membre Dernière intervention 4 décembre 2013 - 7 juin 2010 à 21:22
A voir également:
- Php :construction de requête selon variable
- Easy php - Télécharger - Divers Web & Internet
- \R php ✓ - Forum PHP
- Br php ✓ - Forum PHP
- Expert php - Télécharger - Langages
- Php echo image ✓ - Forum PHP
8 réponses
Alain_42
Messages postés
5361
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
894
1 juin 2010 à 20:58
1 juin 2010 à 20:58
pour les cases a cocher si dans ton formulaire tu mets les input ainsi
les names avec des []
tu va recuperer ce qui est coché dans un array
$array_contrat=$_POST['contrat'];
donc ensuite ta requette devient
$req="SELECT * FROM contrat where type IN ".$array_contrat." ;
les names avec des []
<input type="checkbox" name="contrat[]" value="habitation" /> habitation <input type="checkbox" name="contrat[]" value="maison" /> maison <input type="checkbox" name="contrat[]" value="sante" /> sante
tu va recuperer ce qui est coché dans un array
$array_contrat=$_POST['contrat'];
donc ensuite ta requette devient
$req="SELECT * FROM contrat where type IN ".$array_contrat." ;
caccia
Messages postés
95
Date d'inscription
mardi 21 juillet 2009
Statut
Membre
Dernière intervention
16 juin 2010
16
1 juin 2010 à 17:43
1 juin 2010 à 17:43
Salut!
Alors, je ne suis pas certain d'avoir bien compris la première partie de la question. Néanmoins, pour la seconde partie (les cases à cocher) la solution est relativement simple à mon avis:
tu as un formulaire avec cases à cocher. Chaque case a son propre "name" ("automobile", 'habitation"...). Ce "name" va être passé à la page de destination lors de l'envoie du formulaire.
Sur la page de destination du formulaire tu vas avoir une série de $_POST qui te permet de récupérer les variables envoyées par le formulaire. L'une des variables aura le nom du formulaire à choix multiples (autrement dit la partie à cocher à un nom, celui-ci est dans "id"). C'est cette variable qu'il faudra récupérer et qui aura pris la valeur de la case cochée (à savoir ce que tu auras mis dans le "name" correspondant à la case). Alors dans ta requête SQl, tu auras le nom de ta variable qui aura pris la bonne valeur.
Je ne sais pas si je suis très clair sur ce coup-là...
Alors, je ne suis pas certain d'avoir bien compris la première partie de la question. Néanmoins, pour la seconde partie (les cases à cocher) la solution est relativement simple à mon avis:
tu as un formulaire avec cases à cocher. Chaque case a son propre "name" ("automobile", 'habitation"...). Ce "name" va être passé à la page de destination lors de l'envoie du formulaire.
Sur la page de destination du formulaire tu vas avoir une série de $_POST qui te permet de récupérer les variables envoyées par le formulaire. L'une des variables aura le nom du formulaire à choix multiples (autrement dit la partie à cocher à un nom, celui-ci est dans "id"). C'est cette variable qu'il faudra récupérer et qui aura pris la valeur de la case cochée (à savoir ce que tu auras mis dans le "name" correspondant à la case). Alors dans ta requête SQl, tu auras le nom de ta variable qui aura pris la bonne valeur.
Je ne sais pas si je suis très clair sur ce coup-là...
caccia
Messages postés
95
Date d'inscription
mardi 21 juillet 2009
Statut
Membre
Dernière intervention
16 juin 2010
16
2 juin 2010 à 08:22
2 juin 2010 à 08:22
C'est vrai que c'est plus clair comme ça :)
Alain_42
Messages postés
5361
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
894
2 juin 2010 à 09:06
2 juin 2010 à 09:06
juste une précision en complément la condition WHERE IN doit être de la forme:
WHERE IN (valeur1,valeur2,valeur3, etc..)
donc ça ne marche pas directement avec l'array il faut faire un petit implode pour transformer l'array en une chaine dont les valeurs sont entre ' et séparées par des ,
WHERE IN (valeur1,valeur2,valeur3, etc..)
donc ça ne marche pas directement avec l'array il faut faire un petit implode pour transformer l'array en une chaine dont les valeurs sont entre ' et séparées par des ,
ta requette devient $req="SELECT * FROM contrat WHERE type IN (" . implode("','", $array_contrat) . ")" ;
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
razily
Messages postés
250
Date d'inscription
lundi 9 mars 2009
Statut
Membre
Dernière intervention
4 décembre 2013
2
7 juin 2010 à 11:32
7 juin 2010 à 11:32
Salut à tous ;
merci pour vos réponses , çà me fait vraiment plaisir
A+
merci pour vos réponses , çà me fait vraiment plaisir
A+
razily
Messages postés
250
Date d'inscription
lundi 9 mars 2009
Statut
Membre
Dernière intervention
4 décembre 2013
2
7 juin 2010 à 15:10
7 juin 2010 à 15:10
voilà j'ai suivi ce que vous m'avez dit en mettant
et j'ai des syntax error
apprès j'ai voulu changer le code comme suit :
resultat quand je fais echo sur $compagnie
mais c'est au niveau de la requête qui pose problème
merci !!
$compagnie =$_GET['compagnie']; $sql ="select CLI.IDCabinet,CLI.Denomination,CLI.Adresse,POL.Codeclient,POL.Codeetatpolice,POL.NumPolice,POL.CodeCompagnie from Client as CLI , Police as POL where POL.CodeCompagnie IN (" . implode("','", $compagnie) . ")" and and CLI.Num =POL.Codeclient ";
et j'ai des syntax error
apprès j'ai voulu changer le code comme suit :
// compagnie $compagnie = join(',', $_GET['compagnie']);
resultat quand je fais echo sur $compagnie
la compagnie : 1,1013,1087
mais c'est au niveau de la requête qui pose problème
select CLI.IDCabinet,CLI.Denomination,CLI.Adresse,POL.Codeclient,POL.Codeetatpolice,POL.NumPolice,POL.CodeCompagnie from Client as CLI , Police as POL where POL.CodeCompagnie IN (1,1013,1087) and and CLI.Num =POL.Codeclient Warning: odbc_do() [function.odbc-do]: SQL error: [Microsoft][Pilote ODBC Microsoft Access] Erreur de syntaxe (opérateur absent) dans l'expression « POL.CodeCompagnie IN (1,1013,1087) and and CLI.Num =POL.Codeclient »., SQL state 37000 in SQLExecDirect in C:\wamp\www\TestPhp\AvanceeCherch.php on line 63 37000
merci !!
Alain_42
Messages postés
5361
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
894
7 juin 2010 à 17:02
7 juin 2010 à 17:02
$compagnie =$_GET['compagnie']; //si le name des checkbox est bien name="compagnie[]" $sql ="SELECT CLI.IDCabinet,CLI.Denomination,CLI.Adresse,POL.Codeclient,POL.Codeetatpolice,POL.NumPolice,POL.CodeCompagnie FROM Client as CLI , Police as POL WHERE POL.CodeCompagnie IN (".implode("','", $compagnie).") AND CLI.Num = POL.Codeclient"; //pourquoi deux fois AND ? //un petit echo de la requette pour voir echo 'Requette: '.$sql;
razily
Messages postés
250
Date d'inscription
lundi 9 mars 2009
Statut
Membre
Dernière intervention
4 décembre 2013
2
7 juin 2010 à 21:22
7 juin 2010 à 21:22
Salut ;
j'ai adapté le code comme suit et çà tout en s'inspirant de ce tu m'avais dit :
afficage
en tout cas je tiens à vous remercier tous .
j'ai adapté le code comme suit et çà tout en s'inspirant de ce tu m'avais dit :
// type de contrat $contratype = join(',', $_GET['police']); // compagnie $compagnie = join(',', $_GET['compagnie']); // etat du contrat $etat =$_GET['etat']; $cnx = odbc_connect("DSN_Base","root","")or die ("impossible de se connecter a la base"); $sql ="select CLI.IDCabinet,CLI.Denomination,CLI.Adresse,POL.Codeclient,POL.Codeetatpolice,POL.NumPolice,POL.CodeCompagnie from Client as CLI , Police as POL where POL.Typedepolice IN($contratype) and POL.CodeCompagnie IN ($compagnie) and CLI.Num =POL.Codeclient and POL.Codeetatpolice= $etat group by POL.CodeCompagnie,CLI.IDCabinet,CLI.Denomination,CLI.Adresse,POL.Codeclient,POL.Codeetatpolice,POL.NumPolice "; // pour afficher la requete echo $sql. "<br />"; echo '------------------------------------'."<br />"; $requete = odbc_do($cnx,$sql)or die (odbc_error()); while ($result=odbc_fetch_object($requete)) { echo 'ID Cabinet:'.$result->IDCabinet."<br/>"; echo 'Denomination:'.$result->Denomination."<br/>"; echo 'Adresse:'.$result->Adresse."<br/>"; // echo 'Codeclient:'.$result->Codeclient."<br/>"; } odbc_close( $cnx); // ferme la connexion
afficage
Array ( [police] => Array ( [0] => 1 [1] => 3 ) [compagnie] => Array ( [0] => 122 [1] => 1074 ) [etat] => 1 [ok] => Valider ) <br/>type de contrat :1,3<br />la compagnie : 122,1074<br/>etat du constrat 1<br/>select CLI.IDCabinet,CLI.Denomination,CLI.Adresse,POL.Codeclient,POL.Codeetatpolice,POL.NumPolice,POL.CodeCompagnie from Client as CLI , Police as POL where POL.Typedepolice IN(1,3) and POL.CodeCompagnie IN (122,1074) and CLI.Num =POL.Codeclient and POL.Codeetatpolice= 1 group by POL.CodeCompagnie,CLI.IDCabinet,CLI.Denomination,CLI.Adresse,POL.Codeclient,POL.Codeetatpolice,POL.NumPolice <br />------------------------------------<br />ID Cabinet:388<br/>Denomination: Jean Marc<br/>Adresse:9 A Rue de <br/>Code etat police:En cours<br/>Numero police:605735<br/>compagnieAGF PARTICULIERS<br />------------------------------------<br />ID Cabinet:410<br/>Denomination:DOS SANTOS <br/>Adresse:12 Rue de france<br/>Code etat police:En cours<br/>Numero police:607288<br/>compagnieAGF RISQUES PARTICULIERS<br />------------------------------------<br />
en tout cas je tiens à vous remercier tous .