Sessions / PHP - PHP - Programmation
Marsh Posté le 22-01-2009 à 17:55:24
quelque soit le login et mot de passe que je tape, cela fonctionne......
je précise que je n'ai besoin qu'un d'un seul login/mdp..... déjà crée dans ma table....
Marsh Posté le 22-01-2009 à 18:08:39
déjà, à la ligne 23 de ton premier code, tu fais un 2 appel à session_start() ;. Celui ci est superflu (session_start() ; est appelé avant), supprime le.
Ensuite, fais :
Code : |
Après l'appel de mysql_fetch_object() pour savoir ce qu'il retourne quand le couple login/mot de passe est incorrect.
Teste cette valeur à la place de is_object($results)
Marsh Posté le 22-01-2009 à 18:09:19
Ah aussi, renseigne toi sur les injections SQL (faille de sécurité), ton code est vulnérable.
Marsh Posté le 22-01-2009 à 18:16:30
Merci de m'avoir répondu et de m'aider !!
je ne comprends pas cela (voir juste au dessus) ??
Sinon, j'ai modifié ce que tu m'as dit. merci encore !
Marsh Posté le 22-01-2009 à 18:17:35
ajoute :
var_dump($results)
après l'appel de mysql_fetch_object, et dit ce qui s'affiche
Marsh Posté le 22-01-2009 à 18:22:04
Petite remarque :
1) le @ qui débute un nom de fonction ne sert qu'à cacher les messages d'erreur et d'alertes (warning)
2) le seul message d'alerte retourné par mysql_query est celui pour indiquer qu'il n'existe pas de connexion à la base de donnée qui soit utilisable
3) mysql_select_db retourne le même message d'erreur et est placé plus tôt dans le code
4) le ' or die($sql."<br>".mysql_error()) ' affichera 10 fois plus d'informations utile pour un pirate que ce qu'un message d'erreur php aurait indiqué pour une requête qui n'a pas marché
Au vu de tout ça, qu'elle est l'utilité de l' @ que tu as mis devant mysql_query à part compliquer le débuguage?
Marsh Posté le 22-01-2009 à 18:23:57
merci !!!
Voilà où j'en suis : (aucun changement....) merci de me co,nsacrer du temps, c'est vraiment sympa.
Code :
|
Marsh Posté le 22-01-2009 à 18:27:35
Citation : $result = mysql_fetch_object($requete) ; |
Citation : var_dump($results) ; |
Il faut choisir, avec ou sans "s"?
Citation : if(var_dump($results)) |
RTFM (lis la doc)
Définition de cette fonction :
Citation : void var_dump ( mixed $expression [, mixed $expression [, $... ]] ) |
void = ne retourne rien.
Tu ne peux donc pas tester ce qu'elle retourne vu qu'elle ne retourne rien.
Une fois que t'auras corrigé le coup du "s", qu'est ce que le var_dump à affiché dans ton navigateur?
Marsh Posté le 22-01-2009 à 18:38:21
omega2 a écrit : |
désolé... et merci, je suis vraiment pas doué....
voilà où j'en suis....
Code :
|
navré d'être votre "boulet du soir"....
P.S. : j'ai supprimé le @ je l'ignorais, tout simplement... merci de l'info.
Marsh Posté le 22-01-2009 à 18:40:05
omega2 a écrit :
Il faut choisir, avec ou sans "s"?
|
désolé, je me suis trompé, sans "s" bien sur.
omega2 a écrit :
void = ne retourne rien. |
Je sais je voulais dire tester la valeur afficher plutot que de tester le type de $result.
Marsh Posté le 22-01-2009 à 18:43:13
Blatman09 a écrit :
|
non, var_dump, c'est juste pour tester : en +, comme le dit omega2, var_dump ne retourne rien donc if(var_dump($result)) revient à faire : if(NULL) (il me semble).
Tu fais var_dump($result), tu nous dit ce qui s'affiche quand login et/ou mot de passe est/sont invalide(s).
Marsh Posté le 22-01-2009 à 18:45:23
voilà, j'ai bien mis :
Code :
|
aucun changement... j'accède toujours à ma "page2.php"....
Marsh Posté le 22-01-2009 à 18:46:33
On ne peut pas tester la valeur affiché.
Spoiler : Sauf en jouant avec les ob_start et conpanie mais ça n'a aucun intéré dans le cas présent. |
Le var_dump sert juste à afficher le contenu de la variable avec la structure du contenu. C'est une fonction qu'on utilise juste le temps de débuguer et qu'on enlève toujours une fois qu'on a fini.
Là pour continuer à t'aider, il faut que tu nous dises ce que le var_dump t'as affiché. Tant que tu ne nous l'auras pas dit, on ne pourra pas t'aider d'avantage.
PS : Pour le "s", c'est une erreur classique d'inattention. On l'a tous fait cette erreur là et plus qu'à notre tour, je dois l'avouer.
Marsh Posté le 22-01-2009 à 18:48:40
omega2 a écrit : |
comment voir ce que cela affiche ? navré, là je suis perdu !!!
(ok pour l'erreur, merci...
Marsh Posté le 22-01-2009 à 18:52:15
J'allais dire "en regardant ce qui s'affiche dans le navigateur " mais je vais compléter par un "et en désactivant les redirections le temps des tests".
Et du coup, je viens de réaliser un truc que je vais tourner en question : c'est normal que tu renvoies vers la même page quelque soit le résultat de ton traitement?
Marsh Posté le 22-01-2009 à 18:53:46
omega2 a écrit : J'allais dire "en regardant ce qui s'affiche dans le navigateur " mais je vais compléter par un "et en désactivant les redirections le temps des tests". |
oupsssss non, si le couple login /mdp est incorrect, je veux que cela ré affiche ma page index.php....
Marsh Posté le 22-01-2009 à 18:59:19
le problème, c'est que vu ton code initial, tu renvois vers index.php quand :
1) le couple est correct
2) le couple est incorrect
3) on a pas saisie les deux
Heureusement, seul dans le cas 1) tu stockes l'utilisateur choisit.
Marsh Posté le 22-01-2009 à 19:01:15
omega2 a écrit : le problème, c'est que vu ton code initial, tu renvois vers index.php quand : |
ah..... mais pourtant, quand je tape n'importe quoi pour tester, j'arrive bien sur ma page "page2.php", je n'y comprends plus rien....
Marsh Posté le 22-01-2009 à 19:10:25
Petite incompréhension je crois.
Visiblement, le code php que tu as indiqué au début est celui de ta "page2.php". (je me trompe?)
Le formulaire html lui est sur une autre page.
Quand tu valides le formulaire, le navigateur appelle la page "page2.php" ce qui est tout à fait normal vu que c'est ce qui est indiqué.
Vu le code php que tu as indiqué dans ton premier message, quelque soit ce que tu as saisie dans le formulaire, tu seras redirigé vers "index.php" dès que le traitement sera finis. C'est le cas ou non? Si ça n'est pas le cas, demande à ton navigateur de t'afficher le source de la page. Si tu y vois le code php alors c'est que tu n'as pas mis tes pages sur un serveur qui traite le code php. Si ça n'est pas fait, alors installe wamp par exemple et ouvre les pages en passant par l'adresse "http://localhost/".
Si le navigateur t'as affiché le code php alors on n'a pas besoin de chercher plus loin, par contre s'il t'a affiché autre chose alors ça serait bien que tu nous copies ce qu'il t'a affiché quand t'as demander le code de la page au navigateur.
PS : Le code de la page c'est par le menu :
"affichage"/"code source de la page" dans firefox
"affichage"/"source" dans IE
Marsh Posté le 22-01-2009 à 19:13:40
et non pourtant.... :
les 2 codes que j'ai cités sont biens dans ma page index.php
lorsque je fais afficher le code source (firefox) je ne vois pas mon code php, il est bien géré donc....
bon, à ce stade, je vous affre la boisson de votre choix...
Marsh Posté le 22-01-2009 à 19:18:05
bon, voici le code complet de ma page index.php désolé pour la longueur.... dites moi si je devrai ou non éditer mon message.
Sinon, je pense à autre chose, j'ai un autre forulaire dans ma page, qui fonctionne très bien, mais le fait qu'il soit présent affecte peut être celui qui ne fonctionne pas ???
message édité, voici le code de ma page index.php :
Marsh Posté le 22-01-2009 à 19:22:51
enregistre ton script sur http://www.rafb.net/paste/ plutot.
Retire le code du forum et met le lien vers ton code.
Marsh Posté le 22-01-2009 à 19:30:23
voilà qui est fait, merci !!
Marsh Posté le 22-01-2009 à 20:26:56
VIRE DESSUITE LES INFOS DE CONNEXION A LA BASE DE DONNEE !!!
ligne 7 Vs 14 : $pass Vs $password
ligne 14 : aucune protection du contenu de la requête. Si je saisie comme mot de passe et comme utilisateur "0' or 1=1", on peut se connecter. Cette technique permet aussi de se connecter avec un pseudo existant sans connaitre le mot de passe associé. Avec ça, je deviens administrateur quand je veux. A noter que ça c'est les utilisations "gentilles". On peut aussi mettre par terre ton serveur SQL (lancer des requêtes tellement lourdes que ton serveur n'arrivera plus à répondre aux demandes) et bousiller certaines tables.
ligne 21 : On t'as dit plus haut que "if(var_dump($result))", c'est n'importe quoi. Remet le test que t'avais au départ
lignes 43 et suivantes : T'as un autre système de connexion qui vient d'un très mauvais logiciel (il fonctionne mais il est bien pourri au niveau code) que t'as récupéré sur le net. Même si la requête d'identification est un peu plus sécurisé, sa sécurité peut être prise en défaut (pas d'utilisation des fonctions de sécurité de mysql) En tout cas, je me pose une question du coup : pourquoi ne pas utiliser le même système d'identification pour tout le site? Ca fait vraiment très brouillon quand un site propose plusieurs formulaires de connexion et que chaque formulaire ne donne accès qu'à une seule fonctionnalité du site.
ligne 77 à 92 : Alors là, c'est plus une faille, c'est un océan. T'imagines, on peut changer le mot de passe de l'administrateur du calendrier sans connaitre l'ancien mot de passe et sans être identifié. En clair, n'importe qui peut prendre la place de l'administrateur. Pour ça il suffit de saisir deux fois le même mot de passe, un peu comme si on créait un nouveau compte mais en piquant l'identité de l'administrateur.
Si ça ne se voit pas vraiment sur leur démo, c'est simplement qu'ils remettent le mot de passe initial à chaque affichage. Par contre quand on fait gaffe, on voit quand même qu'on rentre dans la fonction de changement du mot de passe et que le changement est accepté (même s'ils remettent à nouveau le mot de passe par défaut à l'affichage suivant).
Pour le reste, il n'y a rien qui me saute à la figure.
Marsh Posté le 23-01-2009 à 18:55:50
omega2 a écrit : Alors là, c'est plus une faille, c'est un océan. |
C'est justement parce que je ne sais pas nager que je suis venu ici pour demander une bouée....
Merci beaucoup à Omega2 et à Luc@s pour le temps qu'ils m'ont consacré, l'aide et les pistes. Je vais reprendre tout mon code de A à Z., mais j'ai cependant une dernière question :
Le code php qui concerne la mise en place de ma session doit il être en tout début de page, ou alors doit il être avec le code de mon formulaire ? ou peu importe ?
Merci d'avance....
Marsh Posté le 23-01-2009 à 18:58:50
Personnellement, je prépare tous les calculs et toutes les données avant l'affichage, et je te recommande fortement de procéder de cette façon.
Marsh Posté le 23-01-2009 à 19:00:34
Le session_start() ; doit être mis avant tout appel aux variables de session et avant tout envoie de texte au navigateur. En pratique, la plupart des gens le mettent en premier dans leur page pour ne plus avoir à s'en préoccuper (et pour éviter de créer des bugs quand ils modifieront le fichier)
Marsh Posté le 23-01-2009 à 19:03:26
omega2 a écrit : Le session_start() ; doit être mis avant tout appel aux variables de session et avant tout envoie de texte au navigateur. En pratique, la plupart des gens le mettent en premier dans leur page pour ne plus avoir à s'en préoccuper (et pour éviter de créer des bugs quand ils modifieront le fichier) |
Merci à tous les deux..... pour le session_start(), je savais, c'était pour le reste du code.
merci encore pour l'aide apportée, j'ai encore beaucoup de chose à apprendre car non maitrisées. Je me tournerai peut être à nouveau vers vous si je règle mon problème (autant faire profiter) ou bien si j'ai encore besoin d'aide.
Blatman09
Marsh Posté le 23-01-2009 à 19:03:32
ah s'il parle de session_start() y'a pas d'hésitation à avoir.
Marsh Posté le 23-01-2009 à 20:46:41
me revoici !! (==> oh non, pas lui !!)
bon, ayant constaté mon incompétence quasi totale, j'ai tout repris à 0. Bien sûr, je me suis aidé de quelque chose trouvé sur internet, mais étrangement, j'ai plus confiance en vous.
tout fonctionne ... ou presque ! sur une page censée être protégée, si je tape directement son url, elle s'affiche.....
Voici mes codes utilisés, et cette fois ci, je ne ferai pas l'erreur grave de débutant de mettre mes identifiants.... (pas taper !)
Ma page index qui contient mon fomulaire :
Code :
|
la page : login.php :
Code :
|
la page : variables.php :
Code :
|
la page fonctions.php :
Code :
|
la page secure.php : (qu'on me dit de mettre en include sur mes pages sécurisées, sauf que si je le fais, cela ne marche pas, même avec un session_start();
seul le session_start() fonctionne, mais j'ai le problème ennoncé en début de message.
Code :
|
merci une fois de plus de m'éclairer.....
P.S. : j'ai bien sûr crée ma table et rempli un login et mdp)
Marsh Posté le 23-01-2009 à 21:44:36
Ho non pas lui ^^
Ben ça c'est du compliqué juste pour faire une session...
J'avoue j'ai lu de travers ce que tu as mis.
Je suppose que tu sais te connecter à ta base de donnée, donc pas nécessaire de nous remettre ces lignes là
Là tu as pris un truc tout fait sur le net, j'ai un peu de mal à m'y retrouver arf
En faite tu voudrais un tuto pour mettre un systeme de session sur ton site ?
Il est tout beau le site de ac-grenoble
tu sais faire un super design comme ça sans savoir faire la session ? moi je ne sais grave pas faire un design comme ça sur un site, **chui jalouse** lol
bon je laisse les pros te répondre, mais sans avoir un niveau d'experte, on peut faire un système de session sur un site plus simplement.
j'ai l'impression que du faite que tu n'as pas construit toi meme ces lignes de code, tu ne piges pas où les variables se baladent.... (pas français ma phrase)
Marsh Posté le 23-01-2009 à 21:52:20
Merci pour ta réponse !!
oui, il y a sûrement plus simple effectivement !!! mais ne sachant pas faire.... lol
merci beaucoup pour les compliments pour le site, avec toutes les heures que j'ai pu y passer, ça fait bien plaisir de lire ça !
Marsh Posté le 23-01-2009 à 21:53:32
tu sais programmer quoi en php (pour voir si ça vaut le coup que je te copie colle mes "codes" que j'utilise pour mes sites)
attention, je te copie colle mes codes, les autres vont dire que c'est beurk lol
Marsh Posté le 23-01-2009 à 21:58:09
Artesia a écrit : tu sais programmer quoi en php (pour voir si ça vaut le coup que je te copie colle mes "codes" que j'utilise pour mes sites) |
non, mais moi je ne dirai pas que c'est beurk !!! promis !! lol
oui, je veux juste un système de session sur mon site, mais sans inscription, je crée un unique login / mdp dans ma table, et c'est tout....
Marsh Posté le 23-01-2009 à 22:28:54
MDR ton MP
Ne t'inquiete pas, je suis débutante aussi !!
Mais je bidouille comme je peux, j'ai pigé quelque truc et je m'en sers lol
Donc si je comprends bien ce que tu m'as dit, tu veux une session sans inscription, un peu un système comme pour te connecter pour administrer ton site.
Il se peut que je répète des trucs qui ont déjà été dit plus haut :
En haut de ton header du site tu met ton :
session_start()
Dans la PAGE 1
Tu mets ton formulaire de connexion où tu veux (enfin accessible quand meme mdr), on appelle cela la PAGE 1, l'action du formulaire donne sur la PAGE 2
Dans la PAGE 2
Tu récupères la variable avec la méthode post :
Code :
|
Tu te connectes à ta base et tu vérifies ton login et mot de passe
Code :
|
n'oublie pas de fermer la connexion mysql_close($link); (le variable link, si c'est variable link que tu utilises pour te connecter)
Là tu vérifies ton mot de passe :
Code :
|
Et à chaque fois dans ton HEADER :
En plus du session_start();
tu mets :
$loginheader = $_SESSION['login'];
$passwordheader = $_SESSION['password'];
A partir de là moi je vérifie à chaque fois via la base de l'identification (en réalité je ne sais pas si c'est bien utile, mais ça me rassure niveau sécurité)
Je met dans une variable que je nomme par exemple $connecte (la faute d'orthographe est faite exprès)
if (!isset($loginheader)) ($connecte = "pasconnecte" );
Je vérifie dans la base les identifiants :
Code :
|
comme ça j'ai une variable $connecte qui met permet de savoir s'il existe une session et si je suis bien connecté
par exemple après pour que seule la personne connecté puisse faire telle chose sur ta page php tu mets:
Code :
|
Marsh Posté le 23-01-2009 à 22:31:24
Il y a une erreur :
3ème truc de code ligne 8
faut mettre elseif à la place de else
Marsh Posté le 23-01-2009 à 22:38:30
génial !!!!! mais c'est que je commence à comprendre, c'est dingue !! comme quoi mon cas n'est pas si désespéré !!!
par contre, je ne comprends pas la différence entre $login et $loginheader
merci encore, vraiment !
Marsh Posté le 23-01-2009 à 23:07:55
ben euh la différence, c'est une question de ne pas mélanger les variables du header et des autres pages.
pour éviter le conflit entre les variables si tu préfères
par exemple tu es connecté mais tu as besoin de la variable $login pour faire autre chose, ben ça ne touchera pas la variable $loginheader qui te sert à l'identification
Marsh Posté le 22-01-2009 à 17:43:04
Bonjour à toutes et à tous,
Tout d'abord, je tiens à préciser que j'ai bien chercher partout, et que je n'ai pas trouvé mon souci dans le forum, je me permets donc un nouveau sujet...
J'ai un souci en ce qui concerne les sessions.
J'ai bien crée ma table, mon formulaire, mais rien ne fonctionne. J'ai du faire plein de fautes partout, mais j'avoue y avoir passé des heures, et je m'y perds moi même.
Voici la page qui contient le formulaire.
Voici mon code au tout début de ma page :
Voici le code de mon formulaire, plus loin dans ma page index.php :
J'ai sûrement fait des erreurs entre les "exemple" et 'exemple'.... au secours !!!
Merci de m'aider, cela serait adorable.
P.S. : comme beaucoup, je suis débutant, ne me criez pas trop dessus.....je ne demande qu'à apprendre !
Blatman09