Modifier les temps de votes

Petit nouveau ! | 6 Messages

08 mai 2011, 01:09

Bonjour

Voila, je voudrais savoir si je peut modifier le temps de vote, les votes sont programmées A 24 heures (dons sa fais que je peut voter qu'une seule foi par jour), je souhaiterais les mettre à 2 heures,
mon petit souci c'est que je vote qu'une Seul foi par jour, je voudrais savoir si je peut le remettre toutes les 2 heures, (les votes me servent pour des classements sur des site d'annuaire) code ci-joint des en php .
<?php
function change_db($db)
{
	global $array_db;
	$mysql_link = mysql_connect($array_db['host'], $array_db['user'], $array_db['pass']) or die ("Connexion impossible !");
	mysql_select_db($db, $mysql_link) or die (mysql_error());
}
function create_vote_lists($id,$db)
{
	change_db($db);
	$check_exist = "SELECT * FROM `voting_points` WHERE `id` LIKE '$id'";
	$check = mysql_query($check_exist) or die (mysql_error());
	if(!mysql_num_rows($check))
	{
		$create_list = "INSERT INTO `voting_points` (`id`) VALUES ('$id')";
		$create = mysql_query($create_list) or die (mysql_error());
	}
	$user_ip = getenv("REMOTE_ADDR");
	$check_exist = "SELECT * FROM `voting` WHERE `user_ip` LIKE '$user_ip'";
	$check = mysql_query($check_exist) or die (mysql_error());
	$row = mysql_fetch_array($check);
	$today = time();
	if(!mysql_num_rows($check))
	{
		$create_list = "INSERT INTO `voting` (`user_ip`) VALUES ('$user_ip')";
		$create = mysql_query($create_list) or die (mysql_error());
	}
	else 
		if(($today - $row['time']) > 7200)
		{
			$create_list = "UPDATE `voting` SET `sites` = 0 WHERE `user_ip` LIKE '$user_ip'";
			$create = mysql_query($create_list) or die (mysql_error());
		}
}

function show_points($id,$db)
{
	change_db($db);
	$sql = "SELECT `points` FROM `voting_points` WHERE `id` LIKE '$id'";
	$result = mysql_query($sql) or die (mysql_error());
	$row = mysql_fetch_array($result);
	$acc_points = $row['points'];
	return $acc_points;
}
$points = show_points($_SESSION['id'],$array_db['db_realmd']);

function show_passed_time($db)
{
	change_db($db);
	$user_ip = getenv("REMOTE_ADDR");
	$sql = "SELECT * FROM `voting` WHERE `user_ip` LIKE '$user_ip'";
	$result = mysql_query($sql) or die (mysql_error());
	$row = mysql_fetch_array($result);
	$user_time = $row['time'];
	if ($user_time == 0)
		return 0;
	else
	{
		$today = time();
		$passed = $today - $user_time;
		$passed_seconds = $passed %60;
		$passed_minutes_in_seconds = ($passed - $passed_seconds)%3200;
		$passed_minutes = $passed_minutes_in_seconds/60;
		$passed_hours = ($passed - ($passed_seconds + $passed_minutes_in_seconds))/2;
		$user_passed_time = $passed_hours."h ".$passed_minutes."m et ".$passed_seconds."s";
		return $user_passed_time;
	}
}
function return_voted_sites($db)
{
	change_db($db);
	$user_ip = getenv("REMOTE_ADDR");
	$sql = "SELECT `sites` FROM `voting` WHERE `user_ip` LIKE '$user_ip'";
	$result = mysql_query($sql) or die (mysql_error());
	$row = mysql_fetch_array($result);
	$sites = $row['sites'];
	return $sites;
}
function vote($site,$id,$db)
{
	global $tab_sites;
	if(array_key_exists($site, $tab_sites))
	{
		if(!($site & return_voted_sites($db)))
		{
			$user_ip = getenv("REMOTE_ADDR");
			echo "<script language='javascript'>setTimeout(window.open(\"".$tab_sites[$site][1]."\", \"_self\", \"\"),0);</script>";
			$today = time();
			change_db($db);
			$vote_user = "UPDATE `voting` SET `sites`=(`sites` + $site), `time`='$today' WHERE `user_ip` LIKE '$user_ip'";
			$results = mysql_query($vote_user) or die(mysql_error());
			$vote_acc = "UPDATE `voting_points` SET `points`=(`points` + 1), `date_points`=(`date_points` + 1) WHERE `id` = '$id'";
			$results = mysql_query($vote_acc) or die(mysql_error());
		}
	}
}
function count_tab_sites()
{
	global $tab_sites;
	$counter = 0;
	foreach($tab_sites as $key => $value)
		$counter+=$key;
	return $counter;
}
function show_sites_menu($db)
{
	global $tab_sites;
	$user_ip = getenv("REMOTE_ADDR");
	change_db($db);
	foreach($tab_sites as $key => $value)
	{
		$sql = "SELECT `sites` FROM `voting` WHERE `user_ip` LIKE '$user_ip'";
		$result = mysql_query($sql) or die(mysql_error());
		$row = mysql_fetch_array($result);
		$sites = $row['sites'];
		if (!($sites & $key))
			echo "<option value='".$key."'>".$value[0]."</option>";
	}
}
function show_time_to_vote($db)
{
	change_db($db);
	$user_ip = getenv("REMOTE_ADDR");
	$sql = "SELECT * FROM `voting` WHERE `user_ip` LIKE '$user_ip'";
	$result = mysql_query($sql) or die (mysql_error());
	$row = mysql_fetch_array($result);
	$user_time = $row['time'];
	
	$today = time();
	$remaining = 7200 -($today - $user_time);
	$remaining_seconds = $remaining%60;
	$remaining_minutes_in_seconds = ($remaining - $remaining_seconds)%3600;
	$remaining_minutes = $remaining_minutes_in_seconds/60;
	$remaining_hours = ($remaining - ($remaining_seconds + $remaining_minutes_in_seconds))/3600;
	$user_remaining_time = $remaining_hours."h ".$remaining_minutes."m et ".$remaining_seconds."s";
	return $user_remaining_time;
}
function check_date_points($id,$db)
{
	global $tab_sites;
	change_db($db);
	$sql = "SELECT * FROM `voting_points` WHERE `id` = $id";
	$result = mysql_query($sql) or die (mysql_error());
	$row = mysql_fetch_array($result);
	$date = $row['date'];
	$date_points = $row['date_points'];
	$today = date("Ymd");
	if($date <> $today)
	{
		$reset_date_and_datepoints = "UPDATE `voting_points` SET `date`='$today', `date_points`='0' WHERE `id` = $id";
		$reset = mysql_query($reset_date_and_datepoints) or die (mysql_error());
		return 1;
	}
	else
		if($date_points >= sizeof($tab_sites))
			return 0;
		else
			return 1;
}
?>
Cordialement

Petit nouveau ! | 6 Messages

08 mai 2011, 23:09

Bonjour

Je n'ai toujours pas trouvé réponse a mon problème, pourriez-vous m'aider svp

Cordialement

ViPHP
ViPHP | 2577 Messages

09 mai 2011, 11:26

Bonjour,

Il faut que tu partes de l'affichage du message d'erreur genre "déjà voté" et que tu trouves le code qui fait la vérification. A partir de là, il sera possible de t'aider sur le calcul.

Tu dois aussi vérifier que l'heure de vote est bien stockée dans ta table et non uniquement la date.

Petit nouveau ! | 6 Messages

09 mai 2011, 14:05

Bonjour

Merci de votre reponse, le probleme c que je n'ai pas autre codes sauf celui-ci, :( l'erreur viendrait de la
else
        {
                $today = time();
                $passed = $today - $user_time;
                $passed_seconds = $passed %60;
                $passed_minutes_in_seconds = ($passed - $passed_seconds)%3200;
                $passed_minutes = $passed_minutes_in_seconds/60;
                $passed_hours = ($passed - ($passed_seconds + $passed_minutes_in_seconds))/2;
                $user_passed_time = $passed_hours."h ".$passed_minutes."m et ".$passed_seconds."s";
                return $user_passed_time;
        }
Il me semble que je devrais modifier le bloc else de la fonction show_passed_time ?

J'ai pas compris pour: "vérifier que l'heure de vote est bien stockée dans ta table et non uniquement la date."

ViPHP
ViPHP | 2577 Messages

09 mai 2011, 14:34

Bonjour,

tu peux essayer :
...
$user_passed_time = $passed_hours."h ".$passed_minutes."m et ".$passed_seconds."s";
if ($passed_hours < 2) {
return $user_passed_time;
} else {
return 0;
}
Mais franchement je ne comprends pas tous dans les fonctions. J'ai l'impression que les votes sont annulés le lendemain pour prendre en compte le nouveau vote (fonction check_date_points($id,$db)).

Petit nouveau ! | 6 Messages

09 mai 2011, 18:11

Bonjour

merci, effectivement il me semble que c'est dans check_date_points que ça se passe il me semble. Il y a le test:
function check_date_points($id,$db)
{
	global $tab_sites;
	change_db($db);
	$sql = "SELECT * FROM `voting_points` WHERE `id` = $id";
	$result = mysql_query($sql) or die (mysql_error());
	$row = mysql_fetch_array($result);
	$date = $row['date'];
	$date_points = $row['date_points'];
	$today = date("Ymd");
	if($date <> $today)
	{
		$reset_date_and_datepoints = "UPDATE `voting_points` SET `date`='$today', `date_points`='0' WHERE `id` = $id";
		$reset = mysql_query($reset_date_and_datepoints) or die (mysql_error());
		return 1;
	}

if($date <> $today)

Ce qui veut dire qu'on teste si on est le même jour. Si oui on ne peut pas voter. Et le code ne fonctionne pas comme tu le dis. Ce n'est pas toutes les 24 heures qu'on peu voter, mais tous les jours. Ca veut dire que si quelqu'un vote à 23h59, il peut voter une minute plus tard, à 0h00. C'est ce test qu'il faut modifier. Enfin, il me semble.

auriez vous une idée pour y remédier?

Petit nouveau ! | 6 Messages

11 mai 2011, 11:39

Bonjour

Quelqu'un aurais une idée pour que je puisse changer cette if($date <> $today), En clair mettre autre chose que $date <> $today

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

11 mai 2011, 14:31

il ne faut plus travailler sur des dates mais sur des heures, le plus, a mon avis et de transformer la date de dernier vote en timestamp et de faire la comparaison entre le timestamp courant et le dernier vote + 2h.

tu peut aussi le faire avec date_diff

@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 6 Messages

14 mai 2011, 01:12

il ne faut plus travailler sur des dates mais sur des heures, le plus, a mon avis et de transformer la date de dernier vote en timestamp et de faire la comparaison entre le timestamp courant et le dernier vote + 2h.

tu peut aussi le faire avec date_diff

@+
Bonjour

Comment faire la comparaison entre le timestamp courant et le dernier vote + 2h ?

Cordialement

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

14 mai 2011, 08:38

ben le timestamp c'est des secondes (le nb de secondes depuis "l'an zéro unix" soit 1/0/1970 00h00m00s) donc reste a enlever 2h au timestamp (attention y aun piège faut convertir en secondes)

ensuite bien c'est relativement simple pour le test : if ( (instant présent -2h) > dernier vote) { j'ai le droit de voter } else { pas le droit de voter c'est trop tot }

@+
Il en faut peu pour être heureux ......