Problème de requête

Problème de requête - SQL/NoSQL - Programmation

Marsh Posté le 26-10-2010 à 13:56:58    

Bonjour à toutes et tous,
 
J'ai deux tables menus et contenus :
 
CREATE TABLE menus (id_menu INT not null AUTO_INCREMENT, lib_menu VARCHAR (100) NOT NULL, id_parent INT, image_menu VARCHAR (100), url_page VARCHAR (100), ordre_menu INT, PRIMARY KEY (id_menu));
 
CREATE TABLE contenu (id_contenu INT not null AUTO_INCREMENT, categorie VARCHAR (100) NOT NULL, nom_lien VARCHAR (40), photo_contenu VARCHAR (40), lieu VARCHAR (40), titre VARCHAR (40), dateetnbrepage VARCHAR (20), editeur VARCHAR (40), texte TEXT, ordre_contenu INT, PRIMARY KEY (id_contenu));
 
 
Sur mon site, j'ai un menu à gauche qui correspond à la table menus, dont voici le code PHP/SQL :
 

Code :
  1. <div id="menu">
  2. <?php
  3. require("identification/connexion_sql.php" );
  4. // on attaque le php ici
  5. // dans un premier temps on recupere les menus de niveau 1 donc ceux qui ont l'id_parent egal a 0
  6. $req1 = "SELECT id_menu, lib_menu FROM menus WHERE id_parent='0' ORDER BY ordre_menu" or die ("impossible d'effectuer la requête" );
  7. $rep1 = mysql_query($req1);
  8. while($row1 = mysql_fetch_array($rep1)) {
  9. // on affiche le menu de niveau 1
  10. echo "<div class=\"menu\" id=\"menu".$row1['id_menu']."\" onclick=\"afficheMenu(this)\"><a href=\"#\">".$row1['lib_menu']."</a></div><br>\n";
  11. // ensuite on fait une seconde requete pour chercher les sous menus de ce niveau, s'il y en a on les affiche, sinon on ne fait rien
  12. $req2="SELECT id_menu, lib_menu FROM menus WHERE id_parent='".$row1['id_menu']."' ORDER BY ordre_menu"  or die ("impossible d'effectuer la requête" );
  13. $rep2=mysql_query($req2);
  14. $nb2=mysql_num_rows($rep2);
  15. if (isset($nb2) && $nb2>0) {
  16. echo "<div id=\"sousmenu".$row1['id_menu']."\" style=\"display:none\"><br>\n";
  17. while ($row2=mysql_fetch_array($rep2)) {
  18. $num = $row2['id_menu'];
  19. $lib = htmlentities($row2['lib_menu']);
  20. print '<div class="sousmenu"><a href="contenu.php?num='.$num.'&lib='.$lib.'">'.$lib.'</a></div><br>';
  21. }
  22. echo "</div>\n";
  23. }
  24. }
  25. ?>
  26. </div>


 
 
Lorsque je clique sur un un lien du sous-menu, je vais vers une page nommée contenu.php? pour laquelle je transmets des variables ($num et $lib)
 
Cette page contenu.php devrait afficher les noms des liens correspondant au sous-menu cliqué, mais j'ai un soucis dans la requête de cette page.
 
Voici le code PHP/SQL qui ne fonctionne pas. Je n'ai pas d'erreur, tout simplement lorsque je clique sur un lien du sous-menu le contenu correspondant ne s'affiche pas :
 

Code :
  1. <?php
  2. $ca = htmlentities($_GET['lib']);
  3. $idm = $_GET['num'];
  4. require("identification/connexion_sql.php" );
  5. $requete = "Select id_contenu, nom_lien, categorie FROM contenu, menus WHERE contenu.categorie = (SELECT lib_menu FROM menus WHERE menus.lib_menu='$ca') ORDER BY contenu.ordre_contenu";
  6. $reponse = mysql_query($requete) or die ("impossible d'effectuer la requête" );
  7. while($affiche = mysql_fetch_array($reponse)) {
  8. $liencontenu = htmlentities($affiche['nom_lien']);
  9. $id_contenu = $affiche['id_contenu'];
  10. print '<div id="lien" class="lien"><a href="fiche.php?id='.$id_contenu.'&nomlien='.$liencontenu.'" class="lien">'.$liencontenu.'</a></div>';
  11. }
  12. mysql_close();
  13. ?>


 
Pour mieux comprendre, voici la page où je fais les tests : http://www.la-grange-sardieres.fr/ [...] on2css.php
 
Merci beaucoup pour votre aide.


Message édité par quaresma le 26-10-2010 à 13:57:48
Reply

Marsh Posté le 26-10-2010 à 13:56:58   

Reply

Marsh Posté le 26-10-2010 à 14:56:08    

1) sql injection FTW.
2) C'est visiblement plutôt un problème php que sql.
 
...et sinon, pour répondre à la question, fais afficher la requête générée, pour voir.:o


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 26-10-2010 à 16:39:16    

skeye a écrit :

1) sql injection FTW.
2) C'est visiblement plutôt un problème php que sql.
 
...et sinon, pour répondre à la question, fais afficher la requête générée, pour voir.:o


 
C'est quoi une injection FTW ??

Reply

Marsh Posté le 26-10-2010 à 16:43:12    

quaresma a écrit :


 
C'est quoi une injection FTW ??


 
ça existe pas.
Par contre une injection SQL, oui. Ton code n'est pas très securisé...insérer des variables saisies par l'utilisateur directement dans tes requêtes, c'est mal.


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 26-10-2010 à 17:08:36    

skeye a écrit :


 
ça existe pas.
Par contre une injection SQL, oui. Ton code n'est pas très securisé...insérer des variables saisies par l'utilisateur directement dans tes requêtes, c'est mal.


 
C'est-à-dire ?? en quoi est-ce mal ??
 
Je veux bien te croire car tu es meilleur que moi sur ce sujet.
 
-------
 
J'ai remarqué sur ma page des caractères bizarres : 
 
C'est quoi ??

Reply

Marsh Posté le 26-10-2010 à 17:11:26    

quaresma a écrit :

C'est-à-dire ?? en quoi est-ce mal ??


 
Il est probablement possible de vider entièrement ta base de données via ton script php, actuellement.
 

quaresma a écrit :


J'ai remarqué sur ma page des caractères bizarres : 
 
C'est quoi ??


 
Un fichier encodé en utf8 modifié avec notepad?:D


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 26-10-2010 à 17:19:19    

skeye a écrit :


 
Il est probablement possible de vider entièrement ta base de données via ton script php, actuellement.
 


 
Whaou !! Comment faire pour sécuriser cela ??
 

skeye a écrit :


 
Un fichier encodé en utf8 modifié avec notepad?:D


 
Non, je travail sous dreamweaver.  :sarcastic:

Reply

Marsh Posté le 26-10-2010 à 17:22:19    

quaresma a écrit :


 
Whaou !! Comment faire pour sécuriser cela ??
 


 
Utiliser des requêtes préparées, ou au minimum échapper tes variables avec mysql_real_escape_string.


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 26-10-2010 à 17:35:37    

et pour ces fameux caractères ??

Reply

Marsh Posté le 26-10-2010 à 17:47:43    

ça ressemble à un BOM utf8 mal encodé...


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 26-10-2010 à 17:47:43   

Reply

Marsh Posté le 26-10-2010 à 18:07:44    

skeye a écrit :

ça ressemble à un BOM utf8 mal encodé...


 
c'est quoi exactement ??

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed