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

12 réponses


Carouge10
Réponse acceptée

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

gilles40
Auteur

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);
gilles40
Auteur

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

gilles40
Auteur

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' ?

gilles40
Auteur

oui c est ce que j envoie de mon formulaire

gilles40
Auteur

le pire c est quand je mets la donnée manuellement ca marche???

gilles40
Auteur

Un grand merci cela fonctionne!!
maintenant y a plus qu a executer et recuperer les donnees.

Je vous en prie.
Oui, bonne continuation