Bonjour,

Je me tourne vers vous car je n'arrive pas a solutionner mon probleme.

Ce que je fais

Décrivez ici votre code ou ce que vous cherchez à faire

if(isset($_GET['valeur'])){
    $conditions = ($_GET['type_recherche']);
    $valeur = $db->quote($_GET['valeur']);

    $sql = "SELECT *
                FROM invoices
                 WHERE ";
                if ($conditions == 'num_contrat')
                    $sql .= " num_contrat ";
                elseif ($conditions == 'num_sequentiel')
                    $sql .= " num_sequentiel";
                elseif ($conditions == 'element_facture_mt_facture_ttc')
                    $sql .= " element_facture_mt_facture_ttc ";
                else
                    $sql .= " client_nom ";
                $sql .= " = $valeur";

        $sth = $db->prepare($sql);
        $sth->execute();
        $search = $sth->fetchAll();
}

Ce que je veux

Je voudrais pouvoir mettre un LIKE dans la condition num_contrat, en effet je peux avoir un numero sur 9 chiffres, mais derriere ces 9 chiffres je peux avoir d'autres caractères.
je souhaiterai que ma requete quand je la fait sur le numero de contrat ressemble à ceci:
SELECT * FROM invoices WHERE num_contrat LIKE '378774992%'
mais je n'arrive pas à savoir ou je doit placer le LIKE et ou je dois placer le %... j'ai essayer tout un tas de choses mais aucune ne fonctionne.

merci par avance de votre aide.

Gilles

4 réponses


$sql = "SELECT * FROM ta_table WHERE ton_champ like :une_valeur";
$prep = $connection->prepare($sql);
$val="378774992";
$res = $prep->execute(array("ton_champ"=>$val.'%'));
$search = $res->fetchAll();
var_dump($search);

fait à l'arrache, mais ça devrait être ça :D
@plus

gilles40
Auteur

*
j'ai essayer de faire fonctionner mais j ai ce message d'erreur:

Fatal error: Uncaught Error: Call to a member function fetch() on boolean in /var/http/www/portail/agence/customers/invoice.php:33 Stack trace: #0 {main} thrown in /var/http/www/portail/agence/customers/invoice.php on line 33

j'ai verifié le nom du champ, le nom de la table mais pas d'erreurr de ce coté là.

$sql = "SELECT * FROM invoices WHERE id=:id";
    $prep = $db->prepare($sql);
    $val=2;
    $res =$prep->execute(array("id"=>2));
    $search = $res->fetchAll();
    var_dump($search);
    die();

Attention à ne pas coller les éléments contre le = car cela peut poser problème

$sql = "SELECT * FROM invoices WHERE id = :id";
gilles40
Auteur

Bonjour,

j ai résolu mon problème de cette maniere:

$sql = "SELECT *
                FROM invoices
                 WHERE ";
                if ($conditions == 'num_contrat')
                    $sql .= " num_contrat ";
                elseif ($conditions == 'num_sequentiel')
                    $sql .= " num_sequentiel ";
                elseif ($conditions == 'element_facture_mt_facture_ttc')
                    $sql .= " element_facture_mt_facture_ttc ";
                else
                    $sql .= " client_nom ";
                $sql .= " LIKE = :valeur ORDER BY num_sequentiel DESC ";

        $sth = $db->prepare($sql);
        $sth->execute(array(':valeur' => $valeur.'%'));
        $search = $sth->fetchAll();

@pierrot01 de m'avoir mis sur la voie.

@Carouge10 merci du conseil.

Bonne journée