PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 15-04-2010 08:25:11

dan4
Membre
Inscription : 10-01-2010
Messages : 128

Plusieurs condition à la Clause WHERE

Bonjour, à vous tous, voici mon problème expliqué :

Hypothèse 1 :
Chercher sur plusieurs champs en local, ça marche mais pas sur le serveur distant :

$reqq1 = ("SELECT * FROM produits WHERE nocat LIKE '%$searchercher%' OR noart LIKE '%$searchercher%' OR article LIKE '%$searchercher%'  OR taille LIKE '%$searchercher%'  OR stock LIKE '%$searchercher%'  OR prix LIKE '%$searchercher%'  OR vendu LIKE '%$searchercher%'  OR details LIKE '%$searchercher%'  ORDER BY noart ASC LIMIT $limit_start,$pagination");

Hypothèse 2 :
Sur le serveur distant, je peux mettre que ceci mais je ne peux pas chercher sur plusieurs champs :

$reqq1 = ("SELECT * FROM produits WHERE nocat LIKE '%$searchercher%' ORDER BY noart ASC LIMIT $limit_start,$pagination");

Voilà, j'ai besoin que mon engin de recherche puisse chercher sur plusieurs champs, une alternative?
Etant donné que l'ajout de "OR noart LIKE '%$searchercher%' ..." supplémentaire ne fonctionne pas sur le serveur distant mais seulement en local.

J'ai besoin d'aide s.v.p merci.


Salutations smile

Hors ligne

#2 15-04-2010 09:47:26

ManicoW
Cowrespondant
Lieu : Tours
Inscription : 08-05-2009
Messages : 192
Site Web

Re : Plusieurs condition à la Clause WHERE

Bonjour,

"ne fonctionne pas", certes, mais encore ? Un message d'erreur peut etre ?

cf http://www.phpdebutant.org/article112.php , section "Problèmes avec mysql"

@+


la v2, c'est tabou, on en viendra tous a bout

Hors ligne

#3 15-04-2010 17:54:31

dan4
Membre
Inscription : 10-01-2010
Messages : 128

Re : Plusieurs condition à la Clause WHERE

Merci de votre réponse. voici les détails :

mysql_fetch_array(): supplied argument is not a valid MySQL result resource in
73 :  while ($data = mysql_fetch_array($req1))

mysql_free_result($req1);

A cause de WHERE, si je supprime les OR ... suivants, ça supprime le problème mais je ne peux plus chercher dans les autres champs.

code complet :

<?php
include 'produits_connect.php';
include 'produits_function.php';

chk($_GET['nocat']);
chk($_GET['search']);

if( isset($_GET['page']) && is_numeric($_GET['page']) )
    $page = $_GET['page'];
else
    $page = 1;
$pagination = 10;
$limit_start = ($page - 1) * $pagination;

$nb_total = mysql_query('SELECT COUNT(*) AS nb_total FROM produits');
$nb_total = mysql_fetch_array($nb_total);
$nb_total = $nb_total['nb_total'];

$nb_pages = ceil($nb_total / $pagination);

    $reqq = ("SELECT nocat, COUNT(nocat) AS nombre FROM produits GROUP BY nocat ORDER BY noart ASC");
    $req = mysql_query($reqq, $db);
   
    echo '<div id="onright2">';

      $i = 0;

      echo "<table><tr>";
      echo '<th style="width:130px;">Catégorie</th>';
      echo '<th style="width:5px;">Qté</th>';
      echo "</tr>";
   
    while ($data = mysql_fetch_array($req))
    {
      $bgcolor = ($i++ & 1) ? '#E8E8B1' : '#D7D77C';
   
      echo '<tr bgcolor='.$bgcolor.'>';
      echo '<td><a href="' . $_SERVER['PHP_SELF'] . '?nocat=' . mysql_real_escape_string($data['nocat']) .'">'.mysql_real_escape_string($data['nocat']).'</a></td><td>'. mysql_real_escape_string($data['nombre']) .'</td>';
      echo "</tr>";
    }
      echo "</tr></table>";
      echo '</div>';


    if($_GET['search'] != '' ) {
   
    $searchercher = mysql_real_escape_string(stripcslashes(htmlspecialchars($_GET['search'],ENT_QUOTES)));
    $reqq1 = ("SELECT * FROM produits WHERE nocat LIKE '%$searchercher%' details LIKE '%$searchercher%' ORDER BY noart ASC LIMIT $limit_start,$pagination");

    }
    else {
   
    $categorie = mysql_real_escape_string(stripcslashes(htmlspecialchars($_GET['nocat'],ENT_QUOTES)));
    $reqq1 = ("SELECT * FROM produits WHERE nocat='".$categorie."' ORDER BY noart ASC LIMIT $limit_start,$pagination");
    }


    $req1 = mysql_query($reqq1, $db);

      $i = 0;
        echo "<b><br /><center>Produits présentement disponibles</center><br /></b>";
        echo "<table><tr>";
        echo "<th>Catégorie</th>";
        echo "<th>No Art</th>";
        echo "<th>Article</th>";
        echo "<th>Taille</th>";
        echo "<th>Inventaire</th>";
        echo "<th>Prix</th>";
        echo "<th>Vendu</th>";
        echo "<th>Image</th>";
        echo "</tr>";

    while ($data = mysql_fetch_array($req1))
    {
      $bgcolor = ($i++ & 1) ? '#E8E8B1' : '#D7D77C';
      echo '<tr bgcolor='.$bgcolor.'>';
      echo '<td>' .mysql_real_escape_string($data['nocat']). '</td>';
      echo '<td>' .mysql_real_escape_string($data['noart']). '</td>';
      echo '<td>' .mysql_real_escape_string($data['article']). '</td>';
      echo '<td>' .mysql_real_escape_string($data['taille']). '</td>';
      echo '<td>' .mysql_real_escape_string($data['stock']). '</td>';
      echo '<td style="background:yellow;border-width:0.1em; border-color:red; border-style:double;"><b>' . mysql_real_escape_string($data["prix"]) . '</b></td>';
      echo '<td style="border-width:0.1em; border-color:red; border-style:double;">' . mysql_real_escape_string($data["vendu"]) . '</td>';
      echo '<td>' .mysql_real_escape_string($data['image']). '</td>';
      echo '</tr><tr>';
      echo '<td colspan="8" style="background:#F0EBD8;border:1px inset #000000;text-align:left;"><b>Détails : </b>' .mysql_real_escape_string($data['details']). '</td>';
    }
    echo "</tr></table>";
   
    mysql_free_result($req1);
   
    echo '<p class="pagination">' . pagination($page, $nb_pages) . '</p>';
       
mysql_close();

?>

et le formulaire :

<form name="theForm" method="get">
<input type="text" name="search">
</form>
<a href="javascript:document.theForm.submit();">Rechercher</a>

note supplémentaire :

si je supprime la variable et je mets en dur, ça fonctionne :
    $reqq1 = ("SELECT * FROM produits WHERE nocat LIKE '002' OR details LIKE '002' ORDER BY noart ASC LIMIT $limit_start,$pagination");

Mais J'ai vraiment besoin d'utiliser le formulaire.

Dernière modification par dan4 (15-04-2010 18:19:36)


Salutations smile

Hors ligne

#4 15-04-2010 18:33:40

mcAllan
Mowdérateur
Lieu : Châteaurenard en Provence
Inscription : 08-05-2009
Messages : 269

Re : Plusieurs condition à la Clause WHERE

Salut,

Pour y voir plus clair :


$req1 = mysql_query($reqq1, $db) or die(mysql_error());
 

Promotion de PPOO : Programmation Propre Orientée Objet !!
Recommande AAO : Apéritif Avec Olives...
Glop, glop

Hors ligne

#5 15-04-2010 21:19:09

Pierrot
Ancien nouveau
Inscription : 08-05-2009
Messages : 1 195

Re : Plusieurs condition à la Clause WHERE

pas besoin de mysql_error pour voir que ca :

$reqq1 = ("SELECT * FROM produits WHERE nocat LIKE '%$searchercher%' details LIKE '%$searchercher%' ORDER BY noart ASC LIMIT $limit_start,$pagination");

pas good

il manque un OR ou un AND

a++

Hors ligne

#6 16-04-2010 03:38:53

dan4
Membre
Inscription : 10-01-2010
Messages : 128

Re : Plusieurs condition à la Clause WHERE

Pierrot a écrit :

pas besoin de mysql_error pour voir que ca :

$reqq1 = ("SELECT * FROM produits WHERE nocat LIKE '%$searchercher%' details LIKE '%$searchercher%' ORDER BY noart ASC LIMIT $limit_start,$pagination");

pas good

il manque un OR ou un AND

a++

Merci Pierro et mcAllan!

J'ai corrigé cette ligne et fait quelques tests avec différentes possibilité :
Si je met ça de même :
    $reqq1 = ("SELECT * FROM produits WHERE nocat LIKE '%$searchercher%' OR noart LIKE '%$searchercher%' OR article LIKE '%$searchercher%' OR taille LIKE '%$searchercher%' OR stock LIKE '%$searchercher%' OR prix LIKE '%$searchercher%' OR vendu LIKE '%$searchercher%' OR details LIKE '%$searchercher%' ORDER BY noart ASC LIMIT $limit_start,$pagination");

ça passe pas!

Mais si je mets seulement une condition avec un OR, là oui.

Peut-etre qu'il n'est pas possible de mettre plusieurs OR avec LIKE? je sais pas, je fais des recherches pour le savoir.

Dernière modification par dan4 (16-04-2010 03:39:38)


Salutations smile

Hors ligne

#7 16-04-2010 09:44:42

mcAllan
Mowdérateur
Lieu : Châteaurenard en Provence
Inscription : 08-05-2009
Messages : 269

Re : Plusieurs condition à la Clause WHERE

Salut,

Pierrot a écrit :

pas besoin de mysql_error pour voir que ca :
...

Bien sur Pierrot mais faut bien qu'il apprenne à débugger smile

@dan4 :
" ça passe pas! " ? c'est à dire ? message d'erreur ?

A+


Promotion de PPOO : Programmation Propre Orientée Objet !!
Recommande AAO : Apéritif Avec Olives...
Glop, glop

Hors ligne

#8 16-04-2010 15:53:32

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Plusieurs condition à la Clause WHERE

Bonjour,

Outre la remarque de Pierrot qui est de rigueur concernant l'erreur de syntaxe de la requete affichée, ne connaissant pas la définition de tes variables nocat, noart, etc...  et vu que que tu les teste avec le meme paramètre $searchercher, pense à vérifier tout de même que toutes les valeurs que pourra prendre $searchercher sont compatibles avec toutes les variables que tu testes sinon l'erreur est inevitable lors de l'execution de mysql_query().

wink


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#9 16-04-2010 19:06:18

dan4
Membre
Inscription : 10-01-2010
Messages : 128

Re : Plusieurs condition à la Clause WHERE

Jc a écrit :

Bonjour,

Outre la remarque de Pierrot qui est de rigueur concernant l'erreur de syntaxe de la requete affichée, ne connaissant pas la définition de tes variables nocat, noart, etc...  et vu que que tu les teste avec le meme paramètre $searchercher, pense à vérifier tout de même que toutes les valeurs que pourra prendre $searchercher sont compatibles avec toutes les variables que tu testes sinon l'erreur est inevitable lors de l'execution de mysql_query().

wink

Merci Jc

Ma base de donnée pourrait donner une idée de ce que est nocat etc :

CREATE TABLE `produits` (
  `id` int(11) NOT NULL auto_increment,
  `nocat` varchar(12) collate latin1_general_ci NOT NULL,
  `noart` varchar(12) collate latin1_general_ci NOT NULL,
  `article` varchar(66) collate latin1_general_ci NOT NULL,
  `taille` varchar(12) collate latin1_general_ci NOT NULL,
  `stock` varchar(12) collate latin1_general_ci NOT NULL,
  `prix` varchar(12) collate latin1_general_ci NOT NULL,
  `vendu` varchar(12) collate latin1_general_ci NOT NULL,
  `details` varchar(255) collate latin1_general_ci NOT NULL,
  `image` varchar(63) collate latin1_general_ci NOT NULL,
  PRIMARY KEY  (`id`),
  FULLTEXT KEY `nocat` (`nocat`),
  FULLTEXT KEY `noart` (`noart`),
  FULLTEXT KEY `article` (`article`),
  FULLTEXT KEY `taille` (`taille`),
  FULLTEXT KEY `stock` (`stock`),
  FULLTEXT KEY `prix` (`prix`),
  FULLTEXT KEY `vendu` (`vendu`),
  FULLTEXT KEY `details` (`details`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=4 ;

--
-- Dumping data for table `produits`
--

INSERT INTO `produits` (`id`, `nocat`, `noart`, `article`, `taille`, `stock`, `prix`, `vendu`, `details`, `image`) VALUES
(1, 'test', 'test', 'test', 'test', 'test', 'testtest', '', 'test', 'test.jpg'),
(2, 'test', 'test2', 'test', 'test', 'test', 'testtest', '', 'test', 'test2.jpg'),
(3, 'ametis', 'ametis', 'ametis', 'ametis', 'ametis', 'ametis', '', 'ametis', 'ametis.jpg');

Et voici mes essais :

    $searchercher = mysql_real_escape_string(stripcslashes(htmlspecialchars($_GET['search'],ENT_QUOTES)));

    // $reqq1 = ("SELECT * FROM produits WHERE nocat OR noart OR article OR taille OR stock OR prix OR vendu OR details LIKE '%$searchercher%' ORDER BY noart ASC LIMIT $limit_start,$pagination");
    // $reqq1 = ("SELECT * FROM produits WHERE COALESCE(nocat, '') || '~' || COALESCE(noart, '') || COALESCE(article, '') || COALESCE(taille, '') || COALESCE(stock, '') || COALESCE(prix, '') || COALESCE(vendu, '') || COALESCE(details, '') LIKE '%$searchercher%' ORDER BY noart ASC LIMIT $limit_start,$pagination");
    // $reqq1 = ("SELECT * FROM produits WHERE WS_CONCAT(nocat, noart, article, taille, stock, prix, vendu, details) LIKE '%$searchercher%' ORDER BY noart ASC LIMIT $limit_start,$pagination");


    $reqq1 = ("SELECT id,MATCH (nocat,noart,article) AGAINST ('$searchercher') FROM produits ORDER BY noart ASC LIMIT $limit_start,$pagination");

En commentaire, ce sont mes essais qui ne fonctionne pas et celui qui n'est pas en commentaire ne fonctionne pas non plus.

Peut-être une restriction du fournisseur? 

Localement, toutes ces requêtes fonctionnent. Mais pas chez mon fournisseur.

Dernière modification par dan4 (16-04-2010 19:18:44)


Salutations smile

Hors ligne

#10 16-04-2010 19:21:31

dan4
Membre
Inscription : 10-01-2010
Messages : 128

Re : Plusieurs condition à la Clause WHERE

Tien, je viens de résoudre mon problème et tout fonctionne maintenant.

La solution en rapport avec mon problème :

    if($_GET['search'] != '' ) {
   
    chk($_GET['search']);
   
    $searchercher = mysql_real_escape_string(stripcslashes(htmlspecialchars($_GET['search'],ENT_QUOTES)));
    $reqq1 = ("SELECT * FROM produits WHERE nocat OR noart OR article OR taille OR stock OR prix OR vendu OR details LIKE '%$searchercher%' ORDER BY noart ASC LIMIT $limit_start,$pagination");
    }
    else {
    $categorie = mysql_real_escape_string(stripcslashes(htmlspecialchars($_GET['nocat'],ENT_QUOTES)));
    $reqq1 = ("SELECT * FROM produits WHERE nocat='".$categorie."' ORDER BY noart ASC LIMIT $limit_start,$pagination");
    }

J'ai ajouté ceci avant $searchercher :

    chk($_GET['search']);

dont la fonction est :

function chk(&$var) {
if (!isset($var))
return NULL;
else
return $var;
}

Merci pour vos interventions.


Salutations smile

Hors ligne

#11 16-04-2010 21:08:18

dan4
Membre
Inscription : 10-01-2010
Messages : 128

Re : Plusieurs condition à la Clause WHERE

Finalement, après avoir ajouté d'autres données dans la base, le résultat qui en sort n'est plus pertinent.

aucun message d'erreur.

Franchement, je ne sais plus quoi faire ni comment résoudre mon problème.

Si quelqu'un a une idée. Je suis à vous.


Salutations smile

Hors ligne

#12 17-04-2010 08:53:43

mcAllan
Mowdérateur
Lieu : Châteaurenard en Provence
Inscription : 08-05-2009
Messages : 269

Re : Plusieurs condition à la Clause WHERE

le résultat qui en sort n'est plus pertinent

C'est normal.

$reqq1 = ("SELECT * FROM produits WHERE nocat OR noart OR article OR taille OR stock OR prix OR vendu OR details LIKE '%$searchercher%' ORDER BY noart ASC LIMIT $limit_start,$pagination");

La requête n'est pas bonne !

Puisque tes champs sont FULLTEXT KEY utilise la recherche en texte intégral...

A+


Promotion de PPOO : Programmation Propre Orientée Objet !!
Recommande AAO : Apéritif Avec Olives...
Glop, glop

Hors ligne

#13 17-04-2010 12:15:42

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Plusieurs condition à la Clause WHERE

Avant de parler de requete, la définition de ta table n'est pas cohérente du tout : prix varchar(12) doit être défini par ex: prix decimal(8,2) :sinon traitements du champ impossible niveau ultérieure de tes données, etc...
Ensuite ta requete, bien que j'en comprenne le but recherché et qu'elle soit cohérente de ce point de vue, ne l'est pas du tout 1) pour les mêmes raisons que precedemment 2) syntaxe qui fonctionne (pas le temps de vérifier la tienne désolé) OR var like '%$myVar%' OR var2 like '%$myVar2%' etc... ou encore OR var like '%$myVar%' OR var2 like '%$myVar%'

De plus si tu mets que des nombres dans une variable texte (ici varchar) et que tu fais une recherche avec like avec un nombre tu auras une erreur de générée dans le cas ou tu utilises %

Dernière modification par Jc (17-04-2010 12:23:40)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#14 18-04-2010 07:43:49

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Plusieurs condition à la Clause WHERE

Tiens, tiens, nous y voilà.
Ce n'est pas faute d'avoir mis en garde l'ami dan4 contre l'approximation lors d'un précédent topic.
Les bases de données et SQL, ne font pas bon ménage avec le laxisme et l'inconséquence.
Hors d'une modélisation robuste, qui requiert un investissement intellectuel a minima, point de salut.
Mais fasse à quelqu'un qui s'entête.....


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#15 22-04-2010 06:56:02

dan4
Membre
Inscription : 10-01-2010
Messages : 128

Re : Plusieurs condition à la Clause WHERE

Jc a écrit :

Avant de parler de requete, la définition de ta table n'est pas cohérente du tout : prix varchar(12) doit être défini par ex: prix decimal(8,2) :sinon traitements du champ impossible niveau ultérieure de tes données, etc...
Ensuite ta requete, bien que j'en comprenne le but recherché et qu'elle soit cohérente de ce point de vue, ne l'est pas du tout 1) pour les mêmes raisons que precedemment 2) syntaxe qui fonctionne (pas le temps de vérifier la tienne désolé) OR var like '%$myVar%' OR var2 like '%$myVar2%' etc... ou encore OR var like '%$myVar%' OR var2 like '%$myVar%'

De plus si tu mets que des nombres dans une variable texte (ici varchar) et que tu fais une recherche avec like avec un nombre tu auras une erreur de générée dans le cas ou tu utilises %

Merci, je vais regarder ces points.

Pour l'affichage des données d'un champ, est-ce de cette façon qu'on doit faire?

Q1:
stripslashes(htmlspecialchars($data['xx'])) c'est seulement pour l'affichage?

Ex: echo stripslashes(htmlspecialchars($data['xx'])); 

C'est pour m'en assurer.

Q2:
mysql_real_escape_string(htmlspecialchars(stripcslashes($_POST['nocat']))) lorsque je fais un INSERT seulement?

Q3:
mysql_real_escape_string(htmlspecialchars(stripcslashes($_POST['nocat'])))
Cette requête ajoute des \\\ dans la base lorsque l'ont mets des apostrophe
lors de l'affichage Q1, les \\\ disparaissent sauf si je mets dans le URL les \\\,
ca va afficher la données sans toutefois les \\\.

Bien, c'est correct comme idée pour sécuriser les requêtes?

Merci pour votre réponse précédente.


Salutations smile

Hors ligne

#16 22-04-2010 06:58:46

dan4
Membre
Inscription : 10-01-2010
Messages : 128

Re : Plusieurs condition à la Clause WHERE

Maljuna Kris a écrit :

Tiens, tiens, nous y voilà.
Ce n'est pas faute d'avoir mis en garde l'ami dan4 contre l'approximation lors d'un précédent topic.
Les bases de données et SQL, ne font pas bon ménage avec le laxisme et l'inconséquence.
Hors d'une modélisation robuste, qui requiert un investissement intellectuel a minima, point de salut.
Mais fasse à quelqu'un qui s'entête.....

Mr, j'ai admis et fait mes excuses.. alors, je ne souhaite pas m'étendre sur le sujet s.v.p.  J'apprends et je souhaite continuer. Merci.


Salutations smile

Hors ligne

#17 22-04-2010 07:19:01

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Plusieurs condition à la Clause WHERE

Une erreur que j'avais pas vu sur ton code initial:

$reqq = ("SELECT nocat, COUNT(nocat) AS nombre FROM produits GROUP BY nocat ORDER BY noart ASC");

Faire un order by sur un champ qui n'est pas dans select 1)aucun interet 2)suis pas sur que ca fontionne.

Concernant la protection de tes champs contre des injections sql c'est bien, mais j'en vois pas l'interêt si ton code n'est pas solide à la base (voir les conseils épinglés par alnoss). Sur un code solide, normalement pas la peine d'echapper tes variables si tu t'assures de leurs valeurs dans tes fonctions avant de faire un insert et de même sur un select. Par contre, si l'echappement est la seule précaution que tu prends, c'est sur qu'il vaut mieux le faire (même si parfois ca peut être inutile et meme sur un login/password !!) Enfin là n'est pas le sujet, pour revenir à ton code, si le champ NOM par exemple est enregistré échappé comme suit O\\\'Reilly si tu fait un like avec la valeur non echappée O'Reilly ta requête ne matchera pas, ou pas à tous les coups. Par exemple %Reilly% matchera et %'Reil% non. Etc...

Dernière modification par Jc (22-04-2010 07:27:41)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#18 22-04-2010 07:54:25

Pierrot
Ancien nouveau
Inscription : 08-05-2009
Messages : 1 195

Re : Plusieurs condition à la Clause WHERE

>>Faire un order by sur un champ qui n'est pas dans select 1)aucun interet 2)suis pas sur que ca fontionne.

>>aucun interet
disons que tu n'en vois pas, mais dans bien des cas, c'est utiles wink

>>suis pas sur que ca fonctionne.

oui, cela fonctionne wink

@++

Hors ligne

#19 22-04-2010 18:06:35

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Plusieurs condition à la Clause WHERE

Saluton,
Comme je l'ai déjà indiqué, notamment à dan4, la syntaxe du GROUP BY de MySQL est, pour le moins, laxiste.
Donc elle accepte de faire des regroupements qui n'ont pas grande signification du point de vue strict de l'algèbre relationnelle.
Comme de nombreux débutants ne sont pas trop regardant sur la conception et la normalisation de leurs bases de données, il ne sont guère plus cohérents quant à la syntaxe de leur requêtes, et l'on voit donc fleurir des SELECT * et des GROUP BY à en veux-tu en voilà, jusqu'au jour où.....
L'informatique permet aujourd'hui de faire à peu près n'importe quoi, ça se vérifie, hélas, au quotidien:
beaucoup d'à peu près, et autant de n'importe quoi.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#20 23-04-2010 02:37:02

dan4
Membre
Inscription : 10-01-2010
Messages : 128

Re : Plusieurs condition à la Clause WHERE

Jc a écrit :

Une erreur que j'avais pas vu sur ton code initial:

$reqq = ("SELECT nocat, COUNT(nocat) AS nombre FROM produits GROUP BY nocat ORDER BY noart ASC");

Faire un order by sur un champ qui n'est pas dans select 1)aucun interet 2)suis pas sur que ca fontionne.

Concernant la protection de tes champs contre des injections sql c'est bien, mais j'en vois pas l'interêt si ton code n'est pas solide à la base (voir les conseils épinglés par alnoss). Sur un code solide, normalement pas la peine d'echapper tes variables si tu t'assures de leurs valeurs dans tes fonctions avant de faire un insert et de même sur un select. Par contre, si l'echappement est la seule précaution que tu prends, c'est sur qu'il vaut mieux le faire (même si parfois ca peut être inutile et meme sur un login/password !!) Enfin là n'est pas le sujet, pour revenir à ton code, si le champ NOM par exemple est enregistré échappé comme suit O\\\'Reilly si tu fait un like avec la valeur non echappée O'Reilly ta requête ne matchera pas, ou pas à tous les coups. Par exemple %Reilly% matchera et %'Reil% non. Etc...

Merci pour votre intervention, je vais étudier ça plus en profondeur. J'ai commencé d'ailleurs.  Je fais quelques tutoriaux afin d'approfondir le sujet pour des pratiques.


Salutations smile

Hors ligne

#21 23-04-2010 02:38:24

dan4
Membre
Inscription : 10-01-2010
Messages : 128

Re : Plusieurs condition à la Clause WHERE

Maljuna Kris a écrit :

Saluton,
Comme je l'ai déjà indiqué, notamment à dan4, la syntaxe du GROUP BY de MySQL est, pour le moins, laxiste.
Donc elle accepte de faire des regroupements qui n'ont pas grande signification du point de vue strict de l'algèbre relationnelle.
Comme de nombreux débutants ne sont pas trop regardant sur la conception et la normalisation de leurs bases de données, il ne sont guère plus cohérents quant à la syntaxe de leur requêtes, et l'on voit donc fleurir des SELECT * et des GROUP BY à en veux-tu en voilà, jusqu'au jour où.....
L'informatique permet aujourd'hui de faire à peu près n'importe quoi, ça se vérifie, hélas, au quotidien:
beaucoup d'à peu près, et autant de n'importe quoi.

Merci, je fais des tutoriaux tout en allant sur le site php.net pour les définitions et les exemples de ce site.


Salutations smile

Hors ligne

#22 23-04-2010 02:40:50

dan4
Membre
Inscription : 10-01-2010
Messages : 128

Re : Plusieurs condition à la Clause WHERE

Pierrot a écrit :

>>Faire un order by sur un champ qui n'est pas dans select 1)aucun interet 2)suis pas sur que ca fontionne.

>>aucun interet
disons que tu n'en vois pas, mais dans bien des cas, c'est utiles wink

>>suis pas sur que ca fonctionne.

oui, cela fonctionne wink

@++

Oui, ça fonctionne!


Salutations smile

Hors ligne

#23 23-04-2010 02:42:27

dan4
Membre
Inscription : 10-01-2010
Messages : 128

Re : Plusieurs condition à la Clause WHERE

Comme j'ai dit en réplique, je revois tout mon code et j'expérimente pour mieux assimiler et apprendre.


Salutations smile

Hors ligne

Pied de page des forums