nouvelle version : $mot = valeur("mot") où valeur est cette fonction:
function Valeur ($cible, $def) {
$rep = $def;
if (isset($_POST[$cible])) { $rep =$_POST[$cible]; };
if (isset($_GET[$cible])) { $rep =$_GET[$cible]; };
return (addslashes($rep));
};
donc, je prends l'argument dans $_GET ou $_POST, je remplace les
* et ? par des équivalents SQL, et j'enlève les et ; pour me
protéger contre des infections de code. Les modifications sont
équivalentes.
Dans les deux cas, le SELECT utilise LIKE pour la comparaison.
Mais dans mon nouveau code, hébert ne trouve pas hebert !
Le champ dans la base SQL est pourtant codé comme
latin1_general_ci dans les deux cas, l'un est text et l'autre
un varchar(36). Dans les deux cas, pas d'énoncé dans l'entête
pour choisir un jeu de caractères.
nouvelle version : $mot = valeur("mot") où valeur est cette fonction:
function Valeur ($cible, $def) {
$rep = $def;
if (isset($_POST[$cible])) { $rep =$_POST[$cible]; };
if (isset($_GET[$cible])) { $rep =$_GET[$cible]; };
return (addslashes($rep));
};
donc, je prends l'argument dans $_GET ou $_POST, je remplace les
* et ? par des équivalents SQL, et j'enlève les et ; pour me
protéger contre des infections de code. Les modifications sont
équivalentes.
Dans les deux cas, le SELECT utilise LIKE pour la comparaison.
Mais dans mon nouveau code, hébert ne trouve pas hebert !
Le champ dans la base SQL est pourtant codé comme
latin1_general_ci dans les deux cas, l'un est text et l'autre
un varchar(36). Dans les deux cas, pas d'énoncé dans l'entête
pour choisir un jeu de caractères.
nouvelle version : $mot = valeur("mot") où valeur est cette fonction:
function Valeur ($cible, $def) {
$rep = $def;
if (isset($_POST[$cible])) { $rep =$_POST[$cible]; };
if (isset($_GET[$cible])) { $rep =$_GET[$cible]; };
return (addslashes($rep));
};
donc, je prends l'argument dans $_GET ou $_POST, je remplace les
* et ? par des équivalents SQL, et j'enlève les et ; pour me
protéger contre des infections de code. Les modifications sont
équivalentes.
Dans les deux cas, le SELECT utilise LIKE pour la comparaison.
Mais dans mon nouveau code, hébert ne trouve pas hebert !
Le champ dans la base SQL est pourtant codé comme
latin1_general_ci dans les deux cas, l'un est text et l'autre
un varchar(36). Dans les deux cas, pas d'énoncé dans l'entête
pour choisir un jeu de caractères.
Denis Beauregard a écrit :nouvelle version : $mot = valeur("mot") où valeur est cette fonction:
function Valeur ($cible, $def) {
$rep = $def;
if (isset($_POST[$cible])) { $rep =$_POST[$cible]; };
if (isset($_GET[$cible])) { $rep =$_GET[$cible]; };
// si tu ne fais pas la différence entre POST et GET, autant
// utiliser REQUEST
$rep = empty($_REQUEST[$cible]) ? $def : $_REQUEST[$cible] ;
// Je ne sais quel extension tu utilises, mais en gros, il FAUT utiliser
// la fonction de protection des requêtes.
//<http://kuza55.blogspot.com/2007/06/mysql-injection-encoding-attacks.html>
$rep = mysql_real_escape_string($rep) ;
$rep = str_replace(array('*', '?') ,array("%", '_'), $rep);
return (addslashes($rep));
// Les parenthèses derrière un return c'est pour dire que tu ne
comprends pas ce que tu écris ? Et addslashes, c'est le mal © (cf lien
plus haut)
};
Il n'y a pas de point-virgule à la fin de la définition d'une fonction.
donc, je prends l'argument dans $_GET ou $_POST, je remplace les
* et ? par des équivalents SQL, et j'enlève les et ; pour me
protéger contre des infections de code. Les modifications sont
équivalentes.
La protection est caduque, comme dis ci-dessus.
Dans les deux cas, le SELECT utilise LIKE pour la comparaison.
Mais dans mon nouveau code, hébert ne trouve pas hebert !
Tout d'abord, like peut mettre par terre ton serveur. C'est
extrêmement consommateur de temps CPU et de mémoire. Like ne peut,
généralement, utiliser les index lorsqu'ils existent.
Le champ dans la base SQL est pourtant codé comme
latin1_general_ci dans les deux cas, l'un est text et l'autre
un varchar(36). Dans les deux cas, pas d'énoncé dans l'entête
pour choisir un jeu de caractères.
Quel est le create de la table ? quel encoding est utilisé à la
connexion, et quel sont les encoding/charset des sources PHP ?
Denis Beauregard a écrit :
nouvelle version : $mot = valeur("mot") où valeur est cette fonction:
function Valeur ($cible, $def) {
$rep = $def;
if (isset($_POST[$cible])) { $rep =$_POST[$cible]; };
if (isset($_GET[$cible])) { $rep =$_GET[$cible]; };
// si tu ne fais pas la différence entre POST et GET, autant
// utiliser REQUEST
$rep = empty($_REQUEST[$cible]) ? $def : $_REQUEST[$cible] ;
// Je ne sais quel extension tu utilises, mais en gros, il FAUT utiliser
// la fonction de protection des requêtes.
//<http://kuza55.blogspot.com/2007/06/mysql-injection-encoding-attacks.html>
$rep = mysql_real_escape_string($rep) ;
$rep = str_replace(array('*', '?') ,array("%", '_'), $rep);
return (addslashes($rep));
// Les parenthèses derrière un return c'est pour dire que tu ne
comprends pas ce que tu écris ? Et addslashes, c'est le mal © (cf lien
plus haut)
};
Il n'y a pas de point-virgule à la fin de la définition d'une fonction.
donc, je prends l'argument dans $_GET ou $_POST, je remplace les
* et ? par des équivalents SQL, et j'enlève les et ; pour me
protéger contre des infections de code. Les modifications sont
équivalentes.
La protection est caduque, comme dis ci-dessus.
Dans les deux cas, le SELECT utilise LIKE pour la comparaison.
Mais dans mon nouveau code, hébert ne trouve pas hebert !
Tout d'abord, like peut mettre par terre ton serveur. C'est
extrêmement consommateur de temps CPU et de mémoire. Like ne peut,
généralement, utiliser les index lorsqu'ils existent.
Le champ dans la base SQL est pourtant codé comme
latin1_general_ci dans les deux cas, l'un est text et l'autre
un varchar(36). Dans les deux cas, pas d'énoncé dans l'entête
pour choisir un jeu de caractères.
Quel est le create de la table ? quel encoding est utilisé à la
connexion, et quel sont les encoding/charset des sources PHP ?
Denis Beauregard a écrit :nouvelle version : $mot = valeur("mot") où valeur est cette fonction:
function Valeur ($cible, $def) {
$rep = $def;
if (isset($_POST[$cible])) { $rep =$_POST[$cible]; };
if (isset($_GET[$cible])) { $rep =$_GET[$cible]; };
// si tu ne fais pas la différence entre POST et GET, autant
// utiliser REQUEST
$rep = empty($_REQUEST[$cible]) ? $def : $_REQUEST[$cible] ;
// Je ne sais quel extension tu utilises, mais en gros, il FAUT utiliser
// la fonction de protection des requêtes.
//<http://kuza55.blogspot.com/2007/06/mysql-injection-encoding-attacks.html>
$rep = mysql_real_escape_string($rep) ;
$rep = str_replace(array('*', '?') ,array("%", '_'), $rep);
return (addslashes($rep));
// Les parenthèses derrière un return c'est pour dire que tu ne
comprends pas ce que tu écris ? Et addslashes, c'est le mal © (cf lien
plus haut)
};
Il n'y a pas de point-virgule à la fin de la définition d'une fonction.
donc, je prends l'argument dans $_GET ou $_POST, je remplace les
* et ? par des équivalents SQL, et j'enlève les et ; pour me
protéger contre des infections de code. Les modifications sont
équivalentes.
La protection est caduque, comme dis ci-dessus.
Dans les deux cas, le SELECT utilise LIKE pour la comparaison.
Mais dans mon nouveau code, hébert ne trouve pas hebert !
Tout d'abord, like peut mettre par terre ton serveur. C'est
extrêmement consommateur de temps CPU et de mémoire. Like ne peut,
généralement, utiliser les index lorsqu'ils existent.
Le champ dans la base SQL est pourtant codé comme
latin1_general_ci dans les deux cas, l'un est text et l'autre
un varchar(36). Dans les deux cas, pas d'énoncé dans l'entête
pour choisir un jeu de caractères.
Quel est le create de la table ? quel encoding est utilisé à la
connexion, et quel sont les encoding/charset des sources PHP ?
Sur un site que j'ai développé il y a quelques années, je pouvais
faire une recherche telle que si je recherche une lettre accentuée,
mysql trouve la lettre accentuée ou non. Ainsi, la recherche suivante
http://www.sgcf.com/zacharie/reponse.php?Auteurs=b%E9auregard&Titre=&Cote=&Sujet >
où je demande béauregard, va trouver beauregard.
Sur un site que j'ai développé il y a quelques années, je pouvais
faire une recherche telle que si je recherche une lettre accentuée,
mysql trouve la lettre accentuée ou non. Ainsi, la recherche suivante
http://www.sgcf.com/zacharie/reponse.php?Auteurs=b%E9auregard&Titre=&Cote=&Sujet >
où je demande béauregard, va trouver beauregard.
Sur un site que j'ai développé il y a quelques années, je pouvais
faire une recherche telle que si je recherche une lettre accentuée,
mysql trouve la lettre accentuée ou non. Ainsi, la recherche suivante
http://www.sgcf.com/zacharie/reponse.php?Auteurs=b%E9auregard&Titre=&Cote=&Sujet >
où je demande béauregard, va trouver beauregard.
Problème résolu.
L'ancienne base, qui fonctionne, était en latin1_swedish, alors que la
nouvelle, qui ne fonctionne pas avec les accents, était en
latin1_general.
Il semble donc qu'en français, il faille choisir le suédois...
Problème résolu.
L'ancienne base, qui fonctionne, était en latin1_swedish, alors que la
nouvelle, qui ne fonctionne pas avec les accents, était en
latin1_general.
Il semble donc qu'en français, il faille choisir le suédois...
Problème résolu.
L'ancienne base, qui fonctionne, était en latin1_swedish, alors que la
nouvelle, qui ne fonctionne pas avec les accents, était en
latin1_general.
Il semble donc qu'en français, il faille choisir le suédois...
Denis Beauregard a écrit :Problème résolu.
Tant mieux ! :)L'ancienne base, qui fonctionne, était en latin1_swedish, alors que la
nouvelle, qui ne fonctionne pas avec les accents, était en
latin1_general.
Je me doutais d'un truc comme ça, c'est pour ça que je t'avais
demandé le create. En fait, l'ancienne base ne « fonctionnait » pas, ce
qui te fournissait le comportement bogué que tu considère comme étant le
comportement normal.Il semble donc qu'en français, il faille choisir le suédois...
En fait, c'est pas vraiment ça. C'est le problème de l'ordre
lexicographique qui veut qu'en français, les lettes é è et ê n'ont pas
la même valeur que le e. Alors qu'il semblerait qu'en suédois, si. Si
toutefois les glyphes y existent.
Denis Beauregard a écrit :
Problème résolu.
Tant mieux ! :)
L'ancienne base, qui fonctionne, était en latin1_swedish, alors que la
nouvelle, qui ne fonctionne pas avec les accents, était en
latin1_general.
Je me doutais d'un truc comme ça, c'est pour ça que je t'avais
demandé le create. En fait, l'ancienne base ne « fonctionnait » pas, ce
qui te fournissait le comportement bogué que tu considère comme étant le
comportement normal.
Il semble donc qu'en français, il faille choisir le suédois...
En fait, c'est pas vraiment ça. C'est le problème de l'ordre
lexicographique qui veut qu'en français, les lettes é è et ê n'ont pas
la même valeur que le e. Alors qu'il semblerait qu'en suédois, si. Si
toutefois les glyphes y existent.
Denis Beauregard a écrit :Problème résolu.
Tant mieux ! :)L'ancienne base, qui fonctionne, était en latin1_swedish, alors que la
nouvelle, qui ne fonctionne pas avec les accents, était en
latin1_general.
Je me doutais d'un truc comme ça, c'est pour ça que je t'avais
demandé le create. En fait, l'ancienne base ne « fonctionnait » pas, ce
qui te fournissait le comportement bogué que tu considère comme étant le
comportement normal.Il semble donc qu'en français, il faille choisir le suédois...
En fait, c'est pas vraiment ça. C'est le problème de l'ordre
lexicographique qui veut qu'en français, les lettes é è et ê n'ont pas
la même valeur que le e. Alors qu'il semblerait qu'en suédois, si. Si
toutefois les glyphes y existent.
Dans les deux cas, le SELECT utilise LIKE pour la comparaison.
Mais dans mon nouveau code, hébert ne trouve pas hebert !
Tout d'abord, like peut mettre par terre ton serveur. C'est
extrêmement consommateur de temps CPU et de mémoire. Like ne peut,
généralement, utiliser les index lorsqu'ils existent.
LIKE est la seule façon que je connaisse pour faire une recherche
avec des jetons. Je veux que mon usager puisse saisir ARSEN pour
rechercher parmi les ARSENEAU, ARSENEAUX, ARSENAULT, etc. (j'ajoute
le % à la fin, à la demande du client).
Dans les deux cas, le SELECT utilise LIKE pour la comparaison.
Mais dans mon nouveau code, hébert ne trouve pas hebert !
Tout d'abord, like peut mettre par terre ton serveur. C'est
extrêmement consommateur de temps CPU et de mémoire. Like ne peut,
généralement, utiliser les index lorsqu'ils existent.
LIKE est la seule façon que je connaisse pour faire une recherche
avec des jetons. Je veux que mon usager puisse saisir ARSEN pour
rechercher parmi les ARSENEAU, ARSENEAUX, ARSENAULT, etc. (j'ajoute
le % à la fin, à la demande du client).
Dans les deux cas, le SELECT utilise LIKE pour la comparaison.
Mais dans mon nouveau code, hébert ne trouve pas hebert !
Tout d'abord, like peut mettre par terre ton serveur. C'est
extrêmement consommateur de temps CPU et de mémoire. Like ne peut,
généralement, utiliser les index lorsqu'ils existent.
LIKE est la seule façon que je connaisse pour faire une recherche
avec des jetons. Je veux que mon usager puisse saisir ARSEN pour
rechercher parmi les ARSENEAU, ARSENEAUX, ARSENAULT, etc. (j'ajoute
le % à la fin, à la demande du client).
Dans les deux cas, le SELECT utilise LIKE pour la comparaison.
Mais dans mon nouveau code, hébert ne trouve pas hebert !
Tout d'abord, like peut mettre par terre ton serveur. C'est
extrêmement consommateur de temps CPU et de mémoire. Like ne peut,
généralement, utiliser les index lorsqu'ils existent.
LIKE est la seule façon que je connaisse pour faire une recherche
avec des jetons. Je veux que mon usager puisse saisir ARSEN pour
rechercher parmi les ARSENEAU, ARSENEAUX, ARSENAULT, etc. (j'ajoute
le % à la fin, à la demande du client).
Tu peux utiliser les expressions régulières de MySQL pour t'affranchir de
LIKE (et effectuer des recherches correspondant au début d'une chaine).
http://dev.mysql.com/doc/refman/5.1/en/regexp.html
Dans les deux cas, le SELECT utilise LIKE pour la comparaison.
Mais dans mon nouveau code, hébert ne trouve pas hebert !
Tout d'abord, like peut mettre par terre ton serveur. C'est
extrêmement consommateur de temps CPU et de mémoire. Like ne peut,
généralement, utiliser les index lorsqu'ils existent.
LIKE est la seule façon que je connaisse pour faire une recherche
avec des jetons. Je veux que mon usager puisse saisir ARSEN pour
rechercher parmi les ARSENEAU, ARSENEAUX, ARSENAULT, etc. (j'ajoute
le % à la fin, à la demande du client).
Tu peux utiliser les expressions régulières de MySQL pour t'affranchir de
LIKE (et effectuer des recherches correspondant au début d'une chaine).
http://dev.mysql.com/doc/refman/5.1/en/regexp.html
Dans les deux cas, le SELECT utilise LIKE pour la comparaison.
Mais dans mon nouveau code, hébert ne trouve pas hebert !
Tout d'abord, like peut mettre par terre ton serveur. C'est
extrêmement consommateur de temps CPU et de mémoire. Like ne peut,
généralement, utiliser les index lorsqu'ils existent.
LIKE est la seule façon que je connaisse pour faire une recherche
avec des jetons. Je veux que mon usager puisse saisir ARSEN pour
rechercher parmi les ARSENEAU, ARSENEAUX, ARSENAULT, etc. (j'ajoute
le % à la fin, à la demande du client).
Tu peux utiliser les expressions régulières de MySQL pour t'affranchir de
LIKE (et effectuer des recherches correspondant au début d'une chaine).
http://dev.mysql.com/doc/refman/5.1/en/regexp.html
Dans les deux cas, le SELECT utilise LIKE pour la comparaison.
Mais dans mon nouveau code, hébert ne trouve pas hebert !Tout d'abord, like peut mettre par terre ton serveur. C'est
extrêmement consommateur de temps CPU et de mémoire. Like ne peut,
généralement, utiliser les index lorsqu'ils existent.
LIKE est la seule façon que je connaisse pour faire une recherche
avec des jetons. Je veux que mon usager puisse saisir ARSEN pour
rechercher parmi les ARSENEAU, ARSENEAUX, ARSENAULT, etc. (j'ajoute
le % à la fin, à la demande du client).
Tu peux utiliser les expressions régulières de MySQL pour t'affranchir de
LIKE (et effectuer des recherches correspondant au début d'une chaine).
http://dev.mysql.com/doc/refman/5.1/en/regexp.html
Donc par exemple :
SELECT * FROM table WHERE nom REGEXP "^ARSEN"
En revanche, je n'ai aucune idée du gain (ou pas) avec LIKE.
Dans les deux cas, le SELECT utilise LIKE pour la comparaison.
Mais dans mon nouveau code, hébert ne trouve pas hebert !
Tout d'abord, like peut mettre par terre ton serveur. C'est
extrêmement consommateur de temps CPU et de mémoire. Like ne peut,
généralement, utiliser les index lorsqu'ils existent.
LIKE est la seule façon que je connaisse pour faire une recherche
avec des jetons. Je veux que mon usager puisse saisir ARSEN pour
rechercher parmi les ARSENEAU, ARSENEAUX, ARSENAULT, etc. (j'ajoute
le % à la fin, à la demande du client).
Tu peux utiliser les expressions régulières de MySQL pour t'affranchir de
LIKE (et effectuer des recherches correspondant au début d'une chaine).
http://dev.mysql.com/doc/refman/5.1/en/regexp.html
Donc par exemple :
SELECT * FROM table WHERE nom REGEXP "^ARSEN"
En revanche, je n'ai aucune idée du gain (ou pas) avec LIKE.
Dans les deux cas, le SELECT utilise LIKE pour la comparaison.
Mais dans mon nouveau code, hébert ne trouve pas hebert !Tout d'abord, like peut mettre par terre ton serveur. C'est
extrêmement consommateur de temps CPU et de mémoire. Like ne peut,
généralement, utiliser les index lorsqu'ils existent.
LIKE est la seule façon que je connaisse pour faire une recherche
avec des jetons. Je veux que mon usager puisse saisir ARSEN pour
rechercher parmi les ARSENEAU, ARSENEAUX, ARSENAULT, etc. (j'ajoute
le % à la fin, à la demande du client).
Tu peux utiliser les expressions régulières de MySQL pour t'affranchir de
LIKE (et effectuer des recherches correspondant au début d'une chaine).
http://dev.mysql.com/doc/refman/5.1/en/regexp.html
Donc par exemple :
SELECT * FROM table WHERE nom REGEXP "^ARSEN"
En revanche, je n'ai aucune idée du gain (ou pas) avec LIKE.
Dans les deux cas, le SELECT utilise LIKE pour la comparaison.
Mais dans mon nouveau code, hébert ne trouve pas hebert !Tout d'abord, like peut mettre par terre ton serveur. C'est
extrêmement consommateur de temps CPU et de mémoire. Like ne peut,
généralement, utiliser les index lorsqu'ils existent.
LIKE est la seule façon que je connaisse pour faire une recherche
avec des jetons. Je veux que mon usager puisse saisir ARSEN pour
rechercher parmi les ARSENEAU, ARSENEAUX, ARSENAULT, etc. (j'ajoute
le % à la fin, à la demande du client).
Tu peux utiliser les expressions régulières de MySQL pour t'affranchir
de
LIKE (et effectuer des recherches correspondant au début d'une chaine).
En revanche, je n'ai aucune idée du gain (ou pas) avec LIKE.
Pour l'évaluer (ma base de test a plus de 2 millions
d'enregistrements), il faudrait que je trouve la fonction PHP qui me
donne le temps en millisecondes. Pour le moment, je n'ai que celle
avec les secondes, time().
Dans les deux cas, le SELECT utilise LIKE pour la comparaison.
Mais dans mon nouveau code, hébert ne trouve pas hebert !
Tout d'abord, like peut mettre par terre ton serveur. C'est
extrêmement consommateur de temps CPU et de mémoire. Like ne peut,
généralement, utiliser les index lorsqu'ils existent.
LIKE est la seule façon que je connaisse pour faire une recherche
avec des jetons. Je veux que mon usager puisse saisir ARSEN pour
rechercher parmi les ARSENEAU, ARSENEAUX, ARSENAULT, etc. (j'ajoute
le % à la fin, à la demande du client).
Tu peux utiliser les expressions régulières de MySQL pour t'affranchir
de
LIKE (et effectuer des recherches correspondant au début d'une chaine).
En revanche, je n'ai aucune idée du gain (ou pas) avec LIKE.
Pour l'évaluer (ma base de test a plus de 2 millions
d'enregistrements), il faudrait que je trouve la fonction PHP qui me
donne le temps en millisecondes. Pour le moment, je n'ai que celle
avec les secondes, time().
Dans les deux cas, le SELECT utilise LIKE pour la comparaison.
Mais dans mon nouveau code, hébert ne trouve pas hebert !Tout d'abord, like peut mettre par terre ton serveur. C'est
extrêmement consommateur de temps CPU et de mémoire. Like ne peut,
généralement, utiliser les index lorsqu'ils existent.
LIKE est la seule façon que je connaisse pour faire une recherche
avec des jetons. Je veux que mon usager puisse saisir ARSEN pour
rechercher parmi les ARSENEAU, ARSENEAUX, ARSENAULT, etc. (j'ajoute
le % à la fin, à la demande du client).
Tu peux utiliser les expressions régulières de MySQL pour t'affranchir
de
LIKE (et effectuer des recherches correspondant au début d'une chaine).
En revanche, je n'ai aucune idée du gain (ou pas) avec LIKE.
Pour l'évaluer (ma base de test a plus de 2 millions
d'enregistrements), il faudrait que je trouve la fonction PHP qui me
donne le temps en millisecondes. Pour le moment, je n'ai que celle
avec les secondes, time().
C'est dommage que cette distinction très importante ne soit pas plus
mise en lumière. J'ai lu le manuel de mysql et les sites bidons qui
sont favorisés par l'algorythme farfelu de Google (préférence donnée
au nombre de pages sur un site et aux blogues et non aux sites qui
devraient être la référence). Je n'ai pas vu d'emphase sur la
différence, peut-être parce que tout le monde utilise la valeur par
défaut...
C'est dommage que cette distinction très importante ne soit pas plus
mise en lumière. J'ai lu le manuel de mysql et les sites bidons qui
sont favorisés par l'algorythme farfelu de Google (préférence donnée
au nombre de pages sur un site et aux blogues et non aux sites qui
devraient être la référence). Je n'ai pas vu d'emphase sur la
différence, peut-être parce que tout le monde utilise la valeur par
défaut...
C'est dommage que cette distinction très importante ne soit pas plus
mise en lumière. J'ai lu le manuel de mysql et les sites bidons qui
sont favorisés par l'algorythme farfelu de Google (préférence donnée
au nombre de pages sur un site et aux blogues et non aux sites qui
devraient être la référence). Je n'ai pas vu d'emphase sur la
différence, peut-être parce que tout le monde utilise la valeur par
défaut...