les sessions pour l'accès à certaines pages

dededick
Invité n'ayant pas de compte PHPfrance

21 juin 2006, 14:55

Bonjoru à tous voici mon code de la page connexion.php:
<?php
// pensez a ouvrir une connexion vers mysql ici
include('chien.php');

if(isset($_POST) && !empty($_POST['pseudo']) && !empty($_POST['password'])) {
  extract($_POST);
  // on recupère le password de la table qui correspond au login du visiteur
  $sql = "select password from siteweb where pseudo='".$pseudo."'";
  $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());

  $data = mysql_fetch_assoc($req);

  if($data['password'] != $password) {
    include('erreur.html'); // On inclut le formulaire d'identification
    exit;
  }
  else {
    
    $_SESSION['pseudo'] = $_POST['pseudo'];// si pb, essayer de remplace 'pseudo' par
//'login' ;)

    echo 'Vous etes bien connecté <br/><br/>';
  echo'Vous rendre sur la page <a href="acceuil.php"> principale </a>';  // ici vous pouvez afficher un lien pour renvoyer
    // vers la page d'accueil de votre espace membres
  }
}
else {
   include('erreur2.html'); // On inclut le formulaire d'identification
   exit;
}
?>
Le code de ma page acceuil.php:
<?php session_start();
//Ouvrir une session pour pas que les non-connectés n'accèdent pas à cette page
if (!isset($_SESSION['pseudo'])) {
    header ('Location:arrivee.php');
    exit();
}
else 
{
header ('Location:index.html');
exit();
}
?>
<html>
<head>
<title> Bienvenue sur Poudlard2006 </title>
<meta http-equiv="content-language" content="fr">
 <link rel="stylesheet" media="screen" type="text/css" title="Essai" href="color.css" />

<SCRIPT LANGUAGE="JavaScript">
// a mettre entre <head> et <head/>
var max=0;
function textlist() {
max=textlist.arguments.length;
for (i=0; i<max; i++)
this[i]=textlist.arguments[i];
}
tl = new textlist(
"Bievenue sur ce site.",
"En cas de problème, un forum est à votre disposition.",
"Petites annonces:",
"Aujourd'hui, le cerveau a des capacités tellement étonnantes, que presque tout le monde en a un.",
"Un verre est à moitié plein d'eau; n'est-il pas plutôt à moitié vide?",
"Il semblerait que... mais on n'en est pas sur...",
"Vous pensez ne rien savoir? Mais rassurez-vous, vous savez au moins ça!"
);

var x = 0; pos = 0;
var l = tl[0].length;
function textticker() {
document.tickform.tickfield.value = tl[x].substring(0, pos) + "_";
if(pos++ == l) {
pos = 0;
setTimeout("textticker()", 2000);
if(++x == max) x = 0;
l = tl[x].length;
} else
setTimeout("textticker()", 50);
}
</script>
</head>
<BODY OnLoad="textticker()">

<center>
<form name=tickform>
<textarea name=tickfield rows=3 cols=38 style="background-color: rgb(0,0,0); color: rgb(255,255,255); cursor: default; font-family: Arial; font-size: 12px" wrap=virtual>Les infos apparaissent ici, une fois que la page est chargée.</textarea>
</form>
</center>
</script>



   </head>
   <script language="JavaScript">
function nextSize(i,incMethod,textLength){
  if (incMethod == 1) return (40*Math.abs( Math.sin(i/(textLength/3.14))) );
  if (incMethod == 2) return (255*Math.abs( Math.cos(i/(textLength/3.14))));
}

function sizeCycle(text,method,dis){   
  output = "";
  for (i = 0; i < text.length; i++){
    size = parseInt(nextSize(i +dis,method,text.length));
    output += "<font style='font-size: "+ size +"pt'>" +text.substring(i,i+1)+ "</font>";
  }
  theDiv.innerHTML = output;
}

function doWave(n){
  theText = "dededick.free.fr";
  sizeCycle(theText,1,n);       
  if (n > theText.length) {n=0}
  setTimeout("doWave(" + (n+1) + ")", 150);
}
</script>
<body>
<div id="en_tete">
<!-- Mettre la bannière -->
</div>
<div id="menu">
<div id="element_menu">
<ul id="lien2">
<li><a href="acceuil.html"> Arrivée à Poudlard2006 </a></li>
<li><a href="http://poudlard2006.goodforum.net"> La Grande Salle </a></li>
et le code de ma page arrivee.php:
<html>
<head>
<title> Page d'acceuil </title>
<meta http-equiv="content-language" content="fr">
 <link rel="stylesheet" media="screen" type="text/css" title="Essai" href="color.css" />

<SCRIPT LANGUAGE="JavaScript">
// a mettre entre <head> et <head/>
var max=0;
function textlist() {
max=textlist.arguments.length;
for (i=0; i<max; i++)
this[i]=textlist.arguments[i];
}
tl = new textlist( 
"Bievenue sur ce site.",
"En cas de problème, un forum est à votre disposition.",
"Petites annonces:",
"Aujourd'hui, le cerveau a des capacités tellement étonnantes, que presque tout le monde en a un.",
"Un verre est à moitié plein d'eau; n'est-il pas plutôt à moitié vide?",
"Il semblerait que... mais on n'en est pas sur...",
"Vous pensez ne rien savoir? Mais rassurez-vous, vous savez au moins ça!"
);

var x = 0; pos = 0;
var l = tl[0].length;
function textticker() {
document.tickform.tickfield.value = tl[x].substring(0, pos) + "_";
if(pos++ == l) {
pos = 0; 
setTimeout("textticker()", 2000); 
if(++x == max) x = 0; 
l = tl[x].length;
} else
setTimeout("textticker()", 50);
}
</script>
</head>
<BODY OnLoad="textticker()">

<center>
<form name=tickform>
<textarea name=tickfield rows=3 cols=38 style="background-color: rgb(0,0,0); color: rgb(255,255,255); cursor: default; font-family: Arial; font-size: 12px" wrap=virtual>Les infos apparaissent ici, une fois que la page est chargée.</textarea>
</form>
</center>
</script>



   </head>
   <script language="JavaScript">
function nextSize(i,incMethod,textLength){
  if (incMethod == 1) return (40*Math.abs( Math.sin(i/(textLength/3.14))) );
  if (incMethod == 2) return (255*Math.abs( Math.cos(i/(textLength/3.14))));
}

function sizeCycle(text,method,dis){	
  output = "";
  for (i = 0; i < text.length; i++){
    size = parseInt(nextSize(i +dis,method,text.length));
    output += "<font style='font-size: "+ size +"pt'>" +text.substring(i,i+1)+ "</font>";
  }
  theDiv.innerHTML = output;
}

function doWave(n){
  theText = "dededick.free.fr";
  sizeCycle(theText,1,n);	
  if (n > theText.length) {n=0}
  setTimeout("doWave(" + (n+1) + ")", 150);
}
</script>
<body>
<div id="en_tete">
<!-- Mettre la bannière -->
</div>
<div id="menu">
<div id="element_menu">
<ul id="lien2">
<li><a href="inscription.php"> Inscription </a></li>
<li><a href="connexion.html"> Connexion </a></li>
<li><a href="deconnexion.php"> Se déconnecter</a></li>
</ul>
<ul id="lien2">
<h4> Dans la base </h4>
<li><a href="rassemblement.php">Rassemblement</a></li>
<li><a href="diplomes.php"> Diplômes </a></li>
<li><a href="bibliotheque.php">Bibliothèque  </a></li>
<li><a href="librairie.php"> Librairie </a></li>
<li><a href=""
</ul></div></div>
<div id="corps">
Ya un truc qui plante: même si je suis pas connecté, j'arrive à accéder à ma page arrivee.php, pourquoi? merci :)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

21 juin 2006, 14:59

Tout simplement parce qu'il n'y a aucun controle sur ta page arrivee.php restreignant l'accès à celle ci... n'importe qui peut donc l'ouvrir, authentifié ou non. :)

Si tu souhaite en protéger l'accès, il te faut tout au début de cette page ajouter un session_start() pour récuperer la variable $_SESSION et vérifier si les champs que tu attends sont correctement renseignés. Si ce n'est pas le cas, tu peux rediriger l'utilisateur avec un header(), arrêter le traitement avec exit(), afficher un message particulier, ...

dededick
Invité n'ayant pas de compte PHPfrance

21 juin 2006, 15:01

fo ke je rajoute ça?
<?php session_start();
//Ouvrir une session pour pas que les non-connectés n'accèdent pas à cette page
if (!isset($_SESSION['pseudo'])) {
    header ('Location:index.html');
    exit();
}
?>

Eléphant du PHP | 50 Messages

21 juin 2006, 15:02

Chaque fois que tu veux utilise les variables en $_SESSION["xxxx"], il te faut obligatoirement mettre session_start() au tout début de ta page.

dededick
Invité n'ayant pas de compte PHPfrance

21 juin 2006, 15:04

ça marche pas: il me redirige à chaque fois vers le header :(

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

21 juin 2006, 15:08

S'il exécute à chaque fois le header(), c'est qu'il rentre à chaque fois dans le if(), que par conséquent la condition !isset($_SESSION['pseudo'])) est toujours vrai et que donc $_SESSION['pseudo'] ne doit jamais être défini...

est-il bien mis en session ? (print_r($_SESSION) pour voir ce qu'elle contient)
sachant que tu n'as toujours pas de session_start() dans ta page connexion.php pour démarrer la session et y stocker le pseudo, je doute qu'elle soit renseignée... ;)

Eléphant du PHP | 197 Messages

21 juin 2006, 15:08

Chaque fois que tu veux utilise les variables en $_SESSION["xxxx"], il te faut obligatoirement mettre session_start() au tout début de ta page.
pas obligatoirement ! ça dépend comment est configuré php

Eléphant du PHP | 50 Messages

21 juin 2006, 15:15

Chaque fois que tu veux utilise les variables en $_SESSION["xxxx"], il te faut obligatoirement mettre session_start() au tout début de ta page.
pas obligatoirement ! ça dépend comment est configuré php
Oui mais par défaut c'est désactivé sinon ça prend des ressources.

dededick
Invité n'ayant pas de compte PHPfrance

21 juin 2006, 17:22

Faut que j'ouvre une session_start() dans ma page connexion.php?

Au tout début?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

21 juin 2006, 17:25

Faut que j'ouvre une session_start() dans ma page connexion.php?

Au tout début?
Bah voui.. sinon il ne démarre pas la session, et tout ce que tu peux mettre dans ta variable $_SESSION (genre le pseudo) n'est pas conservée d'une page à l'autre :)

dededick
Invité n'ayant pas de compte PHPfrance

21 juin 2006, 17:27

ce qui donne :
<?php
session_start();
// pensez a ouvrir une connexion vers mysql ici
include('chien.php');

if(isset($_POST) && !empty($_POST['pseudo']) && !empty($_POST['password'])) {
  extract($_POST);
  // on recupère le password de la table qui correspond au login du visiteur
  $sql = "select password from siteweb where pseudo='".$pseudo."'";
  $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());

  $data = mysql_fetch_assoc($req);

  if($data['password'] != $password) {
    include('erreur.html'); // On inclut le formulaire d'identification
    exit;
  }
  else {
    
    $_SESSION['pseudo'] = $_POST['pseudo'];// si pb, essayer de remplace 'pseudo' par
//'login' ;)

    echo 'Vous etes bien logué <br/><br/>';
  echo'Vous rendre sur la page <a href="acceuil.html"> principale </a>';  // ici vous pouvez afficher un lien pour renvoyer
    // vers la page d'accueil de votre espace membres
  }
}
else {
   include('erreur2.html'); // On inclut le formulaire d'identification
   exit;
}
?>

dededick
Invité n'ayant pas de compte PHPfrance

21 juin 2006, 17:41

Et ça marche (à prioris ^^) !!!
Merci beaucoup! :D :D :D

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

21 juin 2006, 17:42

[Résolu] :?: :wink:

dededick
Invité n'ayant pas de compte PHPfrance

21 juin 2006, 17:45

Oui, résolu, mais je sais pas comment le mettre :?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

21 juin 2006, 18:03

Tu as un joli bouton résolu orange à gauche qui te tends les bras en criant "clique moi, clique moi !" ;)