Alors apprend à lire.
Dans le-dit code :
Code:// Si l'utilisateur n'utilise pas windows, ou si le navigateur n'est pas chrome ni IE, échoue
Version imprimable
Alors apprend à lire.
Dans le-dit code :
Code:// Si l'utilisateur n'utilise pas windows, ou si le navigateur n'est pas chrome ni IE, échoue
Salut,
dans le post que tu cite, tu as cela :
Donc, pour Firefiox, tu aura toujours false...Code:
1
2
3 if ($browser['platform'] != 'windows' OR ( $browser['name'] != 'Google Chrome' AND $browser['name'] != 'Internet Explorer')) { return false; }
Ca, Jérôme, je l'avais bien vu et c'est pourquoi avec Firefox, le retour de la fonction connexionWindows est vide (comme dit Geoffrey74, toujours false) mais je fais le test (ligne 11 de la fonction html2-milieu dans le post #16) et c'est pourquoi si la valeur est vide (ou false), on affiche le formulaire d'authentification et c'est justement la variable de session $_SESSION['auth'] positionnée par l'action de ce formulaire qui reste à false quand ça devrait être true.
Remplace
ParCode:if ((isset($SESA))&&!(empty($SESA))) {
Code:if ( empty($SESA) ) { // vide ou false ou 0.....
Tes codes sont tellement biscornus qu'une chatte n'y retrouverait pas ses poussins...
Ca serait pas plutôt une poule qui retrouverait pas ses poussins ? Quoique si la chatte est née à Tchernobyl ou à Fukushima, tout peut arriver...:mrgreen:
Voici mon code actuel mais le problème est encore là
Code:
1
2
3
4
5
6
7
8
9
10 $_SESSION['user']=$SESA=connexionWindows(); if (!(empty($SESA))) {//variable non vide donc le SSO a fonctionné $_SESSION["auth"]=true; // traitement d'un cas particulier } } if ( ! $_SESSION["auth"]) {//formulaire d'authentification ... }
et qu'est-ce que tu trouves biscornu ? (avec Firefox, on a bien l'affichage du formulaire d'authentification et pas avec les 2 autres navigateurs, donc le code ci-dessus semble fonctionner)
Bonjour,
pas dispo pour répondre avant :aie:
Ce qui ne va pas, c'est dans l'action du formulaire : même si les identifiants sont corrects et que la variable $auth est positionnée à true, la variable de session $_SESSION['auth'] reste à false.
Voici mon code (sans aucun point de suspension) :
html2-milieu.php :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 include "fct_SESA.php"; $_SESSION["auth"]=false; $_SESSION['user']=$SESA=connexionWindows(); if (!(empty($SESA))) { $_SESSION["auth"]=true; $_usr=$_pwd=$SESA; } if ( ! $_SESSION["auth"]) { $_SESSION['eff']=0; //this initialization is placed here because it has to be done only at the beginning ?> <main> <section> <form id="authform" action="<?php echo SITE_URL_HTTP;?>/page/authenticate.php" method="post"> <p> <a href="http://www.schneider-electric.com/b2b/en/campaign/life-is-on/life-is-on.jsp" target="_blank"> <img src="<?php echo SITE_URL_HTTP; ?>/images/logo/LifeIsOn1x30_transparent.jpg" alt=''/></a><span class="dblock"></span> <?php echo $str[323]; ?> <h2><i class="fa fa-user-o" aria-hidden="true"></i> LOGIN</h2> <p> <label for="login2">Username</label> <input id="login2" type="text" size="30" value="" name="login2" /> </p> <p> <label for="pwd2">Password</label> <input class="btsubmit" id="pwd2" type="password" size="30" value="" name="pwd2" /> </p> <p> <input type="submit" value="Submit" name="goAuth" /> </p> </form> </section> <br /> </main>
authenticate.php :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 <?php // en tout début de fichier (RIEN AVANT)session_start(); require_once(dirname(__DIR__).'\_includes\html0-topPHP.php'); // INIT + FONCTIONS et autres config en PHP require_once(dirname(__DIR__).'/_includes/html1-debut.php'); // contient le DEBUT du code HTML, le contenu de <head> SANS la balise </head> require_once(dirname(__DIR__).'/_includes/html2-milieu.php'); // contient la balise </head>et le DEBUT du <body>, A PARTIR DE la balise </head> function authentification() { global $bdd; $auth=false; $sql = 'select * from `users`'; $qid = $bdd->prepare($sql); $qid->execute(); while ($row=$qid->fetch(PDO::FETCH_ASSOC) ) { $usr = $row['user']; $password = $row['password']; if (($usr == $_POST['login2']) && ($password == $_POST['pwd2'])) { $auth = true; $_SESSION['user']=$usr; $_SESSION['pass']=$password; } } $_SESSION['auth']=$auth; return $auth; } $auth=authentification(); header ("Location: $_SERVER[HTTP_REFERER]" ); exit(); require_once(dirname(__DIR__).'/_includes/html3-fin.php'); // contient la FIN du code HTML, jusqu'au </body></html> session_write_close();
Salut,
tu fais un exit() et tu exécute du code ensuite.Code:
1
2
3
4
5
6 $auth=authentification(); header ("Location: $_SERVER[HTTP_REFERER]" ); exit(); require_once(dirname(__DIR__).'/_includes/html3-fin.php'); // contient la FIN du code HTML, jusqu'au </body></html> session_write_close();
Le code exécuté après exit() ne sera jamais exécuté.
Essai ça, a tout hasard :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 <?php // en tout début de fichier (RIEN AVANT)session_start(); require_once(dirname(__DIR__).'\_includes\html0-topPHP.php'); // INIT + FONCTIONS et autres config en PHP require_once(dirname(__DIR__).'/_includes/html1-debut.php'); // contient le DEBUT du code HTML, le contenu de <head> SANS la balise </head> require_once(dirname(__DIR__).'/_includes/html2-milieu.php'); // contient la balise </head>et le DEBUT du <body>, A PARTIR DE la balise </head> function authentification() { global $bdd; $auth=false; $sql = 'select * from `users`'; $qid = $bdd->prepare($sql); $qid->execute(); while ($row=$qid->fetch(PDO::FETCH_ASSOC) ) { $usr = $row['user']; $password = $row['password']; if (($usr == $_POST['login2']) && ($password == $_POST['pwd2'])) { $auth = true; $_SESSION['user']=$usr; $_SESSION['pass']=$password; } } return $auth; } $_SESSION['auth'] = authentification(); header ("Location: $_SERVER[HTTP_REFERER]" ); require_once(dirname(__DIR__).'/_includes/html3-fin.php'); // contient la FIN du code HTML, jusqu'au </body></html> session_write_close(); exit();
Bonjour Laurent,
tu es bien brave, mais... tes bouts de code sont éparpillés dans ton fatras d'includes et autres rajouts...
Question 1 : à quoi bon utiliser une fonction authentification(), là on un traitement direct (sans fonction) suffirait ? :koi:
Question 2 : as-tu vérifié que cette fonction TRAITE correctement les données et renvoie le bon résultat ?
- faire un echo de $_POST notamment
- et plus largement : FAIRE UN DEBOGAGE DE BASE ??
Question 3 : Mais qu'est-ce que c'est que cette fonction ?????
- tu fais une requête de TOUS les users
- tu parcours pour chercher celui avec les bons login et pwd...
Tu ne sais donc pas faire une requête avec une clause WHERE ??? :cfou:
Bonjour,
j'ai répondu aux 3 points (je pense) ; évidemment pour pouvoir afficher le résultat de l'authentification, je commente la redirection ; donc voici mon code (avec aussi le contenu des includes) :
authenticate.php :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 <?php // en tout début de fichier (RIEN AVANT)session_start(); require_once(dirname(__DIR__).'\_includes\html0-topPHP.php'); // INIT + FONCTIONS et autres config en PHP require_once(dirname(__DIR__).'/_includes/html1-debut.php'); // contient le DEBUT du code HTML, le contenu de <head> SANS la balise </head> require_once(dirname(__DIR__).'/_includes/html2-milieu.php'); // contient la balise </head>et le DEBUT du <body>, A PARTIR DE la balise </head> global $bdd; $auth=false; $sql = 'select COUNT(*) AS compte from `users` where user="'.$_POST['login2'].'" AND password="'.$_POST['pwd2'].'"'; $qid = $bdd->query($sql); $row=$qid->fetch(PDO::FETCH_OBJ); $nrows=$row->compte; if ($nrows) { $auth=true; $_SESSION['user']=$_POST['login2']; $_SESSION['pass']=$_POST['pwd2']; } echo "auth=".$auth."debug_authenticate l.24<br/>"; $_SESSION['auth']=$auth;$_SESSION['auth']=true; echo "26 authenticate _SERVER[HTTP_REFERER]=".$_SERVER[HTTP_REFERER]."<br/>"; var_dump($_POST);var_dump($_SESSION); header ("Location: $_SERVER[HTTP_REFERER]" ); require_once(dirname(__DIR__).'/_includes/html3-fin.php'); // contient la FIN du code HTML, jusqu'au </body></html> session_write_close(); exit();
html0-topPHP.php :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 <?php session_start(); error_reporting(E_ALL ^ (E_NOTICE|E_WARNING|E_DEPRECATED)); header('Content-type: text/html; charset=UTF-8'); include_once dirname(__DIR__)."\config\config.php"; include_once dirname(__DIR__)."\connect_mysql.php"; include_once dirname(__DIR__)."\connect_mysql_planning.php"; /* language management */ if ( empty($_SESSION['lang']) ) $_SESSION['lang'] = 'fr'; // par défaut $lang = (isset($_GET['lang'])) ? trim($_GET['lang']) : $_SESSION['lang']; if ( !empty($lang) ) $_SESSION['lang'] = $lang; // to put in SESSION include_once dirname(__DIR__)."\language.".$_SESSION['lang'].".inc.php";//include of language file ?>
config.php :
Code:
1
2
3
4
5
6
7
8
9
10
11
12 <?php // ----------------------------------------------------------- // CONFIGURATION : // ----------------------------------------------------------- if(!defined('PATHeis')) define('PATHeis','eis2'); if(!defined('PATH')) define('PATH','eis2'); if(!defined('SITE_URL_WWW_LOCAL')) define('SITE_URL_WWW_LOCAL', 'localhost:8081/eis2/eis'); // en TEST LOCAL, A REMPLACER PAR... if(!defined('SITE_URL_WWW_PROD')) define('SITE_URL_WWW_PROD', '10.234.40.34/'.PATH); // en PRODUCTION if( !defined('SITE_URL_WWW')) define('SITE_URL_WWW', isset($_SERVER['SERVER_NAME']) && $_SERVER['SERVER_NAME'] == 'localhost' ? SITE_URL_WWW_LOCAL : SITE_URL_WWW_PROD ); if( !defined('SITE_URL_HTTP')) define('SITE_URL_HTTP', 'http://'.SITE_URL_WWW); ?>
connect_mysql.php :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 <?php include __DIR__.'/config/config.php'; if(empty($bdd)){ include_once (__DIR__.'/new/class_MyPdo.php'); } //// connexion try{ $bdd = new MyPdo("support_eis"); } catch(PDOException $e){ echo "argggggggggggggg".$e->getMessage(); return(FALSE); } ?>
class_MyPdo.php :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 <?php error_reporting(E_ALL ^ E_DEPRECATED ^ E_NOTICE); ini_set('display_errors','1'); // MyPDO // ls : la classe MyPdo hérite de la classe PDO (extends) class MyPdo extends PDO { protected $DB_NAME; protected $HOST = "localhost"; protected $USER ="root"; protected $PASS =""; // ls : le constructeur de MyPdo appelle le constructeur de PDO en lui passant ses paramètres function __construct($db_name) { /* ls : la variable $pdo_options, ça date de ma formation de 2012 */ $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION; $pdo_options[PDO::ATTR_EMULATE_PREPARES] = false;//important sur les configs récentes $pdo_options[PDO::ATTR_DEFAULT_FETCH_MODE] = PDO::FETCH_OBJ;//pour le mode objet $pdo_options[PDO::MYSQL_ATTR_INIT_COMMAND] = "SET NAMES utf8";//pour l'utf-8 $this->DB_NAME = $db_name; parent::__construct('mysql:host=' . $this->HOST . ';dbname=' . $this->DB_NAME,$this->USER,$this->PASS,$pdo_options); } } ?>
html1-debut.php :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=9" /> <title> EIS System Support Site</title> <link rel="stylesheet" href="http://fontawesome.io/assets/font-awesome/css/font-awesome.css"> <link href="<?php echo SITE_URL_HTTP; ?>/css/style.css" rel="stylesheet"/> <link href="<?php echo SITE_URL_HTTP; ?>/css/style-menu2.css" rel="stylesheet"/> <link href="<?php echo SITE_URL_HTTP; ?>/css/style-menu_images.css" rel="stylesheet"/> <!--- line for the planning --> <link rel="stylesheet" type="text/css" href="<?php echo SITE_URL_HTTP; ?>/calendar-pdo/stylesheets/calendar.css" media="screen" /> <?php if (isset($_GET['eff'])) { ?> <style type="text/css">.cacher { display: none; } </style> <?php $_SESSION['eff']=1; }?> <!-- partie pour add_event.php --> <link rel="stylesheet" href="http://code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css"> <script src="http://code.jquery.com/jquery-1.10.2.js"></script> <script src="http://code.jquery.com/ui/1.11.4/jquery-ui.js"></script> <link rel="stylesheet" href="/resources/demos/style.css"> <script> $(function() { $('#datepickerd').datepicker({ dateFormat: 'dd-mm-yy', firstDay:1, minDate: new Date(), onSelect: function() { if( $("#datepickerf").val() == '' ) { $('#datepickerf').val( $(this).val() ); } }, changeMonth: true, changeYear: true }); $('#datepickerf').datepicker({ dateFormat: 'dd-mm-yy', firstDay:1, minDate: new Date(), changeMonth: true, changeYear: true }); $('#datepickeros').datepicker({ dateFormat: 'dd-mm-yy', firstDay:1, minDate: new Date(), changeMonth: true, changeYear: true }); }); </script>
html2-milieu.php :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 </head> <body> <!-- debut body html2-milieu 3 --> <?php //echo "template 4 sessionauth=".$_SESSION["auth"]."<br/>"; if ( ! $_SESSION["auth"]) { $_SESSION['eff']=0; //this initialization is placed here because it has to be done only at the beginning ?> <main> <section> <form id="authform" action="<?php echo SITE_URL_HTTP;?>/page/authenticate.php" method="post"> <p> <a href="http://www.schneider-electric.com/b2b/en/campaign/life-is-on/life-is-on.jsp" target="_blank"> <img src="<?php echo SITE_URL_HTTP; ?>/images/logo/LifeIsOn1x30_transparent.jpg" alt=''/></a><span class="dblock"></span> <?php echo $str[323]; ?> <h2><i class="fa fa-user-o" aria-hidden="true"></i> LOGIN</h2> <p> <label for="login2">Username</label> <input id="login2" type="text" size="30" value="" name="login2" /> </p> <p> <label for="pwd2">Password</label> <input class="btsubmit" id="pwd2" type="password" size="30" value="" name="pwd2" /> </p> <p> <input type="submit" value="Submit" name="goAuth" /> </p> </form> </section> <br /> </main> <?php } else { /* if $_SESSION["auth"] is true --*/ include dirname(__DIR__)."\\language.".$lang.".inc.php"; include dirname(__DIR__)."\\header.inc.php"; include dirname(__DIR__)."\\menupage.php"; ?> <?php } // ICI, ON MET LE CONTENU SPECIFIQUE A LA PAGE (HTML, PHP,...) ?>
html3-fin.php :
Evidemment, ça fait beaucoup de code...Est-ce que tu vois le problème ?Code:
1
2
3
4
5
6
7
8
9 <?php if ( $_SESSION["auth"]) include dirname(__DIR__)."\\footer.inc.php"; if ((isset($_SERVER['SERVER_NAME'])) && ($_SERVER['SERVER_NAME'] == 'localhost' )) { ?> <br/><br/><a href="<?php echo SITE_URL_HTTP;?>/annul_auth.php"><?php echo $str[118];?></a> <?php } ?> </body></html>
Quoi qu'il en soit, tu ne peux pas mettre un header() après html1-debut.php, puisqu'il contient du HTML.
Le traitement doit donc se faire avant cet include.
Tu fais les choses contre tout bon sens et logique.
Normal que tu n'aies pas les résultats espérés.
Autre problème : il est où, le résultat de?Code:var_dump($_POST);var_dump($_SESSION);
OK, j'ai déplacé le header avant le html mais le problème reste :(
authenticate.php :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 <?php // en tout début de fichier (RIEN AVANT)session_start(); require_once(dirname(__DIR__).'\_includes\html0-topPHP.php'); // INIT + FONCTIONS et autres config en PHP global $bdd; $auth=false; $sql = 'select COUNT(*) AS compte from `users` where (user="'.$_POST['login2'].'" AND password="'.$_POST['pwd2'].'")'; $qid = $bdd->query($sql); $row=$qid->fetch(PDO::FETCH_OBJ); $nrows=$row->compte; if ($nrows) { $auth=true; $_SESSION['user']=$_POST['login2']; $_SESSION['pass']=$_POST['pwd2']; } echo "auth=".$auth."debug_authenticate l.20<br/>"; $_SESSION['auth']=$auth;$_SESSION['auth']=true; echo "22 authenticate _SERVER[HTTP_REFERER]=".$_SERVER[HTTP_REFERER]."<br/>"; var_dump($_POST);var_dump($_SESSION); header ("Location: $_SERVER[HTTP_REFERER]" ); //header so before html code inside html1-debut.php require_once(dirname(__DIR__).'/_includes/html1-debut.php'); // contient le DEBUT du code HTML, le contenu de <head> SANS la balise </head> require_once(dirname(__DIR__).'/_includes/html2-milieu.php'); // contient la balise </head>et le DEBUT du <body>, A PARTIR DE la balise </head> require_once(dirname(__DIR__).'/_includes/html3-fin.php'); // contient la FIN du code HTML, jusqu'au </body></html> session_write_close(); exit();
Je ne crois pas ce soit un manque d'effort : ta question (fin du post 31), je viens de la découvrir !
Voici la réponse (et aussi les 2 echo placés avant) :
Citation:
auth=1debug_authenticate l.33
35 authenticate _SERVER[HTTP_REFERER]=http://10.234.40.34/eis2/page/authenticate.php
array (size=3)
'login2' => string 'SESA27384' (length=9)
'pwd2' => string 'SESA27384' (length=9)
'goAuth' => string 'Submit' (length=6)
array (size=6)
'lang' => string 'fr' (length=2)
'str' => string 'a:320:{i:1;s:12:"INTRANET P&A";i:2;s:7:"Accueil";i:3;s:14:"Administration";i:4;s:10:"Envoi mail";i:5;s:9:"Français";i:6;s:7:"English";i:340;s:14:"Nous contacter";i:7;s:35:"Impossible d'exécuter la requête.";i:8;s:37:"Aucun élément trouvé dans la base.";i:10;s:41:"Connexion Impossible sur le Serveur MySQL";i:11;s:36:"Sélection de la Base SQL Impossible";i:12;s:46:"Impossible d'effectuer la requete d'Effacement";i:13;s:40:"Impossible d'obtenir le nombre de lignes";i:14;s:36:"Aucune machine n'a été tr'... (length=11261)
'auth' => boolean true
'user' => string 'SESA27384' (length=9)
'eff' => int 0
'pass' => string 'SESA27384' (length=9)
Bon. OK.
Donc ??
Tu en conclus quoi ?
Ça correspond ou pas aux données attendues ??
Sinon, mets des écho, var_dump à d'autres endroits de ton code pour savoir où ça foire...
C'est ça, le débogage de base !
Je viens de faire un nouveau test, et c'est vraiment très curieux :
j'ai modifié authenticate.php pour faire une redirection vers le fichier test.php que j'ai créé :
Code:
1
2
3
4
5 <?php session_start(); var_dump($_SESSION); ?>
et le résultat de ce var_dump est :donc auth et user sont faux (et user est donné comme un booléen alors que c'est une string...)Citation:
array (size=6)
'lang' => string 'fr' (length=2)
'str' => string 'a:320:{i:1;s:12:"INTRANET P&A";i:2;s:7:"Accueil";i:3;s:14:"Administration";i:4;s:10:"Envoi mail";i:5;s:9:"Français";i:6;s:7:"English";i:340;s:14:"Nous contacter";i:7;s:35:"Impossible d'exécuter la requête.";i:8;s:37:"Aucun élément trouvé dans la base.";i:10;s:41:"Connexion Impossible sur le Serveur MySQL";i:11;s:36:"Sélection de la Base SQL Impossible";i:12;s:46:"Impossible d'effectuer la requete d'Effacement";i:13;s:40:"Impossible d'obtenir le nombre de lignes";i:14;s:36:"Aucune machine n'a été tr'... (length=11261)
'auth' => boolean false
'user' => boolean false
'eff' => int 0
'pass' => string 'SESA27384' (length=9)
Bonsoir,
j'y ai passé la journée, mais j'ai fini par trouver :D : avant, dans html2-milieu.php, je faisais l'authentification systématiquement, et maintenant seulement si elle n'a pas déjà été faite :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 include "fct_SESA.php"; if (!empty($_SESSION['user'])) { $SESA=$_SESSION['user']; $_SESSION["auth"]=true; } else { $_SESSION["auth"]=false; $_SESSION['user']=$SESA=connexionWindows(); if (!(empty($SESA))) { $_SESSION["auth"]=true; } } } if ( ! $_SESSION["auth"]) { // formulaire d'authentification } else { /* if $_SESSION["auth"] is true --*/ include dirname(__DIR__)."\\language.".$lang.".inc.php"; include dirname(__DIR__)."\\header.inc.php"; include dirname(__DIR__)."\\menupage.php"; }