Restreindre l'acces à des pages

Eléphant du PHP | 124 Messages

14 sept. 2006, 12:44

Salut,

J'aimerai savoir comment faire pour afficher une page disant qu'il faut s'inscrire si aucune session n'est ouverte ?

Merci
Modifié en dernier par neo765 le 29 mai 2008, 23:31, modifié 1 fois.

Eléphant du PHP | 332 Messages

14 sept. 2006, 14:25

Tu vérifies qu'aucune session est ouverte et tu affiches une page demandant un code et un mot de passe.

Eléphant du PHP | 124 Messages

14 sept. 2006, 14:34

Merci de m'avoir répondu, mais je ne sais pas comment proceder

Merci
Modifié en dernier par neo765 le 29 mai 2008, 23:31, modifié 1 fois.

Avatar du membre
ViPHP
ViPHP | 3008 Messages

14 sept. 2006, 14:45

Hop une adresse pour que tu comprennes les sessions. Dans l'exemple tu as tout le nécessaire pour faire ce que tu veux.
:arrow: http://www.phpdebutant.org/article69.php

Eléphant du PHP | 124 Messages

14 sept. 2006, 14:48

Salut,

Il faut que je change ça : "echo 'Une erreur est survenue, veuillez réessayer !'" ?

Je met une ligne de code pour ouvrir une autre page ?

Avatar du membre
ViPHP
ViPHP | 3008 Messages

14 sept. 2006, 14:51

Tu fais ce que tu veux à ce niveau. Dans ce "else" tu mets la commande que tu veux s'il y a une erreur, redirection, message d'erreur...etc Tu fais ton choix ;)

Eléphant du PHP | 124 Messages

14 sept. 2006, 21:47

Salut,

J'ai un problème :

Le script marche seulement si la session est en train de s'ouvrir, mais par exemple si la session est déjà ouverte, il affiche une erreur.

Il faudrait plutot ajouter une ligne sur ce script :
<?php
// On appelle la session
session_start();

// On affiche une phrase résumant les infos sur l'utilisateur courant
echo 'Pseudo : ',$_SESSION['pseudo'],'<br />
     Age : ',$_SESSION['age'],'<br />
     Sexe : ',$_SESSION['sexe'],'<br />
     Ville : ',$_SESSION['ville'],'<br />';
?>
Modifié en dernier par neo765 le 29 mai 2008, 23:31, modifié 1 fois.

Avatar du membre
ViPHP
ViPHP | 3008 Messages

14 sept. 2006, 21:54

Quel script ? Quel erreur ? Donnes nous du code et des infos supplémentaires.

Eléphant du PHP | 124 Messages

14 sept. 2006, 22:02

J'ai ajouté ce script dans les pages que je veux proteger :
<?php
// On démarre la session
session_start();
$loginOK = false;  // cf Astuce

// On n'effectue les traitement qu'à la condition que
// les informations aient été effectivement postées
if ( isset($_POST) && (!empty($_POST['login'])) && (!empty($_POST['password'])) ) {

  extract($_POST);  // je vous renvoie à la doc de cette fonction

  // On va chercher le mot de passe afférent à ce login
  $sql = "SELECT pseudo, age, sexe, ville, mdp FROM user WHERE login = '".addslashes($login)."'";
  $req = mysql_query($sql) or die('Erreur SQL : <br />'.$sql);
 
  // On vérifie que l'utilisateur existe bien
  if (mysql_num_rows($req) > 0) {
     $data = mysql_fetch_assoc($req);
   
    // On vérifie que son mot de passe est correct
    if ($password == $data['mdp']) {
      $loginOK = true;
    }
  }
}

// Si le login a été validé on met les données en sessions
if ($loginOK) {
  $_SESSION['pseudo'] = $data['pseudo'];
  $_SESSION['age'] = $data['age'];
     $_SESSION['sexe'] = $data['sexe'];
  $_SESSION['ville'] = $data['ville'];
}
else {
  echo 'Une erreur est survenue, veuillez réessayer !';
}
?>
Seulement maintenant quand je veux acceder à une page que j'ai protégé avec le script ci dessus il m'affiche "Une erreur est survenue, veuillez réessayer !"

Je pense que c'est du au faite que la session est déjà ouverte, donc je pense qu'il faudrait plutot modifier ce script :
<?php
// On appelle la session
session_start();

// On affiche une phrase résumant les infos sur l'utilisateur courant
echo 'Pseudo : ',$_SESSION['pseudo'],'<br />
     Age : ',$_SESSION['age'],'<br />
     Sexe : ',$_SESSION['sexe'],'<br />
     Ville : ',$_SESSION['ville'],'<br />';
?>
du genre mettre un if quelque par mais je ne sais pas où.

Merci
Modifié en dernier par neo765 le 29 mai 2008, 23:32, modifié 1 fois.

Avatar du membre
ViPHP
ViPHP | 3008 Messages

14 sept. 2006, 22:09

Bé il ne faut pas recopier texto le code en question, c'était un exemple tu dois l'adapter.

En gros ce qu'il faut :

Lorsque la personne rentre dans une page, il faut que ton code détecte si la personne est inscrite ou pas. Tu passes par les sessions pour faire ça.

Donc dans les pages à protéger, tu dis :
- Si la session existe alors c'est ok sinon je redirige vers le formulaire d'inscription.
--> démarrage de la session avec session_start(), détecter l'existence de la session avec isset et redirection avec header si la session n'existe pas.

Cette session est créée lorsque l'identification par le biais du formulaire est ok.

Il n'y a donc qu'un petit morceau de code pour chaque page protégée, à savoir la reconnaissance de la session.

Tout le script que tu as mis sert à l'identification.

Eléphant du PHP | 124 Messages

14 sept. 2006, 22:16

Oui, je sais ça mais mon problème c'est de faire le code :

if (session_start()=0)
{
redirection page inscription
}

Voilà ce que je veux faire, mais bon je sais que mon code est faut, voilà pourquoi j'ai besoin d'aide, juste pour faire les lignes de code.

Merci
Modifié en dernier par neo765 le 29 mai 2008, 23:32, modifié 1 fois.

Avatar du membre
ViPHP
ViPHP | 3008 Messages

14 sept. 2006, 22:22

Il faut que tu relis le cours :) Son utilisation ne se fait pas comme ça.

session_start() permet de démarrer l'utilisation des sessions. Donc il se fait tout seul en début de page :
<?php
session_start();
?>
2è étape tu identifies la session. On va imaginer que la session s'appelle "ident", donc $_SESSION['ident']. Pour détecter je t'avais dit d'utiliser ISSET.
if (!isset($_SESSION['ident']))
{
//redirection
}
Là je dis, si la session n'est pas détectée (!isset) alors je redirige.

3è étape la redirection avec header + exit. Pour ça je t'invite à aller zeuter un oeil sur son utilisation ;)

Au final tu auras quelque chose de ce genre :
<?php
session_start();
if (!isset($_SESSION['ident']))
{
    //redirection + exit();
}
?>
Tu comprends mieux ? Ne recopies pas sans comprendre ;)

Eléphant du PHP | 124 Messages

14 sept. 2006, 22:25

Merci je comprend mieux, je ne savais pas que le isset sevait à ça.

Merci
Modifié en dernier par neo765 le 29 mai 2008, 23:32, modifié 1 fois.

Avatar du membre
ViPHP
ViPHP | 3008 Messages

15 sept. 2006, 14:23

N'oublies pas de mettre Résolu si c'est le cas ;)