Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1553 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Problème de requête

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème de requête

n°2032274
quaresma
Posté le 26-10-2010 à 13:56:58  profilanswer
 

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
mood
Publicité
Posté le 26-10-2010 à 13:56:58  profilanswer
 

n°2032298
skeye
Posté le 26-10-2010 à 14:56:08  profilanswer
 

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 -
n°2032338
quaresma
Posté le 26-10-2010 à 16:39:16  profilanswer
 

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 ??

n°2032341
skeye
Posté le 26-10-2010 à 16:43:12  profilanswer
 

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 -
n°2032349
quaresma
Posté le 26-10-2010 à 17:08:36  profilanswer
 

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 ??

n°2032351
skeye
Posté le 26-10-2010 à 17:11:26  profilanswer
 

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 -
n°2032356
quaresma
Posté le 26-10-2010 à 17:19:19  profilanswer
 

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:

n°2032359
skeye
Posté le 26-10-2010 à 17:22:19  profilanswer
 

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 -
n°2032369
quaresma
Posté le 26-10-2010 à 17:35:37  profilanswer
 

et pour ces fameux caractères ??

n°2032375
skeye
Posté le 26-10-2010 à 17:47:43  profilanswer
 

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


---------------
Can't buy what I want because it's free -
mood
Publicité
Posté le 26-10-2010 à 17:47:43  profilanswer
 

n°2032382
quaresma
Posté le 26-10-2010 à 18:07:44  profilanswer
 

skeye a écrit :

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


 
c'est quoi exactement ??


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Problème de requête

 

Sujets relatifs
Problème requête PDOProblème de requête sql
Problème en PHP pour une requête SQLProblème avec une requête mysql en PHP
Problème de mise à jours avec une requête Microsoft QueryProbleme avec requete sql NOT EXISTS et NOT IN
Problème LIMIT avec requête préparée PDO[RESOLU] Problème Requête Mondrian/JPivot
Problème de requête de calculs de moyennesproblème avec requête
Plus de sujets relatifs à : Problème de requête


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR