cs_christuckers
Messages postés75Date d'inscriptionjeudi 27 juillet 2006StatutMembreDernière intervention26 mars 2010
-
28 déc. 2007 à 09:16
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 2010
-
28 déc. 2007 à 19:55
Bien le bonjour à tous les CSistes.
C'est une question de débuta,t je sais mais je n'arrive pas à faire faonctionner un module de recherche qui necessite une jointure et entre nous, ca commence a me .
Dans ma page listerecherchevp.php voici ma requete :
elseif
(
$r=='4' ){ $query = "SELECT * FROM vft_files,vft_users WHERE vft_files.iduser = vft_users.id AND vft_users.login LIKE '%complet%' ";
}
Donc je cherche a faire affiicher les infos de la table vft_files en recherchant les ques les fichiers créer par un user en particulier.
Dans ma table vft_files : l'ID de l'user s'enregistre dans un champ s'appelant iduser. L'utilisateur est enregistré dans la table vft_user dans un champ : id, et son se trouve dans le champ login.
Mon objectif est de taper une partie du login dans le formulaire de recherche et qu'il m'affiche les fichiers correspondants créés par la personne que je recherche.
neigedhiver
Messages postés2480Date d'inscriptionjeudi 30 novembre 2006StatutMembreDernière intervention14 janvier 201119 28 déc. 2007 à 17:18
Salut,
$query = 'SELECT champ1, champ2, ...
FROM vft_users
LEFT JOIN vft_files
ON vft_users.id=vft_files.iduser
WHERE vft_users.login LIKE \'%' . $complet . '\'%;';
Préconisations :
- n'utilise pas la syntaxe <?=$variable?> car elle nécessite que la configuration de PHP ait short-open_tags à ON, ce qui n'est pas toujours le cas
- évite aussi d'utiliser * pour lister les champs à récupérer : si plus tard tu rajoutes dans ta table des champs dont tu n'as pas besoin à chaque requête, ils seront quand même chargés, ce qui fait perdre en performances et consomme plus de mémoire
Il se peut que ta requête soit ok, mais il faut penser à mettre un $ devant le nom de ta variable complet :
LIKE '%$complet%'
WHERE ne devrait pas être utilisé pour faire une jointure, mais uniquement pour limiter les enregistrements à ceux qui correspondent à la condition. Quand on fait une jointure, autant la faire explicitement (avec JOIN) qu'implicitement (avec une virgule comme tu l'as fait), surtout quand on fait une liaison entre deux tables, sur un champ (d'où l'utilité du mot clé ON)
deja si tu utilises la methode POST, ne passe pas ton param en GET
donc tu peux te servir directement du champ 'nomic'
elseif ($r=='4' )
{
$nomic=$_POST['nomic']; // par securité$query "SELECT * FROM vft_files,vft_users WHERE vft_files.iduser vft_users.id AND vft_users.login LIKE '%$nomic%' ";
}
...
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 28 déc. 2007 à 19:55
@sidf => je ne suis pas non plus ton raisonnement. Tu peux l'expliquer un peu plus précisément stp?
POST n'est pas plus sécurisé que GET. Bon on va dire c'est un tout petit peu plus difficile à contourner pour un noob...mais si on veut hacker un site pour de bon, on n'est pas un noob. Enfin...en tout cas, si on veut réussir ;-)
Et je ne pige pas du tout ton $nomic = $_POST['nomic'], ça change quoi au juste à part bouffer un peu plus de mémoire ?
Déjà, une bonne protection, c'est d'échapper les caractères à problème (mysql_real_escape_string() pour mysql par exemple).