Se connecter / S'enregistrer
Votre question

Probleme avec curtime()

Tags :
  • Php
  • MySQL
  • Programmation
Dernière réponse : dans Programmation
8 Août 2012 14:26:08

Bonjour,

Depuis plusieur jour j'essaye ajouter 2 heure a l'heure courante :

c'est a dire dans ma bd j'ai une table id membre fnum ftime et fdate elle enregistre le clic d'une banniere heure et date.e

Je voudrais que cette banniere disparaise et reapparait toutes les 2 heures.

J'ai trouver pour toutes les 24 heure avec :
  1. <?php
  2. ?>
  3. <center><?php
  4. include('dbconnect.php');
  5. ?>
  6. <html>
  7. <head>
  8. <title>stomypayecash</title>
  9. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  10. </head>
  11.  
  12. <body bgcolor="#009933" text="#ffffff">
  13. <?php
  14. $t=intval($_POST['t']);
  15. $id=intval($_POST['id']);
  16. $sqs=mysql_query("SELECT * FROM tasks_vote WHERE fn=$t") or die(mysql_error());
  17. $arr=mysql_fetch_array($sqs);
  18. extract($arr);
  19. $chk=mysql_query("SELECT * FROM tasks_vote$fcode WHERE fid=$id AND ftime=CURTIME() ");
  20. if(mysql_num_rows($sq)!=0)
  21. {
  22. echo"<font face=verdana color=ffffff><img src=images/non-valide.gif width=40 height=40>vous avez déjà voter sur ce site aujourd'hui , revenez demain .</font><br><br>
  23. <a href='http://stomy-payecash.com/index.php?page=user&st=pointvote' target='_parent'><b><font size=4 color=black>Retour au site</font></b></a><br><br>
  24. ";
  25. }
  26.  
  27. if($fpaytype=='points')
  28. {
  29. $sql=mysql_query("SELECT ftotalvote FROM users WHERE fid=$id") or die(mysql_error());
  30. $arr=mysql_fetch_array($sql);
  31. extract($arr);
  32. $tot=$ftotalvote + $prise;
  33. $sq=mysql_query("UPDATE users SET ftotalvote=$tot WHERE fid=$id") or die(mysql_error());
  34. }
  35. else if($fpaytype=='usd')
  36. {
  37. $sql=mysql_query("SELECT ftmvote FROM users WHERE fid=$id") or die(mysql_error());
  38. $arr=mysql_fetch_array($sql);
  39. extract($arr);
  40. $tot=$ftmvote + $prise;
  41. $sq=mysql_query("UPDATE users SET ftmvote=$tot WHERE fid=$id") or die(mysql_error());
  42. }
  43.  
  44. {
  45. echo"<font face=verdana color=ffffff><img src=images/valide.gif width=40 height=40>Votre compte a été crédité <br>Merci d'avoir voté sur ce site.<br><a href='http://stomy-payecash.com/index.php?page=user&st=pointvote' target='_parent'><b><font size=4 color=black>Retour au site</font></b></a><br><br>
  46. </font>";
  47. $newvisit=$fvisits+1;
  48. mysql_query("UPDATE tasks_vote SET fvisits=$newvisit WHERE fn=$t");
  49. mysql_query("INSERT INTO tasks_vote$fcode (fip, fdate, ftime, fid) VALUES('$REMOTE_ADDR', CURDATE(), CURTIME(), $id)") or die(mysql_error());
  50. mysql_query("INSERT INTO activity(fid, fdate, ftasks) VALUES ($id, now(), 'vote')");
  51. }
  52. else echo"error";
  53. ?>
  54.  
  55. </body>
  56. </html></center>
  57. <?php
  58. ?>

Ce que je comprend pas c'est pourquoi avec ce code sa marche pour 24 h :

$chk=mysql_query("SELECT * FROM tasks_vote$fcode WHERE fid=$id AND fdate=CURDATE() ");

mais avec :

$chk=mysql_query("SELECT * FROM tasks_vote$fcode WHERE fid=$id AND ftime=CURTIME() ");

ou avec :

$chk=mysql_query("SELECT * FROM tasks_vote$fcode WHERE fid=$id AND ftime+7200 > ".time());

sa ne veux pas disparaitre pendant 2h

sinon je viens de tester avec :

$chk=mysql_query("SELECT * FROM tasks_vote$fcode WHERE fid=$id AND ftime=CURTIME()< ftime+7200 ");

elle disparaisse vote limité ensuite --> vous avez deja voté ce site

mais pour que la banniere reapparaisse il faut que je supprime les derniere donner concernant id du membre de n'importe quelle date et heure

avec :

$chk=mysql_query("SELECT * FROM tasks_vote$fcode WHERE fid=$id AND ftime+7200 > ".time());

Elle disparaisse pas mais vote illimiter avec créditage des points --> votre vote a ete pris en compte


Merci d'avance de votre aide

Nico

Autres pages sur : probleme curtime

a b L Programmation
9 Août 2012 03:05:15

bonjour,

humm je ne comprend pas trop comment tu a fais ça !!!

donc le but si j'ai bien compris c'est d'avoir une bannière, quand un utilisateur clic dessus il gagne 1 points et la bannière disparait pendant 2 heure !

si c'est ça je pense que tu te complique un peut la vie (a moins que je n'ai pas compris ton code )

il te faut dans ta bdd une colonne avec l'id de ton utilisateur, son nombre de points, et le timestamp du dernier clic

ensuite c'est tous simple , si le timestamp < time()+7200 alors pas d'affichage ...
l'ors du clic sur la bannière incrémentation du nombre de points et mise a jours tu timestamp ...

avec ce système tu ne garde qu'une seul entrer par utilisateur dans ta bdd .
9 Août 2012 09:28:00

Bonjour,

je te remercie pour ta reponse c'est bon j'ai trouvé mais je garde de coter ta facon qui me servira pour un autre script

Voici une des solution :



Le fait de séparer date et heure dans deux champs distincts ne me parait pas judicieux et est en plus la source de ton problème, puisque tu ne peux pas utiliser date_sub() ou date_add() sur une expression qui ne contient pas de date.
Le fait d'avoir une table propre à chaque "fcode" ne me parait pas judicieux non plus, mais ça n'a par contre cette fois aucune incidence sur ton problème.

Déjà : "Ce que je comprend pas c'est pourquoi avec ce code sa marche pour 24 h :

$chk=mysql_query("SELECT * FROM tasks_vote$fcode WHERE fid=$id AND fdate=CURDATE() ");
"

Cette affirmation est fausse : ça ne fonctionnera pas pour 24h mais pour une date donnée. Par exemple si un utilisateur effectue l'opération à 23h59 et la retente à 00h01, il ne rencontrera aucun problème, car la date du jour ne sera plus la même. Pourtant seulement deux minutes se seront écoulées.

Cette parenthèse étant fermée, voici la solution que je te propose :

- Revoir la structure des tables "tasks_vote" : remplacer les champs fdate et ftime par un champ unique (par exemple "fts") qui sera de type "timestamp". Bonus, tu peux automatiquement définir la valeur par défaut de ce champ sur "current_timestamp". La date et l'heure courantes seront donc automatiquement ajoutées à chaque insertion en laissant ce champ vide.
- Remplacer par conséquent la requête d'insertion pour : INSERT INTO tasks_vote$fcode (fip, fid) VALUES('$REMOTE_ADDR', $id)
- Remplacer le select par le suivant : SELECT * FROM tasks_vote$fcode WHERE fid=$id AND DATE_SUB(NOW(), INTERVAL 2 HOUR) >= ftime

Ça devrait fonctionner...


Message de : flokocha qui a résolue le probleme


Contenus similaires
13 Août 2012 01:30:30

Bonjour


Je croyer que le problème étais résolus .

mais non après avoir re tester , les bannières ne disparaissent pas pendant 2 h apres le clic.

Sa a marcher le jour même mais plus maintenant.


Si vous avez une idée a me proposé j'ai encore chercher pendant plusieurs heure comment faire sur google et je trouve pas de réponse a mon problème

mon dernier test :


$chk=mysql_query("SELECT * FROM tasks_vote$fcode WHERE fid=$id AND date_SUB(NOW(), INTERVAL 120 minute) <= ftime");

if(mysql_num_rows($chk)!=0)
{
echo "<center><font color=\"#cccccc\"> </font><font color=\"green\"></font><br></center></b>";
echo ' Vous avez déja voté !<br />';
}
else
{
echo "<font size=3>Vote N° $fn</font> <br><b><font size=2 color=red>$fsitename</font></b><br><a href=visit_task_vote.php?t=$fn&id=$id onclick='javascript:reloadpage(30)'>$fnote </a><br>Vous gagnez: ";
if ($fpaytype == 'points')
echo "$prise points<br><hr>";
else
if ($fpaytype == 'usd')
echo "\$$prise<br><hr>";
}

}
echo "<b><center>";
if ($start != 0) {
$start = $start - $count;
echo "<a href=index.php?page=$page&st=$st&s=$s&start=$start>Précédent $count</a> | ";
$fl = 1;
}
if ($end < $rows) {
if ($fl)
$start = $start + $count + $count;
else
$start = $start + $count;
echo "<a href=index.php?page=$page&st=$st&s=$s&start=$start>$count Suivant</a>";
}
?>

Mais non toujours pas pourtant sa doit pas être compliquer ,mais défois c'est les choses les moins compliquer les plus dure a trouver lol

Merci d'avance de votre aide

Stomy
a b L Programmation
17 Août 2012 15:55:06

Je te conseille de reprendre ton scripte depuis le début afin d'utilisé un timestamp ...

Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS