2010-05-14 4 views
2

Je tente de créer une fonction de recherche de profils d'utilisateurs sur mon site.Fonction de recherche php

$search= $_POST['search']; 
$res=mysql_query("SELECT * FROM ".TBL_USERS." WHERE username LIKE '$search%'"); 

Ceci est le code que j'utilise. Cela ne fonctionnera que si vous recherchez quelque chose qui correspond au début du résultat. Est-il possible de renvoyer des valeurs qui ont ce que je tape dans le nom d'utilisateur, sans majuscules ni minuscules?

Thankyou

+3

Oh mon dieu. Vulnérabilité SQL Injection Allez lire http://bobby-tables.com/ immédiatement. – Quentin

+3

MySQL est déjà insensible à la casse par défaut. Vous devez créer une table avec des options de classement spéciales pour rendre les comparaisons sensibles à la casse. – Powerlord

+1

Si vous recherchez "Luke" ou "Luke", vous devriez toujours obtenir le même résultat – ggfan

Répondre

3

« % » est le caractère générique, donc si vous placez aussi devant votre chaîne de recherche (comme %$search%) il correspond recherche $ partout dans le nom d'utilisateur . Utilisez "LOWER" dans SQL pour faire votre nom d'utilisateur en minuscules et "strtolower" dans PHP pour faire de même, puis exécutez la requête pour obtenir des résultats insensibles à la casse. Comme l'a dit David Dorward: lisez bobby-tables.com avant de faire quoi que ce soit d'autre !!!

+0

Merci, je comprends l'injection SQL, c'est un vieux morceau de code. Je n'aurais pas dû le mettre en place! Merci d'avoir répondu. – sark9012

0

Vous devriez vraiment ajouter une sorte de nettoyage des données, vous ne devriez jamais prendre après raw/obtenir des données et l'insérer directement dans une requête.

Cela dit:

$search= strtolower($_POST['search']); 
$res=mysql_query("SELECT * FROM ".TBL_USERS." WHERE LOWER(username) LIKE '$search%'"); 
0

Comme vous utilisez comme vous pouvez utiliser le caractère générique% des deux côtés de l'entrée, ce renverra tous les utilisateurs, où la recherche de $ fait partie du nom d'utilisateur.

Vous pouvez également regarder MySQLs REGEXP function

$search= mysql_real_escape_string($_POST['search']); 
$res=mysql_query("SELECT * FROM ".TBL_USERS." WHERE username LIKE '%" . $search . "%'"); 
-3

Vous avez besoin de lire sur les termes "SQL Injection" et "PHP Prepared Statements" - Google pour eux ... C'est plus important que la question que vous avez posée.

Mais puisque vous me demandez, essayez la comparaison tout en majuscules ...

Martin.

+0

Merci pour la réponse, je sais à propos de l'injection SQL SQ – sark9012

+0

, vient d'ajouter l'ancien code avant que je savais! – sark9012

+0

J'adore StackOverflow - Je réponds à la question, je pointe notre point beaucoup plus important, et je suis downvoted pour cela. Je ne pense pas que quiconque m'a rabaissé aurait intérêt à expliquer? Je ne vois vraiment pas ce que j'ai fait de mal ici ... –