Bonsoir, (je poste au bon endroit?)
Je débute en PHP et je fais quelques tests en local dans le but de me faire un petit script de connexion pour mon site. Voici le code:
Formulaire de connexion:
Et l'espace membre (qui est destiné à se remplir):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78 <?php session_start(); ?> //ici j'ai mis la fonction genClef qui permet de générer aléatoirement une très grande chaîne de caractères <?php try //test de la connexion { $bdd = new PDO('mysql:host=localhost;dbname=test','root',''); //connexion } catch (Exception $e) { die('Erreur : '.$e->getMessage()); // si la connexion échoue, on renvoie un message d'erreur au lieu d'afficher le code php } if(isset($_POST['pseudo']) AND isset($_POST['passe'])) { $requete = $bdd->prepare('SELECT COUNT(*) FROM membre WHERE pseudo = ?'); $requete->execute(array($_POST['pseudo'])); $nombreDeLignes = $requete->fetch(); // Récupère le résultat du calcul if ($nombreDeLignes[0] == 0) // on teste le nombre de ligne: si il est egal à 0, le pseudo n'exite pas { echo 'Pseudo incorrect'; } else { $requete = $bdd->prepare('SELECT passe FROM membre WHERE pseudo = ?'); $requete->execute(array($_POST['pseudo'])); $reponse = $requete->fetch(); if ($_POST['passe'] == $reponse['passe']) { $clefIdentifianteUnique = genClef(); //génère une clef identifiante unique grâce à la fonction genClef echo $clefIdentifianteUnique; $requete = $bdd->prepare('INSERT INTO clefIdentifianteUnique (clefIdentifianteUnique) Values(?)'); //enregistre la clef dans la bdd $requete->execute(array($clefIdentifianteUnique)); $requete = $bdd->prepare('SELECT id FROM clefIdentifianteUnique WHERE clefIdentifianteUnique = ?'); //récupère l'id de la clef $requete->execute(array($clefIdentifianteUnique)); $reponse = $requete->fetch(); $pseudoId = $_POST['pseudo'] . $reponse['id']; //crée une variable composée du pseudo et de l'id de la clef echo $pseudoId; $requete = $bdd->prepare('UPDATE clefIdentifianteUnique SET pseudoId = ? WHERE clefIdentifianteUnique = ?'); //enregistre la variable dans la bdd $requete->execute(array($pseudoId, $clefIdentifianteUnique)); $_SESSION['clefIdentifianteUnique'] = $clefIdentifianteUnique; //enregistre le code et le pseudo dans des variables de session $_SESSION['pseudo'] = $_POST['pseudo']; $_SESSION['pseudoId'] = $pseudoId; echo '<a href="espaceMembre.php">Espace membre</a>'; echo 'Bonne navigation<br/>'; echo $_POST['pseudo']; } else { echo 'Mot de passe incorrect'; } } $requete->closeCursor(); } else { echo 'ERREUR'; } ?> <form method="post" action="index.php"> <input name="pseudo" type="text" value="Pseudo"><br/> <input name="passe" type="password" value="Mot de passe"><br/> <input type="submit" value="Valider"/><br/> </form>
Seulement lorsque j'essaie d'accéder à mon espace membre sans passer par le formulaire, au lieu d'avoir le messages d'erreur j'ai:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 if(!isset($_SESSION)) { session_start(); try //test de la connexion { $bdd = new PDO('mysql:host=localhost;dbname=test','root',''); //connexion } catch (Exception $e) { die('Erreur : '.$e->getMessage()); // si la connexion échoue, on renvoie un message d'erreur au lieu d'afficher le code php } $requete = $bdd->prepare('SELECT clefIdentifianteUnique FROM clefIdentifianteUnique WHERE pseudoId = ?'); $requete->execute(array($_SESSION['pseudoId'])); $reponse = $requete->fetch(); if ($reponse['clefIdentifianteUnique'] == $_SESSION['clefIdentifianteUnique']) { echo $_SESSION['clefIdentifianteUnique']; echo $_SESSION['pseudo']; } else { echo 'Accès refusé'; } } else { echo 'ARGG'; } ?>
Ce qui veut dire que PHP lit le code même avec le if. Donc je sais pas si j'ai loupé quelque chose ou si j'utilise mas les sessions, mais je ne trouve pas de solution.Notice: Undefined index: pseudoId in*E:\Program Files\wamp\www\test\espaceMembre.php*on line*17
Notice: Undefined index: clefIdentifianteUnique in*E:\Program Files\wamp\www\test\espaceMembre.php*on line*21
Notice: Undefined index: clefIdentifianteUnique in*E:\Program Files\wamp\www\test\espaceMembre.php*on line*23
Notice: Undefined index: pseudo in*E:\Program Files\wamp\www\test\espaceMembre.php*on line*24
Sinon que pensez-vous de ce script? Est-ce assez sécurisé? (j'ai du mal à me rendre compte du niveau de sécurité qu'offrent les sessions).
Merci pour votre aide!





Répondre avec citation



Partager