Page 1 sur 3

Forcer le passage par une page.

Posté : 18 juin 2010, 21:15
par dsd7
Bonsoir,
je débute en php et mon problème est le suivant.
Je travail sur un projet de site vitrine pour une marque d'alcool. Ma page de contrôle de l'âge est index.php. Je cherche un moyen de forcer le passage par cette page pour toute personne qui tenterait d'accéder au site via une autre page.
merci
Cordialement.

Re: Forcer le passage par une page.

Posté : 18 juin 2010, 21:41
par Ryle
Tu peux utiliser les sessions pour cela. L'idée c'est de mettre une info en session (en mémoire sur le serveur) lorsque l'utilisateur accède à ta page d'entrée. Sur toutes les autres pages il te suffit de tester la présence de cette info en session. Si elle y est, tout va bien, si elle n'y est pas, c'est que l'utilisateur n'est pas passé par ta page principale (et tu peux alors l'y rediriger, ou l'inviter à y aller, ou ce que tu veux :))

Re: Forcer le passage par une page.

Posté : 18 juin 2010, 22:25
par dsd7
Merci pour cette réponse rapide. Je vais me documenter sur les sessions.

Re: Forcer le passage par une page.

Posté : 18 juin 2010, 23:11
par dsd7
J'ai trouvé :
Avec une session sur la page index.php :
<?php
session_start();

// Si une session est déjà présente ont redirige vers une autre page (pas besoin d'afficher le formulaire de connexion)
if(isset($_SESSION['ok'])){
 header('Location: autre_page.php');
 exit();
}

// Si ont soumet le formulaire
if(isset($_POST['valide'])){
 // si bien majeure
  $_SESSION['ok'] = true;
  header('Location: autre_page.php');
}
?>
<!-- Le formulaire -->
Et sur les autres pages, ont vérifie juste si la session existe en début de page :
<?php
// si la session n'existe pas ont redirige vers index.php
if(!isset($_SESSION['ok'])){
 header('Location: index.php');
}
?>
<!-- La page -->
Ma question est : les codes je les place avant la première balise html c'est ça ?
Je demande parce-que là je les ai placés de cette manière et, je suis bien rediriger vers index.php, mais la variable session ne doit pas s'enregistrer car je n'ai plus accès aux autres pages.

Re: Forcer le passage par une page.

Posté : 18 juin 2010, 23:58
par Nours312
slt ::

tu dois déclarer tes sessions sur toutes les pages avant de pouvoir les utiliser ::
<?php
session_start();
// si la session n'existe pas ont redirige vers index.php
if(!isset($_SESSION['ok'])){
 header('Location: index.php');
}
?>
<!-- La page -->
@++

Re: Forcer le passage par une page.

Posté : 19 juin 2010, 00:09
par dsd7
Le problème c'est que si index.php dirige bien vers disons autre_page.php, quand je suis sur cette dernière, si je souhaite accéder à une page différente, je me retrouve sur index.php et ça tourne en rond :(
Que faut-il faire ? Pour le moment j'ai seulement rajouté les codes ci-dessus.

Re: Forcer le passage par une page.

Posté : 27 juin 2010, 13:11
par dsd7
UP.

Re: Forcer le passage par une page.

Posté : 27 juin 2010, 14:41
par Ryle
Si les autres pages te redirigent vers l'index alors que la variable est présente en session, c'est que ton code n'est pas bon.

La page index doit :
- démarrer la session
- ajouter une variable dans la session.

Les autres pages doivent :
- démarrer la session
- contrôler la variable dans la session
- si la variable n'est pas définie, renvoyer sur la page index

Ps : merci d'éviter les "up" qui n'apportent aucune informations supplémentaires pour aider à répondre à vos questions

Re: Forcer le passage par une page.

Posté : 27 juin 2010, 15:03
par dsd7
Merci de ta réponse et désolé pour le "up".

Je ne suis pas expert en php mais j'ai bien l'impression que c'est ce que j'ai fait :
Sur index.php :
<?php
session_start();

if(isset($_SESSION['ok'])){
 header('Location: autre_page.php');
}

if(isset($_POST['valide'])){
  $_SESSION['ok'] = true;
  header('Location: autre_page.php');
}
?> 
Sur les autres pages :
<?php
if(!isset($_SESSION['ok'])){
 header('Location: index.php');
}
?>

Re: Forcer le passage par une page.

Posté : 27 juin 2010, 15:07
par Ryle
Tu as bien un session_start() dans tes autres pages ?

Re: Forcer le passage par une page.

Posté : 27 juin 2010, 15:11
par dsd7
Oui oui pardon, j'ai fait une quote un peu vite...
Donc sur mes autres pages :
<?php
session_start();
if(!isset($_SESSION['ok'])){
 header('Location: index.php');
}
?>
Cette fois c'est sûr :)

Re: Forcer le passage par une page.

Posté : 29 juin 2010, 21:10
par dsd7
Désolé, je sais que ça ne fait pas avancé le shmilblik mais mon problème n'est toujours pas résolu.

Re: Forcer le passage par une page.

Posté : 30 juin 2010, 11:30
par telnes
hello

sur ta page index.php tu dois avoir un formulaire avec pour method = POST

montre ta page index.php

Re: Forcer le passage par une page.

Posté : 30 juin 2010, 21:18
par dsd7
Grosso modo ma page index.php en ayant enlever le superflu :
<?php
session_start();

if(isset($_SESSION['ok'])){
 header('Location: index1.php');
}

if(isset($_POST['valide'])){
  $_SESSION['ok'] = true;
  header('Location: index1.php');
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
	<script type="text/javascript" src="http://lesite.fr/js/checkAge.js"></script>
				window.onload = function () {
					var inputs = new Array(document.formAge.jour,document.formAge.mois,document.formAge.annee);
					for (var i=0;i<inputs.length;i++) {
						inputs[i].onkeyup = function (e) {
							if ((e||window.event).keyCode==13) {
								checkAge();
							}
						}
					}			
				}			
    </script>
</head>

<body>

<form name="formAge" action="http:/lesite.fr" method="post">
				<input type="text" id="jour" name="jour" onkeyup="suivant(this,'mois',2);" /> <img src="images/slash.gif" alt="" />
				<input type="text" id="mois" name="mois" onkeyup="suivant(this,'annee',2);" /> <img src="images/slash.gif" alt="" />
				<input type="text" id="annee" name="annee" maxlength="4" />
		<a href="javascript:checkAge();"><img src="images/valider.gif" alt="Valider" class="valider" /></a>
    </form>
<div id="blockErreur"></div>
</body>
</html>

Je te joins également ma page checkAge.js, on doit pouvoir s'en servir également.

Code : Tout sélectionner

function CheckDate(d) { var now = new Date(); var amin=1901; // année mini var amax=now.getFullYear(); // année maxi var myDate = d.split("/"); var j=myDate[0]; var m=myDate[1]; var a=myDate[2]; var ok=1; if ( ((isNaN(j))||(j<1)||(j>31)) && (ok==1) ) { ok=0; } if ( ((isNaN(m))||(m<1)||(m>12)) && (ok==1) ) { ok=0; } if ( ((isNaN(a))||(a<amin)||(a>amax)) && (ok==1) ) { ok=0; } if (ok==1) { var d2=new Date(a,m-1,j); j2=d2.getDate(); m2=d2.getMonth()+1; a2=d2.getYear(); if (a2<=100) {a2=1900+a2} if ( (j!=j2)||(m!=m2)||(a!=a2) ) { ok=0; } ok=d2; } return ok; } var dayState = false; function tjs_age(dt) { var d=CheckDate(dt) var m=new Date() var age=""; var age_a=0;var age_m=0; if (d!=0) { if (d.getTime()>m.getTime()) { document.formage.dt_naissance.focus(); } age_a = m.getFullYear()-d.getFullYear(); m.setYear(d.getYear()); if ((d.getTime()>m.getTime())&&(d.getMonth()-m.getMonth()!=0)) {age_a--;} if (d.getMonth() >= m.getMonth()) { age_m = 12 - (d.getMonth()-m.getMonth()) } else { age_m = (m.getMonth()-d.getMonth()) } if (age_m==12) {age_m=0;} if (age_a==1) { age=age_a+" an"} if (age_a>1) { age=age_a+" ans"} if ((age_a>0)&&(age_m>0)) {age+=" et "} if (age_m>0) {age+=age_m+" mois"} if (age=="") { age="moins de 1 mois"} } dayState = d>m; return age; } function checkAge () { var day = document.formAge['jour'].value; var month = document.formAge['mois'].value; var year = document.formAge['annee'].value; var age = tjs_age(day+"/"+month+"/"+year); var now = new Date(); var myDate = new Date(); myDate.setFullYear(year,month-1,day); if (parseInt(age)>=18) { if (age.indexOf("mois")!=-1) { document.formAge.submit(); } else if (dayState&&parseInt(age)==18) { document.getElementById('blockErreur').innerHTML = "Vous n'&ecirc;tes pas majeur.<br />Vous ne pouvez pas entrer sur le site"; } else { document.formAge.submit(); } } else if (age==0) { document.getElementById('blockErreur').innerHTML = "Votre date de naissance est invalide."; } else { document.getElementById('blockErreur').innerHTML = "Vous n'&ecirc;tes pas majeur.<br />Vous ne pouvez pas entrer sur le site"; } } function suivant(enCours, suivant, limite) { if (enCours.value.length == limite) document.formAge[suivant].focus(); }
PS : merci de ta réponse.

Re: Forcer le passage par une page.

Posté : 01 juil. 2010, 19:11
par Nours312
slt ::

t'y a touché ? ou c'est d'origine le simple / ??
<form name="formAge" action="http:/lesite.fr" method="post">
sinon, il est ou ton formulaire avec l'input name="valide" ?