[PHP] Tester un age pour autorisation

Fermé
Profil bloqué - 8 janv. 2010 à 23:29
djflexlive Messages postés 557 Date d'inscription mercredi 26 mars 2008 Statut Membre Dernière intervention 23 avril 2015 - 10 janv. 2010 à 20:32
Bonjour à tous,
je cherche donc à verifier si l'age entrée par l'utilisateur est bien de 18 ans ou plus. et pour le moment, je n'est que l'annee qui fonctionne.
 <?php
$month = $_REQUEST['bmonth'];
$day = $_REQUEST['day'];
$year = $_REQUEST['year'];
$this_day = date(d);
$this_month = date(m);
$this_year = date(Y);
$day_val = $this_day - $day;
$month_val = $this_month - $month;
$year_val = $this_year - $year;
if($year_val >= 18) {
header("Location: error.php");
}
if($month_val >= 12) {
header("Location: error.php");
}
if($day_val >= 31) {
header("Location: error.php");
}
else {
header("Location: acceptez.html");
}
 ?>

savez vous pourquoi cela ne veut pas fonctionner?
A voir également:

26 réponses

nico.v.44 Messages postés 337 Date d'inscription dimanche 11 mai 2008 Statut Membre Dernière intervention 30 avril 2012 15
8 janv. 2010 à 23:43
je pense que t'a pas bien mi les crochet :



}
if($month_val >= 12)}
{
header("Location: error.php");
}
if($day_val >= 31)}
{
header("Location: error.php");
}
else {
header("Location: acceptez.html");
}

je suis pas sur mais essay
0
Profil bloqué
8 janv. 2010 à 23:53
non, ce n'est pas cela, les } a la fin des if ne correspondent a rien. il ferme quelque chose qui est deja fermer.
et la, seul le year est pris en compte.
0
nico.v.44 Messages postés 337 Date d'inscription dimanche 11 mai 2008 Statut Membre Dernière intervention 30 avril 2012 15
9 janv. 2010 à 00:07
essay :

if($year_val >= 18) {
header("Location: error.php");
}
else($month_val >= 12) {
header("Location: error.php");
}
else($day_val >= 31) {
header("Location: error.php");
}
else {
header("Location: acceptez.html");
}
0
nico.v.44 Messages postés 337 Date d'inscription dimanche 11 mai 2008 Statut Membre Dernière intervention 30 avril 2012 15
9 janv. 2010 à 00:08
je croi me souvenir avoir eu un bug avec les if et else

je croi que plusieurs if ne se suivent pas...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
nico.v.44 Messages postés 337 Date d'inscription dimanche 11 mai 2008 Statut Membre Dernière intervention 30 avril 2012 15
9 janv. 2010 à 00:10
en faite un di pas :

si
si
si


mais:

si
et si
et si



et je croi que else sert a ça
0
Profil bloqué
9 janv. 2010 à 00:12
non plus, avec les if, ca me donne d'abord un message d'erreur pour le symbole { puis une fois retirer, il luyi faut.
quand au elseif il ne fonctionne pas plus.
0
nico.v.44 Messages postés 337 Date d'inscription dimanche 11 mai 2008 Statut Membre Dernière intervention 30 avril 2012 15
9 janv. 2010 à 00:14
ahhh


fo encore plus d'inspiration


et oui la programation c'est comme ça et pas autrement lol :-)
0
nico.v.44 Messages postés 337 Date d'inscription dimanche 11 mai 2008 Statut Membre Dernière intervention 30 avril 2012 15
9 janv. 2010 à 00:15
attend demain je pensse qu'il y aura plus de monde

mais tu aurai du mettre dan programation mais pas dans webmastering
0
Essaies ça :

<?php
if(isset($_REQUEST['bmonth'])) // vérifie si $_REQUEST['bmonth'] existe
{
$month = $_REQUEST['bmonth'];
$day = $_REQUEST['day'];
$year = $_REQUEST['year'];
$this_day = date(d);
$this_month = date(m);
$this_year = date(Y);
$day_val = $this_day - $day;
$month_val = $this_month - $month;
$year_val = $this_year - $year;

if($year_val >= 18 || $month_val >= 12 || $day_val >= 31) {
header("Location: error.php");
}else {
header("Location: acceptez.html");
}
}
?>
0
Profil bloqué
9 janv. 2010 à 08:15
non marche pas plus, il ne verifie que l'année et pas si on a eu son anniversaire la veille. et en plus, il prend a l'envers, quand on a plus de 18 on est ejecter quand on a moins on passe :p

avec ce code, les mineur passe et les majeur sont refuser:
<?php 
if(isset($_REQUEST['bmonth'])) // vérifie si $_REQUEST['bmonth'] existe 
{ 
$month = $_REQUEST['bmonth']; 
$day = $_REQUEST['day']; 
$year = $_REQUEST['year']; 
$this_day = date(d); 
$this_month = date(m); 
$this_year = date(Y); 
$day_val = $this_day - $day; 
$month_val = $this_month - $month; 
$year_val = $this_year - $year; 

if($year_val >= 18 || $month_val >= 12 || $day_val >= 31) { 
header("Location: error.php"); 
}else { 
header("Location: acceptez.html"); 
} 
} 
?>


avec celui ci, ont est refuser a tout les coup.
<?php 
if(isset($_REQUEST['bmonth'])) // vérifie si $_REQUEST['bmonth'] existe 
{ 
$month = $_REQUEST['bmonth']; 
$day = $_REQUEST['day']; 
$year = $_REQUEST['year']; 
$this_day = date(d); 
$this_month = date(m); 
$this_year = date(Y); 
$day_val = $this_day - $day; 
$month_val = $this_month - $month; 
$year_val = $this_year - $year; 

if($year_val <= 18 || $month_val <= 12 || $day_val <= 31) { 
header("Location: error.php"); 
}else { 
header("Location: acceptez.html"); 
} 
} 
?>


Il n'y a que les fleche du superieur/inferieur qui ont changer et plus rien ne vas.

Connaissez vous un script qui fonctionne pour cela?

Sinon on a bien un moyen mais barbare et peu propre: mettre le frum dans une frame et tous verouillez; avec une inscription obligatoire mais moins propre en code pour les robots.
0
Utilisateur anonyme
9 janv. 2010 à 08:29
ceci devrai fonctionner:
if(isset($_REQUEST['bmonth'])) // vérifie si $_REQUEST['bmonth'] existe 
{ 

	$month = $_REQUEST['bmonth']; 
	$day = $_REQUEST['day']; 
	$year = $_REQUEST['year']; 

	$valeur_mini_18ans = mktime(0, 0, 0, 1, 1, 1988)
	$timestamp_naissance_membre = mktime(0, 0, 0, $month, $day, $year)

	if($valeur_mini_18ans <= time() - $timestamp_naissance_membre){
		header("Location: error.php"); 
	}else { 
		header("Location: acceptez.html"); 
	} 
}
0
Profil bloqué
9 janv. 2010 à 08:45
non plus. ca ne verifie que l'année et inverse encore les autorisation (ca c'est pas grave, suffit de changer les location).
mais pour le moment, on est obliger d'avoir 19 ans pour rentrer uniquement avec l'année ce sui ne vas pas tres bien.
0
Utilisateur anonyme
9 janv. 2010 à 09:04
Oui je me suis planter sur la condition if :/

if($valeur_mini_18ans >= time() - $timestamp_naissance_membre)


Mais tu me dis que ça fonctionne correctement mais seulement à partir de 19 ans mini c'est ça ?
Car si c'est ça le problème modifie:

$valeur_mini_18ans = mktime(0, 0, 0, 1, 1, 1987) ;


Ha je viens de voir que j'ai oublié les ';'

$valeur_mini_18ans = mktime(0, 0, 0, 1, 1, 1988);
$timestamp_naissance_membre = mktime(0, 0, 0, $month, $day, $year);
0
Profil bloqué
9 janv. 2010 à 10:06
je viens de tester. ca fonctionne toujours uniquement sur l'annee.
ce qui ne permet pas de verouiller ceux qui auront leur aniversaire demain et de laisser passer ceux qui ont eu leur aniversaire hier.et la, ca oblige a changer tous les jour les valeurs de
$valeur_mini_18ans = mktime(0, 0, 0, 1, 1, 1987) ;
non?

sinon, comme j'ai modifier le coppa du forum, est ce que ce serait possible de repiquer le code:
$coppa_birthday = $user->format_date(mktime($now['hours'] + $user->data['user_dst'], $now['minutes'], $now['seconds'], $now['mon'], $now['mday'] - 1, $now['year'] - 18), $user->lang['DATE_FORMAT']);

sur le forum, cela donne a l'inscription l'obligation de dire si on est ne avant tel date ou apres tel date, ce qui permet un choix. (c'est pas ce que je veux car on dois garder l'age donner par les utilisateurs afin de pouvoir les resortir si necessaire.

Enfin si on y arrive, aps, je ferait la methode bourrin mais elle est moins propre car utilisant des frames et un verouillage complet du forum.
0
Utilisateur anonyme
9 janv. 2010 à 10:36
Voila normalement tu dois me dire "Super" :) avec ceci :
<?php
	$valeur_mini_18ans = mktime(0, 0, 0, 1, 1, 1988) ;
	$timestamp_naissance_membre = mktime(0, 0, 0, $month, $day, $year);

	if($valeur_mini_18ans <= time() - $timestamp_naissance_membre)
	{
	
		echo '<script language="Javascript">
		<!--
		document.location.replace("error.php");
		// -->
		</script>';

	}
?>
0
Profil bloqué
9 janv. 2010 à 13:51
ok, heu ben merci et pas merci en meme temps :p
je sais que tu te casse la tete avec ce trucs :p mais voila, il suffit de rentrer l'annee pour que cela passe, il manque une verifiaction pour ceux qui sont ne la veille et ceux qui sont ne le lendemain.

a moins que tu trouve une idée qui laisse passer ceux qui ont 18 ans revolue depuis hier mais qui bloque ceux sui ont tous jeut ou vont avoir 18 ans, laisse tombern je vais bidouiller un truc qui vas pouvoir bloquer un minimum.

sinon avec le script de coppa que j'ai mis plus haut, il a moyen de faire quelque chose?

(si tu veux le voir a l'oeuvre, vas sur https://www.000webhost.com/migrate?static=true et met une date genre 1986 pour passer. (c'est ton script qui tourne) et fait enregistrer)
0
Profil bloqué
9 janv. 2010 à 18:46
Alors plus d'idée? faut que je passe en mode bourrin?
0
nico.v.44 Messages postés 337 Date d'inscription dimanche 11 mai 2008 Statut Membre Dernière intervention 30 avril 2012 15
9 janv. 2010 à 19:27
oué je pense en en revien toujours au meme a un moment : tout essayer meme le plus absurde :)
0
djflexlive Messages postés 557 Date d'inscription mercredi 26 mars 2008 Statut Membre Dernière intervention 23 avril 2015 95
10 janv. 2010 à 01:20
Essayes avec ceci :

<?php
function calcul_age($birthday) {
	list($annee, $mois, $jour) = split('[-.]', $birthday);
	$today['mois'] = date('n');
	$today['jour'] = date('j');
	$today['annee'] = date('Y');
	$annees = $today['annee'] - $annee;
	if ($today['mois'] <= $mois) {
		if ($mois == $today['mois']) {
		if ($jour > $today['jour'])
		$annees--;
		}
		else
		$annees--;
	}
	  
	return $annees;
}

// Te permets de faire divers essais
$date_anniversaire = '11/01/1992';

$date_anniversaire = explode('/',$date_anniversaire);
if ( !checkdate( $date_anniversaire[1], $date_anniversaire[0], $date_anniversaire[2] ) ) {
$erreur .= '- Votre date de naissance n\'est pas valide.<br/>';
} else {
$date_anniversaire = $date_anniversaire[2].'-'.$date_anniversaire[1].'-'.$date_anniversaire[0];
}

echo calcul_age($date_anniversaire);	
?>
0
Petit Raptor Messages postés 187 Date d'inscription mardi 22 décembre 2009 Statut Membre Dernière intervention 16 mars 2010 1
10 janv. 2010 à 08:38
Pourquoi pas ne pas tester le simple code de départ mais avec les bon mots ?

En effet, plusieurs if d'affilé ne marcheront pas vu que ça se traduirais comme ceci:

Si ...
Si ...
Si ...
Sinon ...

Remplaçons par le bon mot:

Si ...
Sinon Si ...
Sinon Si ...
Sinon ...

Comment dire à php "Sinon Si" ?

Tout simplement: "elseif"

Ce qui donnerai donc:

<?php
$month = $_REQUEST['bmonth'];
$day = $_REQUEST['day'];
$year = $_REQUEST['year'];
$this_day = date(d);
$this_month = date(m);
$this_year = date(Y);
$day_val = $this_day - $day;
$month_val = $this_month - $month;
$year_val = $this_year - $year;
if($year_val >= 18) {
header("Location: error.php");
}
elseif($month_val >= 12) {
header("Location: error.php");
}
elseif($day_val >= 31) {
header("Location: error.php");
}
else {
header("Location: acceptez.html");
}
?>

Je n'ai même pas chercher à voir si ça marchera par rapport aux conditions qui sont dedans.

Mais si tes conditions sont logiques et bonnes, alors ce code très simple marchera.
0