Php :construction de requête selon variable
Résolu
razily
Messages postés
250
Date d'inscription
Statut
Membre
Dernière intervention
-
razily Messages postés 250 Date d'inscription Statut Membre Dernière intervention -
razily Messages postés 250 Date d'inscription Statut Membre Dernière intervention -
Bonjour à tous ;
mon stage évolue et là on me demande de créer des formulaires contenant des cases à cocher et des listes déroulantes et et de créer des recherches en fonction des choix de l'utilisateur .
ma première question c'est au niveau des requêtes , vu que j'exploite access je ne sais pas comment faire pour construire ne requête en fonction des variables qu'on entre ; je sais que sous mysql (voir tuto mateo ) ou sur oracle çà existe :
voici extrait exemple tuto mateo (site du zero ) pour bien comprendre ce que je vous demande :
<code >
<?php
try
{
$bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '');
}
catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}
$req = $bdd->prepare('SELECT nom, prix FROM jeux_video WHERE possesseur = ? AND prix <= ? ORDER BY prix');
$req->execute(array($_GET['possesseur'], $_GET['prix_max']));
echo '<ul>';
while ($donnees = $req->fetch())
{
echo '<li>' . $donnees['nom'] . ' (' . $donnees['prix'] . ' EUR)</li>';
}
echo '</ul>';
$req->closeCursor();
?>
</code>
notez bien l'utlisation de :
<code >
$req->execute(array($_GET['possesseur'], $_GET['prix_max']));
</code>
en géneral une requête php via access se fait comme sui :
<code >
<?php
//connection au serveur:
$cnx = odbc_connect( "DSN_personnes", "root", "" ) or die("Impossible de se connecter à la bas de donnée") ;
// requête
$sql = "SELECT * FROM personnes where Datenaissance = #Format('05-15-2010', "mm/dd/yyyy")# " ;
//exécution de la requête:
$requete = odbc_do($cnx, $sql) ;
//affichage des données:
while( $result = odbc_fetch_object( $requete ) )
{
echo("<div align=\"center\">".$result->nom." ".$result->prenom.datefr($result->Datenaissance)." <a href=\"modification3.php?idPersonne=".$result->id_personne."\">modifier</a><br>\n") ;
}
odbc_close( $cnx); // ferme la connexion
?>
</code>
mais je n'ai aucune idée de ce qu'il fallait faire pour que la requête soit comme suit et que çà marche :
<code >
// construction de requête en fonction des variables
$sql = "SELECT * FROM personnes where Datenaissance = ? " ;
</code>
Autre question , car c'est la première fois que je mène un projet de ce genre en php ; comment fait -on pour les cases à cocher : car si j'ai par exemple des cases (Automobile , habitation , sante )
il faut que j'adapte la requête en fonction des choix de l'utilisateur :
par exemple si Automobile et habitation sont cochés
il faut que je fais une requête come suit :
<code >
$sql = "SELECT * FROM contrat where type like 'Automobile' or 'habitation' " ;
je ne sais pas trop si çà peut se faire ??
</code>
si quelqu'un sait un tuto ou pourra m'apporter leur avis ; çà me fairait vraiment plaisir car il me reste quelques jours pour faire çà :-°
merci d'avance
<config>Windows Vista / Firefox 3.6.3</config
mon stage évolue et là on me demande de créer des formulaires contenant des cases à cocher et des listes déroulantes et et de créer des recherches en fonction des choix de l'utilisateur .
ma première question c'est au niveau des requêtes , vu que j'exploite access je ne sais pas comment faire pour construire ne requête en fonction des variables qu'on entre ; je sais que sous mysql (voir tuto mateo ) ou sur oracle çà existe :
voici extrait exemple tuto mateo (site du zero ) pour bien comprendre ce que je vous demande :
<code >
<?php
try
{
$bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '');
}
catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}
$req = $bdd->prepare('SELECT nom, prix FROM jeux_video WHERE possesseur = ? AND prix <= ? ORDER BY prix');
$req->execute(array($_GET['possesseur'], $_GET['prix_max']));
echo '<ul>';
while ($donnees = $req->fetch())
{
echo '<li>' . $donnees['nom'] . ' (' . $donnees['prix'] . ' EUR)</li>';
}
echo '</ul>';
$req->closeCursor();
?>
</code>
notez bien l'utlisation de :
<code >
$req->execute(array($_GET['possesseur'], $_GET['prix_max']));
</code>
en géneral une requête php via access se fait comme sui :
<code >
<?php
//connection au serveur:
$cnx = odbc_connect( "DSN_personnes", "root", "" ) or die("Impossible de se connecter à la bas de donnée") ;
// requête
$sql = "SELECT * FROM personnes where Datenaissance = #Format('05-15-2010', "mm/dd/yyyy")# " ;
//exécution de la requête:
$requete = odbc_do($cnx, $sql) ;
//affichage des données:
while( $result = odbc_fetch_object( $requete ) )
{
echo("<div align=\"center\">".$result->nom." ".$result->prenom.datefr($result->Datenaissance)." <a href=\"modification3.php?idPersonne=".$result->id_personne."\">modifier</a><br>\n") ;
}
odbc_close( $cnx); // ferme la connexion
?>
</code>
mais je n'ai aucune idée de ce qu'il fallait faire pour que la requête soit comme suit et que çà marche :
<code >
// construction de requête en fonction des variables
$sql = "SELECT * FROM personnes where Datenaissance = ? " ;
</code>
Autre question , car c'est la première fois que je mène un projet de ce genre en php ; comment fait -on pour les cases à cocher : car si j'ai par exemple des cases (Automobile , habitation , sante )
il faut que j'adapte la requête en fonction des choix de l'utilisateur :
par exemple si Automobile et habitation sont cochés
il faut que je fais une requête come suit :
<code >
$sql = "SELECT * FROM contrat where type like 'Automobile' or 'habitation' " ;
je ne sais pas trop si çà peut se faire ??
</code>
si quelqu'un sait un tuto ou pourra m'apporter leur avis ; çà me fairait vraiment plaisir car il me reste quelques jours pour faire çà :-°
merci d'avance
<config>Windows Vista / Firefox 3.6.3</config
A voir également:
- Php :construction de requête selon variable
- Easy php - Télécharger - Divers Web & Internet
- Expert php pinterest - Télécharger - Langages
- Retour a la ligne php - Forum Webmastering
- Alert php - Forum PHP
- Retour a la ligne php ✓ - Forum PHP
8 réponses
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." ;
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à...
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
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 !!
$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;
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 .