Page 1 sur 3

Système de session PHP

Posté : 26 mai 2020, 10:07
par Ayaka
Bonjour, je cherche à réaliser un système de connexion sécurisé par session.
Voici mon code ci-dessous pour réaliser ledit système. Le fait est qu'il y a une erreur la dedans que je n'arrive pas du tout à trouver. À la ligne 59, je cherche à savoir si le mdp rentré est le même que dans ma BDD. Sauf que juste après cette recherche, plus rien ne se passe si le MDP est bon.
J'espère que je me suis bien exprimé et que vous avez pu comprendre mon problème.
Dans l'attente de votre aide,
Ayaka.

PS : A savoir que mon connexion.php est fonctionnel (pour l'avoir testé au préalable).
<!DOCTYPE html>
<meta charset="utf-8">
<html>
<head>
	<title>Connexion planning</title>
<?php
	require 'connexion.php';
	?>
<link rel="stylesheet" href="style.css">
	<link rel="stylesheet" type="text/css" href="tableaucss.css">
</head>
<body>
	<script src='https://cdnjs.cloudflare.com/ajax/libs/trianglify/0.1.5/trianglify.min.js'></script>
	<script src='https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.5/d3.min.js'></script><script src="./script.js"></script>

	<p><font size="+3"><center>Connexion gestion planning</center></font></p>

	<h2>Rentrer le login et le mot de passe :</h2>

	<form method="get">

		<p><label for="login">Rentrer le login :</label>
			<input type="text" name="login" id="login">
		</p>

		<p><label for="password">Rentrer le mot de passe :</label>
			<input type="password" name="password" id="password">
		</p>

		<p><input type="submit" name="submit" value="Connexion"></p>

	</form>
<?php 
if(!empty($_GET['login']) && !empty($_GET['password']))
{
	$login2="";
	$code2="";
	$erreur="";
	$req=$bdd->prepare('SELECT * FROM nomcode WHERE nom=:login1');
	$req->execute(array('login1'=>$_GET['login']));
	while ($donne=$req->fetch())
	{
		$login2=$donne['nom'];
		$code2=$donne['code'];
		echo $login2;
		echo $code2;
	}

	$req->closeCursor();

	if ($login2=="")
	{
		$erreur="Login inconnu";
	}
	if ($login2==$_GET['login'])
	{
		echo "oui";
		if ($code2==$_GET['password'])
		{
			echo "salut";
			session_name('gestion');
			session_start();
			$_SESSION['login']=$_GET['login'];
			$_SESSION['password']=$_GET['password'];
			header("location:gestionplanning.php");
			}
	}
	if ($code2!=$_GET['password'])
	{
		$erreur="Mot de passe incorrect";
	}
}
else
{
	$erreur="Un des champs n'est pas rempli";
}
?>
	
<p>Message d'erreur : <?php echo $erreur;?></p>

<p><b>Mot de passe oublié ? Contacter l'administrateur du site.</b></p>

</body>
</html>

Re: Système de session PHP

Posté : 26 mai 2020, 10:12
par Saian
Salut, le session_start doit toujours être appelé avant la moindre sortie ce qui n'est pas le cas ici. Tu aurais les erreurs affichées que tu aurais droit à un header already sent je pense. A moins que la session ne passe pas par un cookie, ce dont je doute ?

https://www.php.net/manual/fr/function. ... -start.php
Note:

Pour utiliser des sessions basées sur les cookies, session_start() doit être appelée avant d'afficher quoi que ce soit dans le navigateur.

Re: Système de session PHP

Posté : 26 mai 2020, 10:35
par Ayaka
Salut, le session_start doit toujours être appelé avant la moindre sortie ce qui n'est pas le cas ici. Tu aurais les erreurs affichées que tu aurais droit à un header already sent je pense. A moins que la session ne passe pas par un cookie, ce dont je doute ?

https://www.php.net/manual/fr/function. ... -start.php
Note:

Pour utiliser des sessions basées sur les cookies, session_start() doit être appelée avant d'afficher quoi que ce soit dans le navigateur.
Ça veut dire que je dois mettre le session_start(); où dans mon code ?
Désolé j'en demande beaucoup mais je ne m'y connais pas des masses :|

Re: Système de session PHP

Posté : 26 mai 2020, 10:44
par Saian
" Avant d'afficher quoique ce soit dans le navigateur "

Le php est exécuté par le serveur et généralement il génère de l'html qui est envoyé au client. Dès la première ligne qui n'est pas du php ça provoque une sortie vers le client. Tu dois donc mettre le session_start avant la première "sortie", dans ton cas tout en haut du fichier avant le doctype.

Généralement quand on utilise les sessions on se débrouille à avoir le session_start en include dans les premières lignes de code php de tous les fichiers.

Re: Système de session PHP

Posté : 26 mai 2020, 10:47
par Ayaka
D'accord merci.
J'ai essayé et ça ne change rien à mon résultat qui est que ça ne me connecte pas :/
Merci quand même pour l'aide, si vous avez d'autre conseils je suis preneur

Re: Système de session PHP

Posté : 26 mai 2020, 10:50
par Spols
c'est pareil avec le header("location...") il va poser problème car tu as envoyé d'autre donnée au navigateur.

Commence par chercher à afficher les erreurs E_ALL c'est indispensable pour débugger.

Ensuite rien ne t'empèche de mettre le traitement de ton formulaire en début de script afin que si redirection il y a, rien ne l'empèche.
et enlève les echo de débugguage si tu voir la redirection.

Re: Système de session PHP

Posté : 26 mai 2020, 11:02
par Ayaka
Quand je regarde le php_error.log je tombe sur ça :
[26-May-2020 08:59:05 UTC] PHP Warning: session_name(): Cannot change session name when session is active in C:\wamp64\www\index.php on line 63
[26-May-2020 08:59:05 UTC] PHP Stack trace:
[26-May-2020 08:59:05 UTC] PHP 1. {main}() C:\wamp64\www\index.php:0
[26-May-2020 08:59:05 UTC] PHP 2. session_name() C:\wamp64\www\index.php:63
[26-May-2020 08:59:05 UTC] PHP Notice: Undefined index: salle in C:\wamp64\www\gestionplanning.php on line 85
[26-May-2020 08:59:05 UTC] PHP Stack trace:
[26-May-2020 08:59:05 UTC] PHP 1. {main}() C:\wamp64\www\gestionplanning.php:0
[26-May-2020 08:59:05 UTC] PHP Warning: Illegal string offset 'nom' in C:\wamp64\www\gestionplanning.php on line 170
[26-May-2020 08:59:05 UTC] PHP Stack trace:
[26-May-2020 08:59:05 UTC] PHP 1. {main}() C:\wamp64\www\gestionplanning.php:0
[26-May-2020 08:59:05 UTC] PHP Notice: Uninitialized string offset: 0 in C:\wamp64\www\gestionplanning.php on line 170
[26-May-2020 08:59:05 UTC] PHP Stack trace:
[26-May-2020 08:59:05 UTC] PHP 1. {main}() C:\wamp64\www\gestionplanning.php:0
[26-May-2020 08:59:05 UTC] PHP Warning: Illegal string offset 'nom' in C:\wamp64\www\gestionplanning.php on line 170
[26-May-2020 08:59:05 UTC] PHP Stack trace:
[26-May-2020 08:59:05 UTC] PHP 1. {main}() C:\wamp64\www\gestionplanning.php:0
[26-May-2020 08:59:05 UTC] PHP Notice: Uninitialized string offset: 0 in C:\wamp64\www\gestionplanning.php on line 170
[26-May-2020 08:59:05 UTC] PHP Stack trace:
[26-May-2020 08:59:05 UTC] PHP 1. {main}() C:\wamp64\www\gestionplanning.php:0
[26-May-2020 08:59:05 UTC] PHP Warning: Illegal string offset 'nom' in C:\wamp64\www\gestionplanning.php on line 170
[26-May-2020 08:59:05 UTC] PHP Stack trace:
[26-May-2020 08:59:05 UTC] PHP 1. {main}() C:\wamp64\www\gestionplanning.php:0
[26-May-2020 08:59:05 UTC] PHP Notice: Uninitialized string offset: 0 in C:\wamp64\www\gestionplanning.php on line 170
[26-May-2020 08:59:05 UTC] PHP Stack trace:
[26-May-2020 08:59:05 UTC] PHP 1. {main}() C:\wamp64\www\gestionplanning.php:0
Qu'est-ce que ça veut dire ?

Ligne 85 du gestionplanning.php :
<th colspan="7">Planning de la semaine <?php echo $week;?> en salle <?php echo $_GET['salle']?></th>
Ligne 170 du gestionplanning.php :
echo "<option>".$nom['nom']."</option>";
Help svp :/

Re: Système de session PHP

Posté : 26 mai 2020, 11:07
par Saian
session_name doit être appelé avant session_start.
Toujours dans la même page de la documentation :
Pour utiliser une session nommée, vous devez appeler session_name() avant d'appeler session_start().

Re: Système de session PHP

Posté : 26 mai 2020, 11:10
par Ayaka
Ah ok merci (désolé des erreurs bêtes comme celles-ci)

J'ai maintenant ça dans le php_error.log :
[26-May-2020 09:08:45 UTC] PHP Notice: Undefined index: salle in C:\wamp64\www\gestionplanning.php on line 85
[26-May-2020 09:08:45 UTC] PHP Stack trace:
[26-May-2020 09:08:45 UTC] PHP 1. {main}() C:\wamp64\www\gestionplanning.php:0
[26-May-2020 09:08:45 UTC] PHP Warning: Illegal string offset 'nom' in C:\wamp64\www\gestionplanning.php on line 170
[26-May-2020 09:08:45 UTC] PHP Stack trace:
[26-May-2020 09:08:45 UTC] PHP 1. {main}() C:\wamp64\www\gestionplanning.php:0
[26-May-2020 09:08:45 UTC] PHP Notice: Uninitialized string offset: 0 in C:\wamp64\www\gestionplanning.php on line 170
[26-May-2020 09:08:45 UTC] PHP Stack trace:
[26-May-2020 09:08:45 UTC] PHP 1. {main}() C:\wamp64\www\gestionplanning.php:0
[26-May-2020 09:08:45 UTC] PHP Warning: Illegal string offset 'nom' in C:\wamp64\www\gestionplanning.php on line 170
[26-May-2020 09:08:45 UTC] PHP Stack trace:
[26-May-2020 09:08:45 UTC] PHP 1. {main}() C:\wamp64\www\gestionplanning.php:0
[26-May-2020 09:08:45 UTC] PHP Notice: Uninitialized string offset: 0 in C:\wamp64\www\gestionplanning.php on line 170
[26-May-2020 09:08:45 UTC] PHP Stack trace:
[26-May-2020 09:08:45 UTC] PHP 1. {main}() C:\wamp64\www\gestionplanning.php:0
[26-May-2020 09:08:45 UTC] PHP Warning: Illegal string offset 'nom' in C:\wamp64\www\gestionplanning.php on line 170
[26-May-2020 09:08:45 UTC] PHP Stack trace:
[26-May-2020 09:08:45 UTC] PHP 1. {main}() C:\wamp64\www\gestionplanning.php:0
[26-May-2020 09:08:45 UTC] PHP Notice: Uninitialized string offset: 0 in C:\wamp64\www\gestionplanning.php on line 170
[26-May-2020 09:08:45 UTC] PHP Stack trace:
[26-May-2020 09:08:45 UTC] PHP 1. {main}() C:\wamp64\www\gestionplanning.php:0

Re: Système de session PHP

Posté : 26 mai 2020, 11:12
par Saian
Undefined index: salle => tu n'as pas d'index salle dans $_GET.
Illegal string offset 'nom' => je suppose que $nom est un tableau avec des index numériques ou peut être une chaine de caractères...

Re: Système de session PHP

Posté : 26 mai 2020, 11:23
par Ayaka
Undefined index: salle => tu n'as pas d'index salle dans $_GET.
Illegal string offset 'nom' => je suppose que $nom est un tableau avec des index numériques.
Désolé mais je ne vois pas trop comment résoudre ça ^^' ça parait un peu comme du chinois pour moi si vous voyez ce que je veux dire...

Re: Système de session PHP

Posté : 26 mai 2020, 11:37
par Saian
Quand tu fais un $_GET['salle'] tu cherches a récupérer l'index salle du tableau $_GET, ors le tableau $_GET ne contient pas d'index salle... pourquoi ? ça dépend de ton code. Pour que l'index existe il faut que la page ait reçu le paramètre (par formulaire en methode get avec un input name="salle" ou par lien avec un ?salle=valeur) ce qui visiblement n'est pas le cas ici.

Pour $nom['nom'] c'est pareil ça dépend de ton code. Comment as tu initialisé cette variable ? est ce bien un tableau avec un index nom ? ou une chaine de caractère que tu essaies de manipuler comme un tableau...? Est ce que tu sais faire la différence entre une chaine de caractère, un tableau et un tableau associatif ? si la réponse est non, faut réviser les bases.

PS : var_dump est ton ami pour tester tes variables et essayer de comprendre ce qui ne va pas. Tu fais un appel à var_dump avec ta variable en paramètre juste avant la ligne en erreur pour voir son type et son contenu et tu essaies de comprendre pourquoi la variable n'est pas ce à quoi tu t'attendais.

Re: Système de session PHP

Posté : 26 mai 2020, 11:51
par Ayaka
D'accord je pense avoir un peu mieux compris, du coup la variable nom je l'initialise par un $nom=""; et pour la salle :
	<fieldset class="b" style="width:170px; height: 60px">
		<legend>Salle</legend>
		<form method="get">
			<label for="salle">Sélectionner une salle :<label>
					<select id="salle" name="salle"/></center>	
					<?php
					$salle="";
					$nom="";
					$sal=$bdd->query('SELECT * FROM salles');
					while ($donne1=$sal->fetch()) {
						?>
						<option <?php echo "value='".$donne1['salle']."'"?>>
							<?php echo $donne1['salle'] ?>
						</option>
						<?php
					}
						?>
					</select>
					<p>
					<input type="submit" name="Envoyer" value="Valider">
					</p>
		</form>
	</fieldset>

Re: Système de session PHP

Posté : 26 mai 2020, 12:00
par Saian
Dans ce bout de code il ne te sert à rien de déclarer $salle et $nom étant donné que tu ne les utilises pas. Et donc pour $_GET['salle'], la valeur n'existe que pour le script qui reçoit les données de ce formulaire (théoriquement le même script puisque la balise form n'a pas d'attribut action, mais seulement lorsque le formulaire est soumis par l'utilisateur).

Re: Système de session PHP

Posté : 26 mai 2020, 12:03
par Ayaka
Voici ce que j'ai fait pour le $_GET['salle'] :
	<?php
	$week="21";
	$salle="";
	if (!empty($_GET['salle']) && !empty($_GET['week'])) {
		$week = substr($_GET['week'], -2);
	}
	?>

	<table align="center" id="table">
			<thead>
				<tr>
					<th colspan="7">Planning de la semaine <?php echo $week;?> en salle <?php echo $_GET['salle']?></th>
				</tr>
			</thead>
			<tbody>
				<tr id="ligne">
					<td>Heure</td>
					<td>Lundi</td>
					<td>Mardi</td>
					<td>Mercredi</td>
					<td>Jeudi</td>
					<td>Vendredi</td>
				</tr>
			</tbody>
			
			
			<?php
			$color1="";
			$pla = $bdd->prepare('SELECT * FROM planning WHERE salle=:salle2 AND semaine=:semaine2');
			$pla->execute(array('salle2'=>$salle, 'semaine2'=>$week));
			while ($donne2=$pla->fetch()) {
				if ($donne2['lundi']=="nom") {
					$color1 = 'style="background-color:#AAFFFE"';
				}
				if ($donne2['lundi']!="nom") {
					$color1 = 'style="background-color:#BAFCB0"';
				}

				if ($donne2['mardi']=="nom") {
					$color1 = 'style="background-color:#AAFFFE"';
				}
				if ($donne2['mardi']!="nom") {
					$color1 = 'style="background-color:#BAFCB0"';
				}

				if ($donne2['mercredi']=="nom") {
					$color1 = 'style="background-color:#AAFFFE"';
				}
				if ($donne2['mercredi']!="nom") {
					$color1 = 'style="background-color:#BAFCB0"';
				}

				if ($donne2['jeudi']=="nom") {
					$color1 = 'style="background-color:#AAFFFE"';
				}
				if ($donne2['jeudi']!="nom") {
					$color1 = 'style="background-color:#BAFCB0"';
				}

				if ($donne2['vendredi']=="nom") {
					$color1 = 'style="background-color:#AAFFFE"';
				}
				if ($donne2['vendredi']!="nom") {
					$color1 = 'style="background-color:#BAFCB0"';
				}
			}
			?>
		<tr>
			<td><?php echo $donne2['heure']; ?></td>
			<td><?php echo $color1 ?> <?php echo $donne2['lundi']; ?> </td>
			<td><?php echo $color1 ?> <?php echo $donne2['mardi']; ?> </td>
			<td><?php echo $color1 ?> <?php echo $donne2['mercredi']; ?> </td>
			<td><?php echo $color1 ?> <?php echo $donne2['jeudi']; ?> </td>
			<td><?php echo $color1 ?> <?php echo $donne2['vendredi']; ?> </td>
		</tr>
		<?php
		$pla->closeCursor();
		?>

	</table>