Recherche necessitant jointure

cs_christuckers Messages postés 75 Date d'inscription jeudi 27 juillet 2006 Statut Membre Dernière intervention 26 mars 2010 - 28 déc. 2007 à 09:16
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Derniè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 .

Donc, je commence les hostilités :

Dans vp.php : mon formulaire de recherche :

<form action="listerecherchevp.php?complet=<?=$nomic?>" method="post" name="p" target="body" id="i">
          


    <td>Recherche par IC </td>
              <td width="20%" align="left" valign="middle">
               
                 

                                
              




 
</td>
              <td width="10%" align="center" valign="middle">
               





</td>
      <td width="20%" align="center" valign="middle">&nbsp;</td>
  



    </form>


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.




Merci d'avance pour votre aide.







 




 




 




 




 




 

4 réponses

neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
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)
0
sidf Messages postés 1216 Date d'inscription mardi 20 décembre 2005 Statut Membre Dernière intervention 18 octobre 2012 5
28 déc. 2007 à 17:22
salut

<form action="listerecherchevp.php" method="post" name="p" target="body" id="i">

...

             

...

</form>

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%' "; 
 }
...

j'avais oublié le $
0
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
28 déc. 2007 à 18:09
"$nomic=$_POST['nomic']; // par securité"

LOL tu parles d'une sécurité... C'est probablement ce qui permet le plus les injections SQL...
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
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).
0
Rejoignez-nous