changement aspect bouton menu - PHP - Programmation
Marsh Posté le 23-09-2010 à 15:09:09
t671 a écrit :
|
remplacer '.$row[\'nom\'].' par $row['nom'] ?
Marsh Posté le 23-09-2010 à 16:34:21
czh a écrit : |
Ca change rien ! J'ai essayé $row['nom'] et '$row['nom']', mais ça fonctionne pas !
J'ai l'impression que le $active n'est pas lu ????
Marsh Posté le 23-09-2010 à 16:37:48
A moins qu'il n'y ait d'autre surprise ailleurs/avant la ligne entière correcte est :
echo '<a class="bouton'.($active == $row['nom'] ? 'active' : '').'" href="menu.php?lien='.$row['lien'].'">'.$row['nom'].'</a><p>';
Sinon tu peux diagnostiquer le problème à l'aide de :
echo $active;
echo $row['nom'];
var_dump($active == $row['nom']);
var_dump($active == $row['nom'] ? 'active' : '');
Edit: par exemple initialiser $active ($active = $_GET['nom']; / $active = 'accueil'; ) avant de l'utiliser.
Code :
|
ps: include($inc); c'est plutôt dangereux
Marsh Posté le 23-09-2010 à 17:52:53
Voici donc pour résumer :
Code :
|
1) Qand j'ouvre le site, j'affiche donc la page "accueil", et l'onglet prend son aspect différent (donc ok). Cela est dû au $inc = 'accueil.htm';
$active = 'accueil';
Et les deux var_dump me donnent : accueilbool(false) et string(0) ""
2) Quand je clique ensuite sur un onglet, les deux "echo" (echo $active; et echo $row['nom'];) avant les var_dump ne donnent aucun résultat.
Et les var_dump donnent : bool(true) string(6) et "active".
D'après ce que j'en conclue, les variables $row['nom'] et $active sont vident (hormis pour la page initiale).
Pourtant, $row['nom'] s'affiche correctement dans l'onglet du menu !
Qu'en penses-tu ? Quel est le remède à tout cela ?
POur l'include, on verra après .....
Merci pour ton aide !
Marsh Posté le 23-09-2010 à 23:01:46
C'est simple : quand tu écris tes balises <a> tu fais des liens du type :
echo "index.php?lien=".$LIEN |
Ton menu est donc envoyé dans la variable $_GET["lien"];
Cette variable est récupérée en haut de ton script ligne 8, dans la variable $inc
Ton problème, c'est que dans ta boucle, tu ne teste pas $inc, mais $active !
C'est pour ça que ta condition de style ne marche pas.
Marsh Posté le 24-09-2010 à 17:18:35
the_bigboo a écrit : C'est simple : quand tu écris tes balises <a> tu fais des liens du type :
|
Là, je comprends pas trop ...... !?
Marsh Posté le 25-09-2010 à 10:18:44
Pour faire simple dans ton code, remplace à la ligne 19, $active, par $inc, et tu verras que ca va marcher.
Marsh Posté le 25-09-2010 à 17:09:38
the_bigboo a écrit : Pour faire simple dans ton code, remplace à la ligne 19, $active, par $inc, et tu verras que ca va marcher. |
Ben non, ça fonctionne pas mieux !!!!!
Si tu regardes mon premier post, j'ai réussi à le faire en définissant le contenu du menu dans le script. Et ça foinctionne ......... !!!!!
Mais là, en définissant le menu dans une base de donnée, y'a pas moyen .......
Marsh Posté le 29-09-2010 à 18:29:14
Bonjour à tous,
Au sujet de mon include($inc); , comment l'écrire pour éviter le "trou de sécurité" ?
Merci !
Marsh Posté le 07-10-2010 à 11:27:57
ReplyMarsh Posté le 07-10-2010 à 11:42:24
La règle n° en sécurité et de ne JAMAIS avoir confiance en l'utilisateur.
Marsh Posté le 07-10-2010 à 11:42:53
the_bigboo a écrit : Il ne faut pas faire d'include à partir d'une variable passée dans une globale. |
heuuuuuuuuuuu .... oui ....... , et encore ......
Comment rectifier l'existant ??
Marsh Posté le 07-10-2010 à 12:20:31
A la limite même si c'est pas tip top, au moins tu peux faire :
Code :
|
L'idée, c'est que si je peux bidouiller ton url, je pourrais par exemple faire un truc du genre :
index.php.lien=/etc/passwd |
Bon j'ose espérer que les serveurs de nos jours sont protégés contre ce genre d'injection... Mais si ce n'était pas le cas, je verrais des fichiers systèmes qui pourraient potentiellement me permettre d'accéder à ton serveur...
Marsh Posté le 07-10-2010 à 12:22:37
Un première sécurité peut être :
Code :
|
EDIT : grillé
Marsh Posté le 07-10-2010 à 14:26:22
Ok et merci pour les propositions !
Mais je ne peux pas définir les valeurs de $inc en faisant
$lien = $_GET["lien"];
switch ($lien){
case "valeur1":
$inc = "valeur1.php" ;
break ;
case "valeur2":
$inc = "valeur2.php"...............
ou de $pages en faisant
1.$pages_autorisees = array(
'accueil',
'non_autorise',...............
Car les valeurs des pages à afficher sont dans une bd, et peuvent évoluer sans faire évoluer le script d'affichage du menu .
Marsh Posté le 07-10-2010 à 15:35:51
A toi d'adapter pour que les propositions qu'on t'a faite soient adaptées sur un modèle :
Tu récupères tes valeurs depuis la BDD, et tu construis ta liste de liens autorisés sur le modèle que t'a fourni PaulP
Marsh Posté le 07-10-2010 à 15:41:32
La grande question est :
que se passe-t-il si on appelle index.php?lien=/etc/passwd ou index.php?lien=';DELETE FROM users;
Marsh Posté le 07-10-2010 à 15:55:39
De ce que je vois il ne fait pas de requête SQL prenant des globales en compte. Niveau injection, ça a l'air bon.
Marsh Posté le 23-09-2010 à 14:48:31
Bonjour,
J'ai un site qui affiche des bouton pour le menu.
Quand j'affiche une page, je souhaiterais que le bouton du menu correspondant prenne un autre aspect parrapport aux autres boutons.
Si je défini les boutons et les pages en php dans un tableau, ça fonctionne :
Mais si les les boutons et les pages sont issuent d'une base de donnée, j'y arrive pas :
Merci d'avance pour l'aide que vous pourriez mapporter.