IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Restriction d'accés à un site


Sujet :

Langage PHP

  1. #1
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Janvier 2008
    Messages
    623
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 623
    Points : 1 369
    Points
    1 369
    Par défaut Restriction d'accés à un site
    Bonjour à tous,

    je suis entrain de faire un site et j'aimerai limiter l'accés aux seuls membres inscrit.
    J'ai un index.php avec un formulaire et je voudrai rediriger les personnes qui essai d'accéder aux autres pas sur cette index sauf si ces personnes ce sont déja connecté. Si l'identification via le formulaire est correcte, j'aimerai rediriger l'utilisateur sur la page d'accueil du site.

    Pour l'instant j'ai ça :

    index.php
    Code PHP : 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
    79
    80
    81
    <?php 
    	//session_start();
     
    	require('config.php');
    	require('identification.php');
     
    	//Teste si l'utilisateur est déja connecté
    	//Si c'est le cas, on redirige vers l'accueil ou la page demandé
    	//Sinon, on redirige vers le formulaire de connexion
    	if(isset($_SESSION['login']) && $_SESSION['login'] != NULL)
    	{
    		//Redirection vers accueil.php
    	}
    	else
    	{
    		//Si l'utilisateur n'est pas connecté, on regarde si il à fait un demande de connexion
    		//Si c'est le cas, on regarde si l'identidiant et le mot de passe son correcte.
    		if(isset($_POST['identifiant']) && isset($_POST['mot_de_passe']))
    		{
    			//FILTRER ENTREES UTILISATEURS
    			$identifiant = $_POST['identifiant'];
    			$motDePasse = $_POST['mot_de_passe'];
     
    			$connexion = new Identification();
     
    			$res = $connexion->testeConnexion($identifiant, $motDePasse);
     
    			if($res === true)
    			{
    				$_SESSION['login'] = $identifiant;
    				$_SESSION['motDePasse'] = $motDePasse;
     
    				//Redirection vers la page d'accueil du site
    header('location: accueil.php'); // marche pas....
    			}
    			else
    			{
     
    				echo 'Mauvais identifiant ou mot de passe. <br>';
    				echo 'Si vous avez oublié votre identifiant ou votre mot de passe, contactez un administrateur.';
     
    			}
     
    		}
    	}
    ?>
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
    <html lang="fr">
    <head>
    		  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
     
    		  <title></title>
     
    		  <link rel="stylesheet" media="screen" href="ecran.css">
    </head>
     
    <body>
     
    	<form method="post" action="index.php">
    		<fieldset>
    		<legend>Connexion</legend>
     
    			<p>
    				<label for="identifiant">Identifiant : </label>
    				<input type="text" name="identifiant" id="identifiant" />
    			</p>
    			<p>
    				<label for="mot_de_passe">Mot de passe : </label>
    				<input type="password" name="mot_de_passe" id="mot_de_passe" />
    			</p>
    			<p>
    				<input type="submit" value="Se connecter" />
    			</p>
     
    		</fieldset>
    	</form>
     
    </body>
     
    </html>

    identification.php
    Code PHP : 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
    <?php
     
    require('config.php');
     
    class Identification
    {
     
    	private $identifiant;
    	private $motDePasse;
    	private $connexionReussie;
     
     
    	public function __construct()
    	{
     
    	}
     
     
    	public function testeConnexion($unIdentifiant, $unMotDePasse)
    	{
    		//Filtre des entrées utilisateurs
    			$this->identifiant = $unIdentifiant;
    			$this->motDePasse = $unMotDePasse;
     
    			try
    			{
    				$maBase = new PDO(SERVER_BDD, USER_BDD, PASS_BDD);
     
    				$requete = "SELECT pseudo, mot_de_passe FROM utilisateurs 
    						WHERE pseudo = '$this->identifiant' && mot_de_passe = '$this->motDePasse' ";
     
    				$objet = $maBase->query($requete);
     
    				$resultat = $objet->fetchAll(PDO::FETCH_ASSOC);
     
    				if(empty($resultat))
    				{
    					$this->connexionReussie = false;
    				}
    				else
    				{
    					$this->connexionReussie = true;
    				}
     
    				$maBase = NULL;
    			}
    			catch(PDOException $e)
    			{
    				$this->connexionReussie = false;
    			}
     
    			return $this->connexionReussie;
    	}
     
     
     
    }
     
     
    ?>

    config.php contient seulement les constantes utilises pour la connexion à la bas de données.

    Mon problème c'est que je ne peux pas faire de redirection avec header, pourtant je n'ai pas de html, echo et autre avant cette fonction.

    Comment pourrai-je faire sans utiliser .htaccess?



    Merci.

  2. #2
    Rédacteur
    Avatar de Halleck
    Homme Profil pro
    Consultant PHP
    Inscrit en
    Mars 2003
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Consultant PHP

    Informations forums :
    Inscription : Mars 2003
    Messages : 597
    Points : 878
    Points
    878
    Par défaut
    Tu ne peux pas faire de redirection avec header. COmment ça ?

    Si tu as du HTML dans ton code. Par exemple :
    Tu as un espace blanc après ton ?>, c'est le genre de chose qui bloque un header(). Essaye d'enlever toutes les balises de fin de script des tous tes fichiers

    Sinon, tu peux
    • Jouer avec ob_start()
    • Faire une redirection avec la balise meta

  3. #3
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Janvier 2008
    Messages
    623
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 623
    Points : 1 369
    Points
    1 369
    Par défaut
    Oui j'ai du HTML dans ma page.

    Je voudrai en début de page faire un teste pour savoir si l'utilisateur s'est connecté, si c'est le cas je le redirige sur la page d'accueil, sinon je fais rien et le reste de la page avec le formulaire s'affiche. C'est la première page de code que j'ai mis sur mon message.

    En faite je dois avoir un autre problème. J'ai fais ça :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php header('Location: http://www.google.fr'); ?>
    J'ai le message d'erreur "headers already sent...", j'ai rien d'autre que ça sur ma page.

    Si je fais ça :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    <?phpheader('Location: http://www.google.fr');?>
    Ca ne fonctionne pas, et je n'ai pas de message d'erreur.

  4. #4
    Rédacteur
    Avatar de Halleck
    Homme Profil pro
    Consultant PHP
    Inscrit en
    Mars 2003
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Consultant PHP

    Informations forums :
    Inscription : Mars 2003
    Messages : 597
    Points : 878
    Points
    878
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?phpheader('Location: http://www.google.fr');?>
    Ca doit être dans ta source Html (c'est une balise <xxx>)

    Tu ne m'as pas compris. Si tu as du Html (du contenu) avant un header(Location, celui-ci ne peut pas fonctionner. Un espace blanc étant un caractère, plus possible d'envoyer un header une fois qu'il est envoyé au client. D'où mes suggestions :
    • virer les ?>
    • Utiliser ob_start()


    Fais une recherche sur Google sur "headers already sent..", c'est une erreur plus que commune, tu trouveras des explications détaillées

  5. #5
    Membre actif

    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 191
    Points : 275
    Points
    275
    Par défaut
    une autre solution en plus de ne pas fermer la balise <?php (cité plus haut) séparer le code php du html, tu ne sera plus jamais sujet à ce genre de problème.

  6. #6
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Janvier 2008
    Messages
    623
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 623
    Points : 1 369
    Points
    1 369
    Par défaut
    Merci à tous pour vos réponses.

    Enfaite j'ai essayé sur un autre serveur et mon code fonctionne. Le serveur où mon code ne fonctionne pas est XAMPP, c'est un serveur apache php mysql qui s'installe sur clé usb, pour l'instant je peux pas faire autrement que d'utiliser ça.

    Y a t-il un configuration serveur qui concerne la fonction header?

  7. #7
    Membre actif

    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 191
    Points : 275
    Points
    275
    Par défaut
    j'utilise xampp aussi mais je connais pas ce réglage
    par contre si ca fonctionne pas dessus corrige plutot ton code que de le faire fonctionner sur un autre serveur

    je vais me répéter mélanger du html avec le php c'est pas très propre même si à la base c'est l'intéret du php le mélange, mais dès qu'on joue avec les header je dirai de proscrire le mélange sinon on y passe et repasse des heure pour un espace quelque part (vécu ca y a longtemps).

  8. #8
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Janvier 2008
    Messages
    623
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 623
    Points : 1 369
    Points
    1 369
    Par défaut
    Ben xampp c'est provisoire.

    Je vais essayer au max de séparer php et html et mettre mon code de teste dans une class mais pour générer ma page html, je suis bien obliger de mélanger un peu de php et de html.

  9. #9
    Membre actif

    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 191
    Points : 275
    Points
    275
    Par défaut
    Citation Envoyé par Farid63 Voir le message
    Ben xampp c'est provisoire.

    Je vais essayer au max de séparer php et html et mettre mon code de teste dans une class mais pour générer ma page html, je suis bien obliger de mélanger un peu de php et de html.
    tu peux très bien séparer le html et le php en utilisant des moteur de template comme smarty mais bon.
    tu peux aussi faire ton propre moteur de template

    Dans ton cas je ferai 2 fichiers un MaPage.php et MaPage.tpl.php
    MaPage.php serai ton controller
    MaPage.tpl.php ta vue
    dans MaPage.php tu fais tous le travail de requete controle redirection etc..
    dans MaPage.tpl.php tu mélange ton php/html mais que pour de l'affichage genre tu passe tes variables résultat
    c'est un premier pas vers la séparation du code et facile à mettre en oeuvre

    avantage non négligeable tu tape qu'une fois MaPage.tpl.php que tu appelle dans différent controller

    par exemple pour l'affichage global je remplace mes ${variable} par leur valeur
    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
    	<body>
    		<div id="global">
    			<div id="panel_header">
    				<div class="right">${panel_header}</div>
    			</div>
    			<div>${panel_top}</div>
    			<div id="panel_body">
    				<div id="panel_menu">${panel_menu}</div>
    				<div id="panel_left">${panel_left}</div>
    				<div id="panel_center">${panel_body}</div>
    				<span class="clear"></span>
    			</div>
    			<div id="panel_debug">${panel_debug}</div>
    			<div id="panel_footer">Copyright 2007-2010</div>
    		</div>
    	</body>
    après tu peux te lancer dans une séparation total mais la faut quand même du temps, de la patience et de l'expérience.

    moi j'utilise des classes qui écrivent le reste par exemple mon provider de formulaire ci-dessous, bon je pense que les nom sont explicite, Form() pour <form>, Div() pour <div> ect...
    ensuite pour créer un formulaire j'étend cette classe et le tour est joué bon faut setter des choses.
    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
    class BaseSheetProvider extends BaseDomProvider {
     
    	public function render(){
    		$form = new Form();
    		$form->setId('edition');
    		$menu = new Div();
    		$menu->setClassname('admin');
     
    		$menu->addWidget(new Button('Soumettre', 'save'));
    		$menu->addWidget(new Button('Annuler', 'cancel'));
     
    		$form->addWidget($menu);
     
    		$table = new Table();
    		$form->addWidget($table);
    		if($this->hasField()){
    			foreach ($this->getFields() as $field) {
    				$line = new TableItem();
    				if($field instanceof ScreenEditor){
    					$line->addItem($field, null, 2);
    				} else {
    					if($field->isMandatory()){
    						$label = $field->getLabel().' *';
    					} else {
    						$label = $field->getLabel();
    					}
    					$line->addItem(new Text($label), '30%');
     
    					$line->addItem($field);
    				}
    				$table->addItem($line);
    			}
    		}
    		return $form;
    	}
     
    }
    comme tu vois pas de mélange
    bon ca demande un peu (voir beaucoup dans mon cas) de travail au début mais après c'est énorme

  10. #10
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Janvier 2008
    Messages
    623
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 623
    Points : 1 369
    Points
    1 369
    Par défaut
    J'aime l'idée, mais je n'arrive pas à voir comment tu remplace tes ${variable} dans ton code html.

    Je vais en demandé un peu beaucoup , mais aurai-tu le temps de me faire un exemple complet mais simple, juste pour voir coment le tout se comporte?

    Je suis en ce moment entrain de chercher une bonne organisation des mes pages et j'ai un peu de mal, j'essaie d'utiliser le MVC et c'est la vue qui me pose le plus de problème.

    Merci.

  11. #11
    Membre éclairé
    Avatar de djayp
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    295
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 295
    Points : 687
    Points
    687
    Par défaut
    Salut !

    Citation Envoyé par Farid63 Voir le message
    Y a t-il un configuration serveur qui concerne la fonction header?
    Essaie de mettre la fonction exit() après header(), j'avais déjà rencontré ce problème, mais pas sur xampp alors on sait jamais ! Sinon comme cela a déjà été dit, évite tout espace blanc, texte ou code html (y compris dans les fichiers inclus) avant l'utilisation de la fonction header.

    A+++

  12. #12
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Janvier 2008
    Messages
    623
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 623
    Points : 1 369
    Points
    1 369
    Par défaut
    Bon j'ai résolu mon problème.

    Enfaite il faut faire attention à l'encodage des fichiers, j'utiliser l'utf-8, mais il faut le faire sans BOM.
    Je sais pas trop ce que ça veut dire pour l'instant, mais apparament PHP ne le gère pas...
    Donc utf-8 sans BOM et tout marche parfaitement.

    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Tomcat]restriction d'accès à une appli sur IP
    Par cwamgis dans le forum Tomcat et TomEE
    Réponses: 5
    Dernier message: 15/03/2010, 11h54
  2. Accés aux sites boursiers
    Par Faget François dans le forum Web & réseau
    Réponses: 4
    Dernier message: 04/04/2006, 12h35
  3. Restriction des accès à la base de données
    Par palmi38 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 21/10/2005, 17h17
  4. Bloquer les accès à certains sites
    Par Polskynet dans le forum Administration
    Réponses: 2
    Dernier message: 25/02/2005, 09h49
  5. Réponses: 13
    Dernier message: 11/08/2004, 11h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo