Forcer le passage par une page.

Eléphanteau du PHP | 18 Messages

18 juin 2010, 21:15

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.

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

18 juin 2010, 21:41

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 :))
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 18 Messages

18 juin 2010, 22:25

Merci pour cette réponse rapide. Je vais me documenter sur les sessions.

Eléphanteau du PHP | 18 Messages

18 juin 2010, 23:11

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.

Mammouth du PHP | 661 Messages

18 juin 2010, 23:58

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 -->
@++

Eléphanteau du PHP | 18 Messages

19 juin 2010, 00:09

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.

Eléphanteau du PHP | 18 Messages

27 juin 2010, 13:11

UP.

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

27 juin 2010, 14:41

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
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 18 Messages

27 juin 2010, 15:03

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');
}
?>

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

27 juin 2010, 15:07

Tu as bien un session_start() dans tes autres pages ?
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 18 Messages

27 juin 2010, 15:11

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 :)

Eléphanteau du PHP | 18 Messages

29 juin 2010, 21:10

Désolé, je sais que ça ne fait pas avancé le shmilblik mais mon problème n'est toujours pas résolu.

Eléphant du PHP | 422 Messages

30 juin 2010, 11:30

hello

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

montre ta page index.php
toujours faire une recherche sur http://www.php.net et/ou sur http://www.google.fr :)
utiliser http://ideone.com/ pour vos codes :)

Eléphanteau du PHP | 18 Messages

30 juin 2010, 21:18

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.

Mammouth du PHP | 661 Messages

01 juil. 2010, 19:11

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" ?