Page 1 sur 1

MESSAGE AUTOMATIQUE AIDE

Posté : 07 mars 2012, 11:58
par MEGAFILES
Bonjour à tous !
J'ai un problème et je n'ai pas trop d'idée, enfin pour le contenu du code

J'ai fait un système de premium sécurisé qui ajoute le rang de 1 donc 2

Mais j'aimerai faire une limite de temps, j'ai pensé à time(), je sais juste que 3600 = 1 heure

J'aimerai que lorsque un mois est passé, l'utilisateur soit automatiquement averti, est-ce possible ?!

Re: MESSAGE AUTOMATIQUE AIDE

Posté : 07 mars 2012, 12:07
par xTG
La fonction strtotime() te permet de récupérer le timestamp dans un mois très facilement.

Re: MESSAGE AUTOMATIQUE AIDE

Posté : 07 mars 2012, 12:12
par MEGAFILES
Mais comment faire automatiquement un message pour avertir l'utilisateur ?

Re: MESSAGE AUTOMATIQUE AIDE

Posté : 07 mars 2012, 12:13
par xTG
Une tâche Cron (ou tâche planifié sous windows) qui lance un script PHP chaque jour pour vérifier les utilisateurs arrivés à terme et leur envoyer un email.

Re: MESSAGE AUTOMATIQUE AIDE

Posté : 07 mars 2012, 13:00
par MEGAFILES
Une tâche Cron (ou tâche planifié sous windows) qui lance un script PHP chaque jour pour vérifier les utilisateurs arrivés à terme et leur envoyer un email.
Pour la tâche cron c'est bon, maintenant je dois faire le fichier qui doit automatiquement envoyer l'adresse email, j'ai pensé à

if ((d['timestart'] - $d['timeout']) > 2592000)
{
// N'est plus premium
}

Re: MESSAGE AUTOMATIQUE AIDE

Posté : 07 mars 2012, 14:43
par xTG
Euh... Si ce sont deux valeurs fixes le résultat sera toujours le même. ;)
Il vaudrait mieux quelque chose du genre :
if ((time() - $d['timeout']) > 0)

Re: MESSAGE AUTOMATIQUE AIDE

Posté : 07 mars 2012, 16:53
par moogli
Salut,

Suivant comment t'a fait ton truc y a moyen de faire un poil plus simple

Si tu stocke la date de fin du compte
- Une procédure stockée pour supprimer les comptes arrivés à expiration (where datefin< now() )
- une procédure stockée qui va chercher les adresses email des gens qui ont now() + 5 jours = datefin (bon 5 par exemple mais ça peux être autre chose ;) )
Après en php reste juste à envoyer les email ;)

@+

Re: MESSAGE AUTOMATIQUE AIDE

Posté : 07 mars 2012, 22:56
par MEGAFILES
Voilà les codes premium
<?php

require_once "global.php";

define('NAV_ID', 2);


if (!LOGGED_IN)
{
	@header('Location: login.html?redir=' . $_SERVER['REQUEST_URI']);
	exit;
}

if (isset($_GET['verif']) && isset($_POST['code1']))
{

	$ident = $idp = $ids = $idd = $codes = $code1 = $code2 = $code3 = $code4 = $code5 = $datas = '';
	$idp = 20697;
	$idd = 72516;
	$ident=$idp.";".$ids.";".$idd;

	if(isset($_POST['code1'])) $code1 = filter($_POST['code1']);
	if(isset($_POST['code2'])) $code2 = ";" . $_POST['code2'];
	if(isset($_POST['code3'])) $code3 = ";" . $_POST['code3'];
	if(isset($_POST['code4'])) $code4 = ";" . $_POST['code4'];
	if(isset($_POST['code5'])) $code5 = ";" . $_POST['code5'];
	$codes = $code1 . $code2 . $code3 . $code4 . $code5;

	if(isset($_POST['DATAS'])) $datas = $_POST['DATAS'];

	$ident = urlencode($ident);
	$codes = urlencode($codes);
	$datas = urlencode($datas);

	$get_f = @file("http://script.starpass.fr/check_php.php?ident=$ident&codes=$codes&DATAS=$datas");
	
	if(!$get_f)
	{
		exit("Votre serveur n'a pas accès au serveur de Starpass, merci de contacter votre hébergeur.");
	}
	
	$tab = explode("|",$get_f[0]);

	if(!$tab[1]) { $url = "http://script.starpass.fr/erreur.php"; } else { $url = $tab[1]; }

	$pays = $tab[2];
	$palier = urldecode($tab[3]);
	$id_palier = urldecode($tab[4]);
	$type = urldecode($tab[5]);

	if(substr($tab[0],0,3) != "OUI")
	{
		  @header("Location: $url");
		  exit;
	}
	
	else
	{
		setCookie("CODE_BON", "1", 0);

		if ($users->IsAdmin(USER_NAME)) { $rank = USER_RANK; } else { $rank = 2; }
		
		dbquery("UPDATE users SET rank = '" . $rank . "' WHERE username = '" . USER_NAME  ."' LIMIT 1");
		
		$exist = dbquery("SELECT null FROM user_premium WHERE user_id = '" . USER_ID . "' LIMIT 1");
		
		if ($db->Result($exist) == true)
		{
			$length = $db->Evaluate(dbquery("SELECT timeout FROM user_premium WHERE user_id = '" . USER_ID . "'"), 0) + 2592000; // On rajoute du temps
			dbquery("UPDATE user_premium SET timestart = '" . time() . "', timeout = '" . $length . "' WHERE user_id = '" . USER_ID . "' LIMIT 1");
		}
		
		else
		{
			dbquery("INSERT INTO user_premium (user_id,timestart,timeout) VALUES ('" . USER_ID . "','" . time() . "','" . 2592000 . "')");
		}
	}
}

$tpl->Init();

$tpl->SetParam('page_title', 'Devenir membre premium');

$tpl->AddGeneric('page-head');
$tpl->AddIncludeSet('default');
$tpl->WriteIncludeFiles();
$tpl->Write('<style type="text/css">
div#starpass_72516 #sk-kit { border-radius: 5px !important; -moz-border-radius: 5px !important; -webkit-border-radius: 5px; box-shadow: 0px 0px 10px #000 !important; }
div#starpass_72516 #sk-kit input, span { border-radius: 5px !important; -moz-border-radius: 5px !important; -webkit-border-radius: 5px !important; }
</style>');
$tpl->Write('</head>');
$tpl->AddGeneric('menu');
$tpl->AddGeneric('comp-premium');
$tpl->AddGeneric('comp-footer');
$tpl->Output();
?>
et le script cron
<?php

	$query = dbquery("SELECT * FROM user_premium");
	
	if (mysql_num_rows($query) >= 1)
	{	
		while ($Data = mysql_fetch_assoc($query))
		{
			$user_id = intval($Data['user_id']);
			$timeout = $Data['timeout'];
			$timestart = $Data['timestart'];
		}
		
		if ((time() - $timestart) >= $timeout)
		{
			dbquery("DELETE FROM user_premium WHERE user_id = '" . $user_id . "'"); 
		}
		
		else
		{
			dbquery("UPDATE user_premium SET timestart = '" . time() . "' WHERE user_id = '" . $user_id . "'");
		}
	}

?>
J'utilise la class.cron.php de UBERCMS [Rétro Habbo] et cela fonctionne, enfin, je crois ^^

Re: MESSAGE AUTOMATIQUE AIDE

Posté : 07 mars 2012, 23:08
par MEGAFILES
J'ai supprimé le else { // update du time ^^ }

Re: MESSAGE AUTOMATIQUE AIDE

Posté : 07 mars 2012, 23:24
par moogli
donc dans la table timeout est un timestamp ?

Si oui il faut que tu sélectionne les adresses email qui ont current_timestamp + (la duré qui reste que tu veux) = timeout.

Tu peux utiliser un champ de type date plutôt que timestamp histoire de simplifier les calculs pour toi ;)

le calcul de date n'est pas a faire en php mais sur le serveur mysql. PHP récupérer juste les infos et boucle envoyer les mails.

tu peux montrer le create table de la table que l'on pige mieux

@+

Re: MESSAGE AUTOMATIQUE AIDE

Posté : 08 mars 2012, 13:19
par MEGAFILES
Lorsque l'utilisateur prolonge sa durée de premium, j'update le timestart en timestart = timestart + '2592000'

et dans timeout, également