Variable variable

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Variable variable

REMERCI

par knopstrue » 05 févr. 2006, 13:27

.....Truc trop simpha remerci ....

RE

par knops » 04 févr. 2006, 20:09

MERCI cher ami ...truc.. je vais essayer de le faire et je pense que sa devrais marché.....et pour l'echo c sûrement une erreur de ma part ...car je vous rassure TRUC je sais faire un esho sa ma requéte merci beacoup et j'éspere que sa marchera

par Truc » 04 févr. 2006, 19:55

Salut,

on devrait te mettre au palmarès des explications :pouce:

mais la solution est bien plus simple que tu ne l'imagines :wink: :
$sql="select * from xxxxx where 1 AND cat= zzzzz AND crip like \"%$tab[0]%\" ";

    for($i=1 ; $i<$nb; $i++)
        {
        $sql.=" $operateur crip like \"%$tab[$i]%\"  ";
        }

$sql .= "ORDER BY '$tri' ";
suffit de placer le tri après la boucle donc la fin de construction de la requete avec les différents mot clés.

Et juste une remarque:
Tu dis que tu nous montres le "echo" de la requete... comment se fait-il qu'il y ait des guillemets et "$sql=".

Un echo, est l'affichage de la requete générée donc:
echo $sql;
affichera la requete générée à l'exécution de la page que tu dois copier coller, pour un éventuel test dans phpmyadmin ou la montrer sur le Forum.

Variable variable

par knops » 04 févr. 2006, 19:30

Salut tout le monde, mon prob est le suivant:

-----------------------------------------------------
$nb=count($tab); ici je compte les mots clé entrer da,sle champ de recherche    //

 $sql="select * from xxxxx where 1 AND cat= zzzzz AND crip like \"%$tab[0]%\" ORDER BY '$tri' ";

    for($i=1 ; $i<$nb; $i++)
        {
        $sql.=" $operateur crip like \"%$tab[$i]%\"  ";
        }
--------------------------------------------------------------------

ceci est une requéte d'un moteur de recherche qui me fait des misères.........

( le formulaire de recherche comporte deux operateur au choix OR ou AND - boutons d'option - )
et jai ajouter un petit system de trie de données sous forme d'un lien qui envoi une variable '$trie' (name) que récupere ma requéte SQL ORDER BY '$tri'

ici si $tab est ==1 donc un seul mot exemple - géant - et sa mrche à merveille
$sql="select * from xxxxx where 1 AND cat= zzzzz AND crip like "%géant%" ORDER BY '$tri'
mais si $tab > 1 donc plus d'un seul mots l'operateur entre en action $sql.=" $operateur crip like \"%$tab[$i]%\" "; /voir le script en haut/

et là commence les problèmes, car si par exemple on entre le recherche - géant vert - avec l'operateur OR voici l'echo de ma requéte:
select * from xxxxx where 1 AND cat= zzzzz AND crip like "%géant%" ORDER BY '$tri' OR crip like "%vert%" 

comme vous le voyer ORDER BY n'a pas changé de place est là est tout le probléme, car Le critére - ORDER BY - ce met entre les des mots de la recherche ce qui rend le trie impossible - ORDER BY - DOIT fermé la marche donc étre en dérnier de la requéte pour que sa marche, alors imaginez si j'entre plus de 2 mots clé dans le formulaire de recherches par exemple - géant vert rouge - avec l'operateur OR, l'echo de ma requéte afficheras:
select * from xxxxx where 1 AND cat= zzzzz AND crip like "%géant%" ORDER BY '$tri' OR  crip like "%vert%" OR crip like "%rouge%"
sa marcheras sûrement pas......

Conclusion avec un mot clé sa marche avec plus d'un mot ORDER BY ce met entre le premier mot rechercher et les autres mot recherche et si j'ai bien compris est pour que sa marche, dans la requéte sql que voici:

 $nb=count($tab); ici je compte les mots clé entrer da,sle champ de recherche    //

    $sql="select * from xxxxx where 1 AND cat= '$zzzzz' AND crip like \"%$tab[0]%\" ORDER BY '$tri' ";

    for($i=1 ; $i<$nb; $i++)
        {
    $sql.=" $operateur crip like \"%$tab[$i]%\"  ";
        }
Premier cas:

ORDER BY '$tri' doit étre une variable qui si($nb == 1) donc un seul mot on laffiche ici:
$sql="select * from xxxxx where 1 AND cat= '$zzzzz' AND crip like \"%$tab[0]%\"  (ORDER BY '$tri') ";
 for($i=1 ; $i<$nb; $i++)
        {
    $sql.=" $operateur crip like \"%$tab[$i]%\" ";  
        }
---------------------------
deuxiéme cas:

et sinon si($nb > 1) donc plus d'un mot on l'affiche ici:
$sql="select * from xxxxx where 1 AND cat= '$zzzzz' AND crip like \"%$tab[0]%\"  ";

    for($i=1 ; $i<$nb; $i++)
        {
    $sql.=" $operateur crip like \"%$tab[$i]%\" (ORDER BY '$tri') ";  
        }
alors SVP comment faire ceci, et même si c'est possible, pour le deuxiéme cas sa pourait marché seulement si ($nb == 2)
si on chercher 2 mots exemple - géant vert - l'echo de ma requéte :
$sql="select * from xxxxx where 1 AND cat= zzzzz AND crip like "%géant%" OR crip like "%vert%" ORDER BY '$tri'

si on chercher 3 mots ou plus exemple - géant vert rouge- l'echo de ma requéte;
 $sql="select * from xxxxx where 1 AND cat= zzzzz AND crip like "%géant%" OR crip like "%vert%" ORDER BY '$tri'OR crip like  "%rouge%"
ALors SV Comme vous lez voyez j'ai besoin d'aide qlors toute proposition sera la trés-bien venue MERCI