problème include - PHP - Programmation
Marsh Posté le 10-09-2007 à 11:36:20
ReplyMarsh Posté le 10-09-2007 à 19:07:05
skeye a écrit : code. |
voilà dans mon index.php j'inclu ce fichier ;
Code :
|
Marsh Posté le 10-09-2007 à 19:33:27
Je suppute que ta variable de session n'est pas définie la première fois.
Tu l'as définie où ?
Marsh Posté le 10-09-2007 à 22:48:47
Je parle de $_SESSION['profil']. Quand est-ce que tu l'affectes ?
Marsh Posté le 10-09-2007 à 22:54:43
Certes mais ton index 'profil', il est défini quand
Fais un
Code :
|
c'est quand même du déboguage de base...
Y'a quoi comme code avant tout ça Et après
Marsh Posté le 11-09-2007 à 13:00:58
je pense que je me suis mal fait comprendre, la connexion se passe bien, le seul problème c'est que le menu apparait que après un rafraichissement de la page.
Marsh Posté le 11-09-2007 à 13:32:56
montre le code dans lequel $_SESSION['profil'] est défini.
Marsh Posté le 11-09-2007 à 15:44:01
si les "case" de ton switch sont censés être des chaînes de caractères, il manque des guillemets ou des apostrophes. Je ne suis pas sûr que case 'lambda' et case lambda soient interprétés de la même manière.
EDIT : cette portion du code me semble bizarre :
Code :
|
quand est-ce que le include munu juste au dessus du case tre est exécuté ?
Marsh Posté le 11-09-2007 à 21:13:21
le menu au-dessus de case tre c'est le menu public du site, mais lors d'une connexion admin inserre lemenu public + le menu admin.
tu as raison j'aurais du mettre des "" sur les strings de mes cases
Marsh Posté le 11-09-2007 à 21:15:48
skeye a écrit : montre le code dans lequel $_SESSION['profil'] est défini. |
voilà ce que j'ai mis comme code de session
Code :
|
Marsh Posté le 11-09-2007 à 22:37:20
Sans garantie que ça change réellement, mais c'est bourré de merdouilles.
1/ ligne 2 ça m'étonnerait que le mdp soit un booléen
2/ on filtre les données issues de l'utilisateur, comme ça on suppose pas attendre un booléen (ou on oublie pas le isset)
3/ préférer !empty à isset, ça vérifie que c'est pas vide au passage
4/ c'est quoi cette requête à rallonge dont tu te sers de seulement 1/4 ?
5/ Découvrir === qui vérifie le typage donc garantie l'intégrité dans pas mal de cas et accessoirement plus efficace car pas de cast implicites
6/ pas besoin de () partout $var=='toto' est une expression pas besoin de l'encadrer c'est implicite, comme la multiplication qui est prioritaire sur l'addition et la soustration par exemple
quel est l'ordre dans ce code Comment inclus tu tout ça
Dégogue ton bordel, tu colles des print_r() de ce que tu attends et regardes si tu as ce que tu attends!
Ca doit être une connerie, mais par pitié code proprement, ça évite bien des comportement hasardeux
Marsh Posté le 12-09-2007 à 18:42:02
Salut,
je te remercie pour tes conseils, cela dit j'ai pas bien compris tout les points
leflos5 a écrit : Sans garantie que ça change réellement, mais c'est bourré de merdouilles. |
c'est a dire.
leflos5 a écrit : |
là non plus je vois pas trop.
leflos5 a écrit : |
ok!!! est ce que le fait d'utiliser isset avec !empty cela apporte quelque chose.
leflos5 a écrit : |
en effet tout a fait d'accord avec toi, mais sur le coup cela m'avait pas frappé.
leflos5 a écrit : |
leflos5 a écrit : |
tout d'abors l'interface public il y a l'include du menu.html, après selon le profil il va y avoir le menu.html + le deuxième menu complémentaire .
leflos5 a écrit : |
ok je vais revoir tout mon code qu'entend tu par codé proprement.
Marsh Posté le 13-09-2007 à 01:11:50
dodo a écrit : Salut, |
dodo a écrit : |
Tu vérifie si $_POST['mot_passe']. Ca sous entend que tu attends de savoir si c'est vrai ou non comme expression puisque y'a rien d'autre Or avec php ça passe mais ça donne pas toujours le résultat attendu.
dodo a écrit : |
Faut pas utiliser les données directement ($_POST, $_GET, quoi que ça soit qui vienne pas directement de ton script et encore...) Faut vérifier que tu as bien ce que tu attends: une chaine, un numérique, une adresse email, une agresse http...
dodo a écrit : |
Tu utilises juste !empty ça suffit et ça fait les deux sans te générer d'erreur.
dodo a écrit : |
dodo a écrit : |
dodo a écrit : |
Proprement, c'est respecter des règle conventionnelles de codage, respecter au moins celles du langage, ne pas se reposer sur des lacunes du langage (et dieu sait qu'il y en a), ne pas considérer que parce que ça marche tu aurais du faire comme ça (les usines à gaz c'est pas le top, quand c'est tordu, parfois faut prendre un papier et réfléchir en pure logique avec des mot on appelle ça l'algorithmique)...
Bref tout le contraire de tes quelques lignes
Marsh Posté le 13-09-2007 à 10:48:29
dodo a écrit : Salut, |
Salut,
Si ton "menu.html" est affiché dans tout les cas, pourquoi tu t'embêtes à le mettre dans le "switch"? Le "switch" sert à gérer les différences qu'il y a entre les différents cas et non pas à faire la même chose dans tous les cas. Tout ce qui est commun à tous les profils doit donc être en dehors du "switch" et seul les éléments qui changent en fonction des profils doivent être à l'intérieur.
En fait dans le cas présent, tu pourras même mettre ton "include" du "menu.html" en dehors du "if" vu que tu l'affiches que le visiteur ai ou non un profil et s'il a profil quelque soit son profil. En bref, sort le du "if" vu qu'il n'y a pas de cas où il n'est pas affiché.
Marsh Posté le 13-09-2007 à 13:09:50
ok!! merci de tuyau cela me parait logique comme démarche j'y avais pas pensé, du coup je peux supprimer mon else de mon if .
Marsh Posté le 13-09-2007 à 19:27:24
donc si je comprend bien mes probleme de viennet pas du fait que j'inclu de nombreux morceaux de code dans l'index.php.
Marsh Posté le 13-09-2007 à 19:44:43
Je pense que c'est sur le cheminement des choses et les différents effets de bords liés à ton code pas correct partout et que php laisse passé sans crié mais du coup ça te donne pas ce que tu veux.
On pourrait voir le code entier de ton index. Doit y avoir une merdouille dans l'ordre quelque part
Tu authentifies l'utilisateur mais à ce moment t'en es où dans le script Tu rediriges Tu continues parce que y'avait un include si pas authentifié
Marsh Posté le 13-09-2007 à 20:47:09
je suis en train de revoir mes script car en effet je le pense aussi que je dois avoir de gros bug, car hier j'ai inserrer un script dans une page qui s'inclu dans mon index et du coup j'avais un probleme d'affichage de donnée sql sur une autre page.
Marsh Posté le 13-09-2007 à 23:43:50
Fais un truc propre à l'extrême: un point d'entrée unique sans exceptions aucune!
Chaque url doit donner toujours le même résultat (en considérant un utilisateur donné et quelques paramètres qui peuvent varier avec le temps), genre j'ai pas /index.php?page=admin qui une fois m'affiche une authentification et la fois d'après le panel admin par exemple.
Chaque url doit donner un et un seul résultat, et chaque action doit être définie par une url.
GET ne peut PAS modifier l'état du système (pour ça il y a POST).
On sépare les traitements de données (ex. récupérer des données dur une base ) de l'affichage (comme pas de vilaines alternance entre html et php).
On met une couche d'abstraction sur tout ce qui peut bouger (un peu pour ça qu'on sépare le traitement de l'affichage, pour modifier l'affichage sans toucher au traitement et recréer des bogues...) genre accès aux données, gestion de droits...
On détourne pas ces règles parce que c'est plus simple et pour une fois... (même pour afficher les 5 dernières news en outrepassant tous les contrôles que ferait ton index s'il est bien fait, hein les gars)
Avec tout ça tu pourras avoir un cheminement clair et précis, tu éviteras les trucs bizarres (genre j'ai oublié de rediriger un détournement d'url ou genre une url me retourne le résultat de sa voisine par "erreur" )
En schématisé:
index.php
|-> vérifications (filtrage, droits, redirections...)
|-> traitement
|-> accès données
|-> affichage
Penser dans tous les cas à factoriser au max le code, y'a aussi des fonction et des classes en php
Marsh Posté le 14-09-2007 à 00:01:50
Bon, sinon, le VRAI problème (mise à part ta façon de coder pour les autres ) vient de ta requête SQL :
Code :
|
Là, tu prends toutes les lignes de ta table membres pour laquelle le login est bon dans la table profil MAIS sans jointure aucune -> donc tu prends tout, c'est à dire toute ta table, après dans le code PHP, ben tu récupères le profil de la première ligne dans ta table membres.
Bref, revois ta requête et ça devrait aller.
Sinon, les conseils des autres sont bons à prendre (même indispensables si tu compte faire un gros projet et/ou le faire évoluer assez souvent)
Marsh Posté le 14-09-2007 à 00:06:34
Bien vu je l'avais pas lue
Mais vu qu'il disait qu'avec un rafraichissement ça donne l'effet voulu, je me demande si y'a réellement un lien
La requête ramènerait pas le bon résultat le premier coup, mais le deuxième
Ce qui me permet de rajouter un truc on a un identifiant unique et numérique par table et on fait les recherches ou les liens avec cet identifiant et pas le reste du tuple quand c'est pour ramener un tuple (et pas faire une recherche sur plusieurs tuples )
Marsh Posté le 14-09-2007 à 00:11:08
leflos5 a écrit : Mais vu qu'il disait qu'avec un rafraichissement ça donne l'effet voulu, je me demande si y'a réellement un lien |
Ah oui tiens, ça doit être qu'au rafraîchissement, il sort la deuxième ligne de la table qui a le bon profil
leflos5 a écrit : Ce qui me permet de rajouter un truc on a un identifiant unique et numérique par table et on fait les recherches ou les liens avec cet identifiant et pas le reste du tuple quand c'est pour ramener un tuple (et pas faire une recherche sur plusieurs tuples ) |
Je vois parfaitement ce que tu veux dire, mais j'ai rien compris
Marsh Posté le 14-09-2007 à 00:15:38
C'est ce que je dis ça me semble improbable d'où le fait que j'ai pas lu la requête
Pour l'identifiant unique et numérique, comment te dire...
Il en faut un et on s'en sert sauf quand on veut autre chose
Marsh Posté le 14-09-2007 à 11:12:30
dodo a écrit : je suis en train de revoir mes script car en effet je le pense aussi que je dois avoir de gros bug, car hier j'ai inserrer un script dans une page qui s'inclu dans mon index et du coup j'avais un probleme d'affichage de donnée sql sur une autre page. |
Conséquence classique d'inclusion de fichiers quand il y a du code qui ne se trouve ni dans des classes ni dans des fonctions.
Si tu veux éviter ce genre d'effet de bord, alors pense à toujours mettre tout le code dans des fonctions et des classes sauf, évidement, pour le fichier appelé par le navigateur.
PS : Je vois qu'on t'a donné beaucoup d'indications sur comment bien programmer. J'espère que ça n'en fait pas trop et que t'arriveras à les retenir sans les mélanger.
Marsh Posté le 14-09-2007 à 12:17:56
s'il y a une chose que je n'utilise pas c'est bien les fonctions, car mes pour l'instants mes scripts sont tout petit , (session, insertion, affichage de données)
Marsh Posté le 14-09-2007 à 12:27:13
burinho > Le problème quand on utilise pas de fonction, c'est qu'on se retrouve avec toutes les variables dans l'espace global. Du coup dès que tu modifies la valeur d'une variable dans un fichier, c'est comme si tu la modifiais dans tous les autres. Ca peut encore se gérer si le seul fichier qui en inclus d'autres est celui de départ mais ça ne l'ai plus si des fichiers inclus en inclus d'autres.
En fait pour te donner une idée du problème, si tu n'utilises aucune fonction alors c'est comme si tu n'avais qu'un seul fichier et que tout le code que t'as dispersé se retrouvait dans ce fichier là (c'est d'ailleurs le cas en interne même si tout n'est pas chargé tant qu'on en a pas besoin).
PS : Au total, t'as combien de ligne de code? Et est ce que t'inclus un même fichier à plusieurs endroit? En fait, j'ai un peu peur que tu utilises des include à la place de fonction.
PS2 : Même sur le plus gros site que j'avais à gérer, l'ensemble pouvait se résumer à "session, insertion, modification, affichage de données".
Marsh Posté le 14-09-2007 à 12:58:53
omega2 a écrit : burinho > Le problème quand on utilise pas de fonction, c'est qu'on se retrouve avec toutes les variables dans l'espace global. Du coup dès que tu modifies la valeur d'une variable dans un fichier, c'est comme si tu la modifiais dans tous les autres. Ca peut encore se gérer si le seul fichier qui en inclus d'autres est celui de départ mais ça ne l'ai plus si des fichiers inclus en inclus d'autres. |
je te remercie de cette precision sur les fonctions global
ce qui explique ce que j'ai dit plus haut quand j'ai inserré un script dans une page cela ma foiré l'affichage d'une requete.
car j'utilise toujour pour mes requete $sql =requete ainsi pour recuperer les données d'une requette $donnee = pg_fetch_array($sql);
donc si j'ai bien compris je dois prevoir une fonction SESSION etc,
Marsh Posté le 14-09-2007 à 13:56:24
FActoriser ce que tu utilises à plusieurs reprises dans une fonction qui te retourne juste le résultat.
Ca évite la redondance de code et ça permet d'avoir qu'un seul endroit à déboguer en cas de problèmes
Marsh Posté le 14-09-2007 à 21:05:30
en clair il faut que tout le code ou presque php soit sur le meme fichier un peu comme avec le css
Marsh Posté le 14-09-2007 à 21:20:39
omega2 a écrit : burinho > Le problème quand on utilise pas de fonction, c'est qu'on se retrouve avec toutes les variables dans l'espace global. Du coup dès que tu modifies la valeur d'une variable dans un fichier, c'est comme si tu la modifiais dans tous les autres. Ca peut encore se gérer si le seul fichier qui en inclus d'autres est celui de départ mais ça ne l'ai plus si des fichiers inclus en inclus d'autres. |
je viens de modifier mon script qui me plantait l'affichage d'un autre script, en modifiant le nom des varaible $sql et $donnee que j'utilise sans cesse sur toute les pages et du coup cela marche.
je savais pas ces histoires de variable global. merci
Marsh Posté le 17-09-2007 à 08:56:28
Voilà j'ai trouvé pourquoi mon include fonctionnait que après une actualisiation de la page.
Cétait tout simplement dû que l' include de mon fichier connection je l'avais pas mis au bon endroit, je l'avais inserrer au niveau du formulaire de connection et le script du menu lui était en haut de la page..
De plus j'en ai profité pour corrigé ma requete ...
Marsh Posté le 17-09-2007 à 09:11:59
dodo a écrit :
|
Les choses se passent et les connexions se font, ton code est surement trop fruité pour que tu puisses peser sur la balance. T'entends ?!??!!
Marsh Posté le 17-09-2007 à 11:08:45
c'est justement ce que je suis en train de faire, c'est comme ça que j'ai trouvé cette erreur.
Marsh Posté le 09-09-2007 à 22:00:04
Bonjour,
je travail actuellment sur un site, ou j'ai créer des acces sécuriser , selon le profil de session avec in unclude qui m'inserre le bon menu sur mon index.
la connection se passe bien par contre pour voir apparaitre le menu je dois faire un actualiser ou cliquer sur un lien.
quelqu'un aurait il une idée du problème ?