Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/01/2011, 14h42   #1
Membre chevronné
 
Avatar de Farid63
 
Homme Farid
Inscription : janvier 2008
Messages : 368
Détails du profil
Informations personnelles :
Nom : Homme Farid
Âge : 26
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : janvier 2008
Messages : 368
Points : 684
Points : 684
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 :
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 :
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.
Farid63 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2011, 16h34   #2
Rédacteur
 
Avatar de Halleck
 
Développeur PHP & Architecte logiciel
Inscription : mars 2003
Messages : 562
Détails du profil
Informations personnelles :
Âge : 25
Localisation : France, Loiret (Centre)

Informations professionnelles :
Activité : Développeur PHP & Architecte logiciel

Informations forums :
Inscription : mars 2003
Messages : 562
Points : 1 379
Points : 1 379
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
__________________
Zend PHP Certified Engineer
tutoriels : tutos PHP, Web & SEO blog : blog.lepine.pro
membre de l'AFUP (Association des Utilisateurs de PHP)
Halleck est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2011, 08h59   #3
Membre chevronné
 
Avatar de Farid63
 
Homme Farid
Inscription : janvier 2008
Messages : 368
Détails du profil
Informations personnelles :
Nom : Homme Farid
Âge : 26
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : janvier 2008
Messages : 368
Points : 684
Points : 684
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 :
<?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 :
<?phpheader('Location: http://www.google.fr');?>
Ca ne fonctionne pas, et je n'ai pas de message d'erreur.
Farid63 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2011, 16h41   #4
Rédacteur
 
Avatar de Halleck
 
Développeur PHP & Architecte logiciel
Inscription : mars 2003
Messages : 562
Détails du profil
Informations personnelles :
Âge : 25
Localisation : France, Loiret (Centre)

Informations professionnelles :
Activité : Développeur PHP & Architecte logiciel

Informations forums :
Inscription : mars 2003
Messages : 562
Points : 1 379
Points : 1 379
Code :
<?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
__________________
Zend PHP Certified Engineer
tutoriels : tutos PHP, Web & SEO blog : blog.lepine.pro
membre de l'AFUP (Association des Utilisateurs de PHP)
Halleck est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2011, 04h12   #5
Membre actif
 
Inscription : décembre 2006
Messages : 184
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 184
Points : 198
Points : 198
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.
Helfima est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2011, 14h31   #6
Membre chevronné
 
Avatar de Farid63
 
Homme Farid
Inscription : janvier 2008
Messages : 368
Détails du profil
Informations personnelles :
Nom : Homme Farid
Âge : 26
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : janvier 2008
Messages : 368
Points : 684
Points : 684
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?
Farid63 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2011, 16h44   #7
Membre actif
 
Inscription : décembre 2006
Messages : 184
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 184
Points : 198
Points : 198
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).
Helfima est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2011, 18h39   #8
Membre chevronné
 
Avatar de Farid63
 
Homme Farid
Inscription : janvier 2008
Messages : 368
Détails du profil
Informations personnelles :
Nom : Homme Farid
Âge : 26
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : janvier 2008
Messages : 368
Points : 684
Points : 684
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.
Farid63 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2011, 19h24   #9
Membre actif
 
Inscription : décembre 2006
Messages : 184
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 184
Points : 198
Points : 198
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 :
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 :
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
Helfima est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2011, 15h01   #10
Membre chevronné
 
Avatar de Farid63
 
Homme Farid
Inscription : janvier 2008
Messages : 368
Détails du profil
Informations personnelles :
Nom : Homme Farid
Âge : 26
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : janvier 2008
Messages : 368
Points : 684
Points : 684
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.
Farid63 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2011, 16h35   #11
Membre chevronné
 
Avatar de djayp
 
Inscription : avril 2004
Messages : 290
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 290
Points : 617
Points : 617
Envoyer un message via ICQ à djayp
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+++
__________________
Djay
http://j-place.developpez.com/
djayp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2011, 09h15   #12
Membre chevronné
 
Avatar de Farid63
 
Homme Farid
Inscription : janvier 2008
Messages : 368
Détails du profil
Informations personnelles :
Nom : Homme Farid
Âge : 26
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : janvier 2008
Messages : 368
Points : 684
Points : 684
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+
Farid63 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h09.


 
 
 
 
Partenaires

Hébergement Web