Bonjour,
Je cherche a faire une requete sql avec le nom d'une colonne qui passe dans le WHERE et qui provient d'un formulaire (select) et passer la valeur cherchée dans cette colonne dans un AND elle aussi provenant d'un formulaire, je vous dépose mon bout de code ci-dessous cela sera mieux .
if(isset($_POST'agence_id'])){
$agence = $db->quote($_POST'agence_id']);
$type_recherche = $db->quote($_POST'type_recherche']);//colonne que je doit mettre dans le WHERE
$valeur = $db->quote($_POST'valeur']);//valeur à chercher dans la colonne qui passe dans le WHERE ou le AND
$select = $db->query("SELECT reglements.date_reglement, reglements.name AS client, reglements.ra, reglements.montant, agences.name AS agences, typereglements.name
FROM ((reglements
LEFT JOIN agences ON reglements.agence_id = agences.id)
LEFT JOIN typereglements ON reglements.typereglement_id = typereglements.id)
WHERE reglements.$type_recherche=$valeur//probleme de la requete
ORDER BY ra ASC");
$recherches = $select->fetchAll();
}
merci de votre aide
Gilles
Alors c'est normale.
Dans les conditions, vous cherchez 'montant' (avec ' ) à être comparé à quelque chose. Et donc, il ne trouve pas.
Avec
$db->quote()
vous ajouté des ' qui posent problèmes
Ceci devrait le résoudre
if(isset($_POST'agence_id'])){
$agence = $_POST'agence_id'];
$type_recherche = $_POST'type_recherche'];
$valeur = $db->quote($_POST'valeur']);
$conditions = $type_recherche;
$sql = "SELECT * FROM reglements WHERE ";
if ($conditions === 'ra'){
$sql .= " ra ";
}
elseif ($conditions === 'montant'){
$sql .= " montant ";
}
else{
$sql .= " nom ";
}
$sql .= " = :bravo";
$sth = $db->prepare($sql);
var_dump($sth);
die();
}
Bonjour,
Il vous faut utiliser les requêtes préparées.
$sth = $dbh->prepare('SELECT nom, couleur, calories FROM fruit WHERE calories < :calories AND couleur = :couleur');
$sth->execute(array(':calories' => 150, ':couleur' => 'red'));
$donnees = $sth->fetchAll();
....
Doc : Pdo prepare
tout d'abords merci pour ta reponse Carouge10,
mais le soucis est que je ne vois pas comment je peux changer le WHERE c'est a dire que dans mon formulaire j'ai un select qui a 3 possiblités qui representent 3 colonnes de ma table et je voudroi qu'en fonction de ca mon WHERE soit: WHERE ra ou WHERE montant ou bien WHERE name
J'ai regarder la doc de pdo prepare mais la je cale.
merci d'avance
Gilles
Il suffit de crée la requête en amont.
$sql = "SELECT * FROM toto WHERE ";
if ($conditions === 'truc')
$sql .= " id ";
elseif ($conditions === 'machin')
$sql .= " nom ";
else
$sql .= " prenom ";
$sql .= " = :bravo";
$sth = $dbh->prepare($sql);
j ai essayer mais cela ne me mets que la derniere possibilitée du if quelque soit le l option que je prennes!!!
ai je oublier quelque chose??
je mets le var_dump que me retourne le code:
object(PDOStatement)[38]
public 'queryString' => string 'SELECT * FROM reglements WHERE nom = :bravo' (length=45)
et le code qui va avec :
if(isset($_POST'agence_id'])){
$agence = $db->quote($_POST'agence_id']);
$type_recherche = $db->quote($_POST'type_recherche']);
$valeur = $db->quote($_POST'valeur']);
$conditions = $type_recherche;
$sql = "SELECT * FROM reglements WHERE ";
if ($conditions === 'ra'){
$sql .= " ra ";
}
elseif ($conditions === 'montant'){
$sql .= " montant ";
}
else{
$sql .= " nom ";
}
$sql .= " = :bravo";
$sth = $db->prepare($sql);
var_dump($sth);
die();
}
Faites un echo de $conditions pour voir ça valeur.
Metter simplement des == au lieu des ===
Voila ce qu il sort:
avec l'echo:
'montant'
object(PDOStatement)[38]
public 'queryString' => string 'SELECT * FROM reglements WHERE nom = :bravo' (length=45)
Pour être très précis et bien identifier le problème,
quand vous faites :
echo $conditions;
vous avez : 'montant' ?
Un grand merci cela fonctionne!!
maintenant y a plus qu a executer et recuperer les donnees.