[RESOLU] requête SQL like tous les caractères est-ce possible

Eléphant du PHP | 111 Messages

24 mai 2020, 19:49

Bonjour,

je voudrai que la BDD me donne tous les champs si jamais on ne lui fournissait pas un filtre :
if (!isset ($_POST['cat1'])){$cat1="%";}
else $cat1=$_POST['cat1'];
        
        $query = "SELECT tata, titi FROM toto where tutu='$produit' and tyty like '$cat1';";
j'ai essayé les like les =% les * mais je ne réussis pas a lui dire de chercher n'importe quoi si je ne lui dis pas quoi chercher.

Sauriez vous si c'est possible,

Je tiens à préciser que la soluce de faire une requête différente entre le if et le else est fonctionnelle, mais pas élégante. d'ou ma question
Modifié en dernier par Figuedi le 25 mai 2020, 07:45, modifié 1 fois.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

25 mai 2020, 00:43

Je ne suis pas sûr de comprendre ta question, du coup je tente ma chance :
SELECT * FROM table WHERE...
- Va te renvoyer tous les champs disponibles de chaque enregistrement correspondant à ta clause WHERE


- Un LIKE ne sert à rien si tu n'utilises pas le caractère "%" qui est un joker pour dire "0 à n" caractères.


- Tu ne peux pas faire un "*" ou un "like" sur le nom des champs, c'est impossible, il faut forcément que tu indique explicitement à SQL dans quel(s) champ(s) chercher.

- Par contre si ce que tu recherches peut être dans plusieurs champs alors il faut que tu utilises OR et non pas AND, sinon cela veut dire que SQL ne va te retourner que les résultats qui ont ton mot dans le 1er champ ET AUSSI dans le 2ème.


- Et enfin, vu que tu es débutant, teste _toujours_ tes requêtes dans phpmyadmin (en remplaçant tes variables bien sûr par des vrais mots) avant de les mettre dans du code PHP.
Tant que ta requête ne fonctionneré pas dans phpmyadmin, elle ne fonctionnera pas dans ton code.
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 111 Messages

25 mai 2020, 06:16

Merci @rthur pour ta réponse,

j'ai une variable $cat1 qui arrive ou n'arrive pas avant la requête j'aimerai que ma requête puisse etre :
Select Fruits from Table where Genre = $cat1
si $cat1 jaune il me retourne la colonne Fruits ou genre = jaune
si $cat1 est indéfini il me retourne la colonne Fruits indépendamment des différentes valeurs de genre.

En espérant avoir précisé
ce que j'ai fait et qui fonctionne :
if (!isset $cat1){  select Fruits from table }
else {select Fruits from table where Genre='$cat1',
Comme je peux avoir jusqu'à 5 variables $cat1 à $cat5 il faudrait que je fasse autant de requête que de combinaison possible sachant que cat5 peut etre définie alors que cat4 ou 3 ne le soient pas.

Ais je été un peu plus clair ?
Est ce possible ?
Merci d'avance,

Avatar du membre
Mammouth du PHP | 1609 Messages

25 mai 2020, 10:33

Salut Figuedi,

Si j'ai bien suivi, tu peux construire la requête sans écrire autant de requêtes que de combinaisons possibles.

Par exemple :
$query = 'SELECT Fruits FROM table';
$genres = [];

for ($i = 1; $i < 6; $i++)
  if (isset($_POST['cat'.$i]))
    $genres[] = addslashes($_POST['cat'.$i]);

if (count($genres) > 0)
  $query .= ' WHERE Genre IN ("'.implode('", "', $genres).'")';
Développeur web depuis + de 20 ans

Eléphant du PHP | 111 Messages

26 mai 2020, 05:13

ah oui super nickel !!!!
merci beaucoup