Autoriser un vote toutes les 2heures???
lilasn
Messages postés
33
Statut
Membre
-
David191212 Messages postés 270 Statut Membre -
David191212 Messages postés 270 Statut Membre -
Bonjour,
J'ai téléchargé un composant (pour mon site qui est sur joomla 1.5) qui permet d'afficher une galerie d'image avec bouton de vote. Seulement il est possible de voter qu'une seule fois car l'adresse IP du votant est enregistré sur la BDD grâce à la fonction "$ip= $_SERVER['REMOTE_ADDR']". Le fichier contenant cette fonction est en php et je me demandais comment puis-je autoriser le vote toutes les 2 heures. Quel est la fonction à insérer?
Pouvez vous m'aider?
Merci
J'ai téléchargé un composant (pour mon site qui est sur joomla 1.5) qui permet d'afficher une galerie d'image avec bouton de vote. Seulement il est possible de voter qu'une seule fois car l'adresse IP du votant est enregistré sur la BDD grâce à la fonction "$ip= $_SERVER['REMOTE_ADDR']". Le fichier contenant cette fonction est en php et je me demandais comment puis-je autoriser le vote toutes les 2 heures. Quel est la fonction à insérer?
Pouvez vous m'aider?
Merci
A voir également:
- Autoriser un vote toutes les 2heures???
- Autoriser un site sur chrome - Guide
- Autoriser capture d'écran whatsapp - Accueil - Messagerie instantanée
- Autoriser appareil photo snapchat iphone ✓ - Forum Snapchat
- Impossibilité d'autoriser l'acces aux photos à des appli - Forum iPhone
- Je n'arrive pas a autoriser l'appareil photo sur snapchat iphone ✓ - Forum iPhone
13 réponses
Il faut aussi stocker dans la BDD la date (en timestamp) à laquelle "l'IP" à votée...
ensuite tu demande cette date, tu la soustrait à la date d'aujourd'hui et si le résultat est in inférieur à deux heures alors interdit de voter
en gros, (squelette du programme en algo)
on va chercher la date liée à cette adresse IP. (appelons la Date_ut)
on demande la date d'aujourd'hui (appelons la date_A)
Si (( Mois(Date_A) - Mois(Date_ut) > 0) OU ( Jour(Date_A) - Jour(Date_ut) > 0) OU ( Heure(Date_A) - Heure(Date_ut)>2))
alors : Cette IP peut voter.
sinon : Cette IP n'a pas le droit de voter.
si tu n'as pas compris, n'hésite pas :-)
Voila, cordialement.
ensuite tu demande cette date, tu la soustrait à la date d'aujourd'hui et si le résultat est in inférieur à deux heures alors interdit de voter
en gros, (squelette du programme en algo)
on va chercher la date liée à cette adresse IP. (appelons la Date_ut)
on demande la date d'aujourd'hui (appelons la date_A)
Si (( Mois(Date_A) - Mois(Date_ut) > 0) OU ( Jour(Date_A) - Jour(Date_ut) > 0) OU ( Heure(Date_A) - Heure(Date_ut)>2))
alors : Cette IP peut voter.
sinon : Cette IP n'a pas le droit de voter.
si tu n'as pas compris, n'hésite pas :-)
Voila, cordialement.
Salut David191212
J'ai bien compris le principe mais comment monter le code car je connais pas ?
Peux-tu me donner un exemple ?
J'ai bien compris le principe mais comment monter le code car je connais pas ?
Peux-tu me donner un exemple ?
J'ai bien compris le principe mais comment monter le code car je connais pas ?
____________________________________________________
Qu'appelle tu monter le code ?
____________________________________________________
Qu'appelle tu monter le code ?
je veux dire ajouter les fonctions du style
$...
voici le code qui permet de voter:
$q = "SELECT COUNT(showcase_id) AS total FROM #__tpshowcase_rating WHERE showcase_id=" . $db->Quote($id) . " AND lastip=" . $db->Quote($ip).;
$db->setQuery($q);
$check = $db->loadResult();
que dois-je ajouter pour permettre aux utilisateurs de voter toutes les 2 heures
$...
voici le code qui permet de voter:
$q = "SELECT COUNT(showcase_id) AS total FROM #__tpshowcase_rating WHERE showcase_id=" . $db->Quote($id) . " AND lastip=" . $db->Quote($ip).;
$db->setQuery($q);
$check = $db->loadResult();
que dois-je ajouter pour permettre aux utilisateurs de voter toutes les 2 heures
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Franchement je te remercie énormément c'est vraiment une aide précieuse. je veux bien patienter c'est même avec plaisir :-)
bien voila un morceau de code
j'avais prévu un système qui remplace le "un peu" par le temps restant en minutes mais je suis assez fatigué... en éspérant que ce code fonctionne et réponde à ta demande ;-)
Si ya un problème ne pas hésiter je suis sur le forum
<?php
$ip=$_SERVER['REMOTE_ADDR'];
//connexion à MySQL et selection de la BDD
$Mysql = mysql_connect("machin.truc.fr", "david191212", "toto"); // identifiants bidons ;-)
$db_sel = mysql_select_db('La_BDD', $Mysql);
if (!$db_sel)
{
die ('Impossible de sélectionner la base de données : ' . mysql_error());
}
//envoi de la requète
$requete = mysql_query('SELECT date_ut from table_test WHERE ip=\''.$ip.'\''); //`
if (!$requete)
{
echo 'Impossible d\'exécuter la requête : ' . mysql_error();
exit;
}
// première fois que cette ip vote
if (mysql_num_rows($requete) == 0) {voter=1;}
else
{
// préparation du résultat
while ($row = mysql_fetch_assoc($requete)) { $timestamp=$row['date_ut'];}
//date à laquelle l'ip a votée pour la dernière fois
$annee_ip=date('Y', $timestamp);
$mois_ip=date('m', $timestamp);
$jour_ip=date('d', $timestamp);
$heure_ip=date('H', $timestamp);
$min_ip=date('i', $timestamp);
$sec_ip=date('s', $timestamp);
// date d'aujourd'hui
$annee=date('Y');
$mois=date('m');
$jour=date('d');
$heure=date('H');
$minute=date('i');
$seconde=date('s');
//$tpss=date('H \h i \m\i\n s \s\e\c\o\n\d\e\s', $timestamp-time()+24*3600);//+10800
// cas ou on a passé plus d'un jour
if (($annee-$annee_ip>0) or ($mois-$mois_ip>0) or ($jour-$jour_ip>0)) {$voter=1;}
// Cas précis
else if (( $heure-$heure_ip>=2) and ($minute-$min_ip>=0))
{
if ($minute-$min_ip>=0)
{
if ($minute-$min_ip>=0)
{
$voter=1;
}
}
}
else {$voter=0;}
}
if ($voter==1)
{
print 'Vous pouvez voter';
// ajoute ici le formulaire de vote, etc
}
else
{
print 'Vous ( ip: '.$_SERVER['REMOTE_ADDR'].') ne pouvez pas voter pour le moment, vous devez
attendre encore un peu avant de pouvoir voter à nouveau';
// ici tu met un message pour dire que l'uttilisateur n'a pas le droit de vote (dictature pendant 2 heures ;-) )
}
?>
j'avais prévu un système qui remplace le "un peu" par le temps restant en minutes mais je suis assez fatigué... en éspérant que ce code fonctionne et réponde à ta demande ;-)
Si ya un problème ne pas hésiter je suis sur le forum
merci pour le code je vais essayer de l'insérer dans la page php de mon module car je suis joomla.
en tout cas encore merci
en tout cas encore merci
Aie en faite j'ai déja une erreur
Parse error: syntax error, unexpected T_VARIABLE, expecting T_FUNCTION
pour cette ligne
$Mysql = mysql_connect("machin.truc.fr", "david191212", "toto");
j'ai essayé de remplacer les guillemets doubles par des simples mais ça fonctionne pas
Parse error: syntax error, unexpected T_VARIABLE, expecting T_FUNCTION
pour cette ligne
$Mysql = mysql_connect("machin.truc.fr", "david191212", "toto");
j'ai essayé de remplacer les guillemets doubles par des simples mais ça fonctionne pas
voici le code contenant la fonction vote de mon fichier php:
<?php
/**
* TemplatePlazza
* TemplatePlazza.com
**/
defined('_JEXEC') or die( 'Restricted access' );
jimport('joomla.application.component.controller');
jimport( 'joomla.application.component.helper' );
jimport('joomla.filesystem.file');
class TPshowcaseController extends JController{
function __construct(){
parent::__construct();
}
function display(){
$view = JRequest::getVar('view', null, 'default', 'cmd');
$layout = JRequest::getVar('layout', null, 'default', 'cmd');
/*
echo $view;
echo $layout;
exit();
*/
if($view == 'list'){
if($layout == 'thumbnail'){
$model = &$this->getModel('Thumbnail');
$viewname = &$this->getView($view, "html");
$viewname->setModel($model, true);
parent::display();
}else if($layout == 'tags'){
$model = &$this->getModel('Thumbnails');
$viewname = &$this->getView($view, "html");
$viewname->setModel($model, true);
$viewname->setLayout('thumbnail_tags');
$viewname->display();
}else{
$model = &$this->getModel('Detail');
$viewname = &$this->getView($view, "html");
$viewname->setModel($model, true);
$viewname->setLayout('thumbnail_detail');
$viewname->display();
}
}else if($view == 'vote'){
$this->vote();
}else{
parent::display();
}
}
function vote(){
global $mainframe;
$db = &JFactory::getDBO();
$user = &JFactory::getUser();
$params = JComponentHelper::getParams( 'com_tpshowcase' );
$uservote = str_replace("/",DS,$params->get('uservote'));
$id = JRequest::getString('id', '', 'request');
$ip = $_SERVER['REMOTE_ADDR'];
$var = "";
if($params->get('uservote') == true || $user->id > 0){
//check ip
$q = "SELECT COUNT(showcase_id) AS total FROM #__tpshowcase_rating WHERE showcase_id=" . $db->Quote($id) . " AND lastip=" . $db->Quote($ip);
$db->setQuery($q);
$check = $db->loadResult();
if($check > 0){
//already vote
$q = "SELECT COUNT(showcase_id) AS total FROM #__tpshowcase_rating WHERE showcase_id=" . $db->Quote($id);
$db->setQuery($q);
$total = $db->loadResult();
/*$var .= "<script language=\"javascript\" type=\"text/javascript\">$$('#tpshowcase_warning span.msg1').setHTML('" . JText::_("TP_YOU_ALREADY_VOTE") . "');</script>";*/
$var .= $total;
}else{
//save
$q = "INSERT INTO #__tpshowcase_rating(showcase_id,total,lastip) VALUES('$id','1','$ip')";
$db->setQuery($q);
$db->Query();
//recalculate
$q = "SELECT COUNT(showcase_id) AS total FROM #__tpshowcase_rating WHERE showcase_id=" . $db->Quote($id);
$db->setQuery($q);
$total = $db->loadResult();
//update
$q = "UPDATE #__tpshowcase_rating SET total='$total' WHERE showcase_id=" . $db->Quote($id);
$db->setQuery($q);
$db->Query();
$var .= "<script language=\"javascript\" type=\"text/javascript\">$$('#tpshowcase_warning').setHTML('" . JText::_("TP_VOTE_SUCCESS") . "'); $('tpshowcase_warning').setStyle('display','');</script>";
$var .= $total;
}
}else{
$q = "SELECT COUNT(showcase_id) AS total FROM #__tpshowcase_rating WHERE showcase_id=" . $db->Quote($id);
$db->setQuery($q);
$total = $db->loadResult();
/*$var .= "<script language=\"javascript\" type=\"text/javascript\">$$('#tpshowcase_warning span.msg3').setHTML('" . JText::_("TP_VOTE_LOGIN") . "');</script>";*/
$var .= $total;
}
echo $var;
exit();
}
J'ai essayé d'y intégrer ton code mais je crois qu'il y a un conflit entre les deux.
Je sais que c'est pas très agréable de lire un code comme ça mais si tu peux encore m'aider se serais super.
<?php
/**
* TemplatePlazza
* TemplatePlazza.com
**/
defined('_JEXEC') or die( 'Restricted access' );
jimport('joomla.application.component.controller');
jimport( 'joomla.application.component.helper' );
jimport('joomla.filesystem.file');
class TPshowcaseController extends JController{
function __construct(){
parent::__construct();
}
function display(){
$view = JRequest::getVar('view', null, 'default', 'cmd');
$layout = JRequest::getVar('layout', null, 'default', 'cmd');
/*
echo $view;
echo $layout;
exit();
*/
if($view == 'list'){
if($layout == 'thumbnail'){
$model = &$this->getModel('Thumbnail');
$viewname = &$this->getView($view, "html");
$viewname->setModel($model, true);
parent::display();
}else if($layout == 'tags'){
$model = &$this->getModel('Thumbnails');
$viewname = &$this->getView($view, "html");
$viewname->setModel($model, true);
$viewname->setLayout('thumbnail_tags');
$viewname->display();
}else{
$model = &$this->getModel('Detail');
$viewname = &$this->getView($view, "html");
$viewname->setModel($model, true);
$viewname->setLayout('thumbnail_detail');
$viewname->display();
}
}else if($view == 'vote'){
$this->vote();
}else{
parent::display();
}
}
function vote(){
global $mainframe;
$db = &JFactory::getDBO();
$user = &JFactory::getUser();
$params = JComponentHelper::getParams( 'com_tpshowcase' );
$uservote = str_replace("/",DS,$params->get('uservote'));
$id = JRequest::getString('id', '', 'request');
$ip = $_SERVER['REMOTE_ADDR'];
$var = "";
if($params->get('uservote') == true || $user->id > 0){
//check ip
$q = "SELECT COUNT(showcase_id) AS total FROM #__tpshowcase_rating WHERE showcase_id=" . $db->Quote($id) . " AND lastip=" . $db->Quote($ip);
$db->setQuery($q);
$check = $db->loadResult();
if($check > 0){
//already vote
$q = "SELECT COUNT(showcase_id) AS total FROM #__tpshowcase_rating WHERE showcase_id=" . $db->Quote($id);
$db->setQuery($q);
$total = $db->loadResult();
/*$var .= "<script language=\"javascript\" type=\"text/javascript\">$$('#tpshowcase_warning span.msg1').setHTML('" . JText::_("TP_YOU_ALREADY_VOTE") . "');</script>";*/
$var .= $total;
}else{
//save
$q = "INSERT INTO #__tpshowcase_rating(showcase_id,total,lastip) VALUES('$id','1','$ip')";
$db->setQuery($q);
$db->Query();
//recalculate
$q = "SELECT COUNT(showcase_id) AS total FROM #__tpshowcase_rating WHERE showcase_id=" . $db->Quote($id);
$db->setQuery($q);
$total = $db->loadResult();
//update
$q = "UPDATE #__tpshowcase_rating SET total='$total' WHERE showcase_id=" . $db->Quote($id);
$db->setQuery($q);
$db->Query();
$var .= "<script language=\"javascript\" type=\"text/javascript\">$$('#tpshowcase_warning').setHTML('" . JText::_("TP_VOTE_SUCCESS") . "'); $('tpshowcase_warning').setStyle('display','');</script>";
$var .= $total;
}
}else{
$q = "SELECT COUNT(showcase_id) AS total FROM #__tpshowcase_rating WHERE showcase_id=" . $db->Quote($id);
$db->setQuery($q);
$total = $db->loadResult();
/*$var .= "<script language=\"javascript\" type=\"text/javascript\">$$('#tpshowcase_warning span.msg3').setHTML('" . JText::_("TP_VOTE_LOGIN") . "');</script>";*/
$var .= $total;
}
echo $var;
exit();
}
J'ai essayé d'y intégrer ton code mais je crois qu'il y a un conflit entre les deux.
Je sais que c'est pas très agréable de lire un code comme ça mais si tu peux encore m'aider se serais super.
$Mysql = mysql_connect("machin.truc.fr", "david191212", "toto");
remplace ce qu'il y a entre les guillemets par tes identifiants personnels pour te connecter à ta bdd ..
at tu essayé mon code seul (en créant la bdd adéquate....)
remplace ce qu'il y a entre les guillemets par tes identifiants personnels pour te connecter à ta bdd ..
at tu essayé mon code seul (en créant la bdd adéquate....)
Salut,
J'avais déjà remplacé ce qu'il y avait entre guillemets par mes identifiants, j'avais bien compris mais je peux pas tester le code seul, j'ai besoin de l'intégrer au module de vote déjà installé sur mon site. Je ne fait pas dans la programmation alors si tu pouvais m'expliquer étape par étape comment modifier la BDD correspondante à mon module et comment y intégrer ton code se serais plus facile pour moi.
merci
J'avais déjà remplacé ce qu'il y avait entre guillemets par mes identifiants, j'avais bien compris mais je peux pas tester le code seul, j'ai besoin de l'intégrer au module de vote déjà installé sur mon site. Je ne fait pas dans la programmation alors si tu pouvais m'expliquer étape par étape comment modifier la BDD correspondante à mon module et comment y intégrer ton code se serais plus facile pour moi.
merci
je veux dire as tu testé mon code tout seul sans rien d'autre ?
mysql_query('SELECT date_ut from table_test WHERE ip=\''.$ip.'\''); //`
pour modifier la bdd tu va dans phpmyadmin (la méthode d'acces dépend de ton hébergeur), tu crée une table que tu appelles table_test, contenant deux champs (de type Text) que tu appelle date_ut et ip
(ceci est seulement une bdd de test, on verra après comment inclure ma table dans ta bdd)
____________________________________________________________
Je pense que d'après ton code il faudra adapter le mien avec la variable $check
Peux tu me montrer comment est organisée ta bdd ?
Ps : ça va être un peu costaud vu que je ne fais pas de joomla...
mysql_query('SELECT date_ut from table_test WHERE ip=\''.$ip.'\''); //`
pour modifier la bdd tu va dans phpmyadmin (la méthode d'acces dépend de ton hébergeur), tu crée une table que tu appelles table_test, contenant deux champs (de type Text) que tu appelle date_ut et ip
(ceci est seulement une bdd de test, on verra après comment inclure ma table dans ta bdd)
____________________________________________________________
Je pense que d'après ton code il faudra adapter le mien avec la variable $check
Peux tu me montrer comment est organisée ta bdd ?
Ps : ça va être un peu costaud vu que je ne fais pas de joomla...