Forums Webou.net - Hébergement gratuit et sans publicités avec PHP/MySQL

Programmation => PHP/MySQL - (x)HTML - ... => Discussion démarrée; par: nitro007 le 05 Novembre 2008, 02:58:13



Titre: question
Posté par: nitro007 le 05 Novembre 2008, 02:58:13
Est-ce qu'il faut utiliser les cookies pour limiter le temps par exemple pour ne pas poster deux commentaires en lignes ?
Sinon quoi ?


Titre: Re: question
Posté par: nitro007 le 05 Novembre 2008, 14:35:52
up


Titre: Re: question
Posté par: chrmag le 05 Novembre 2008, 17:11:22
Plustot les sessions ou tracker l'ip, car un cookie peut etre efface ou tout simplement ignore par le client (ce qui est aussi un peu le cas des sessions).
=> Je crois que la meilleure solution est de tracker l'ip.


Titre: Re: question
Posté par: nitro007 le 05 Novembre 2008, 17:17:12
et comment limiter le temps tout en trackant lip ?


Titre: Re: question
Posté par: chrmag le 05 Novembre 2008, 20:57:32
Tu enregistres dans une BD l'ip et la date du dernier post, ensuite avant d'ajouter ton topic, tu testes si la date correspondante a l'ip n'est pas "trop recente".


Titre: Re: question
Posté par: nitro007 le 07 Novembre 2008, 01:11:24
J'utilie timestamp pour ca je pense ?
Et les champs de la base de donnée sont ip, timestamp ?


Titre: Re: question
Posté par: chrmag le 07 Novembre 2008, 15:57:59
C'est une maniere de le faire.


Titre: Re: question
Posté par: clemgaut le 07 Novembre 2008, 20:08:28
Je te conseil aussi de rajouté un champ pseudo où tu enregistres le pseudo car avec l'IP, la personne peut déposer un second commentaire depuis un autre ordinateur.


Titre: Re: question
Posté par: nitro007 le 07 Novembre 2008, 22:19:03
Et comment limiter le temps avec le timestamp ? :-\
merci de vos réponses !


Titre: Re: question
Posté par: clemgaut le 08 Novembre 2008, 11:03:33
tu compares le timestamp actuel avec le timestamp BDD
Code:
<?php
session_start
();
$pseudo=$_SESSION['pseudo'];
$ip=$_SERVER['REMOTE_ADDR'];
$timestamp_actuel=time();
$requete_timestamp_bdd=mysql_query('SELECT timestamp FROM nom_table WHERE ip="'.$ip.'" AND pseudo="'.$pseudo.'"');
$timestamp_bdd=mysql_fetch_array($requete_timestamp_bdd);
$ecart_timestamp=$timestamp_actuel-$timestamp_bdd;
if(
$ecart_timestamp>24*3600)
{
//on enregistre le commentaire
}
else
{
echo 
'Vous avez déjà posté il y a moins de 24h.<br />';
}


Titre: Re: question
Posté par: nitro007 le 08 Novembre 2008, 15:18:57
Le champ il il est en quoi ?


Titre: Re: question
Posté par: clemgaut le 08 Novembre 2008, 15:26:51
si les champs de ta table Tu as ip, timestamp et pseudo
Sinon ce sont quels champs ?


Titre: Re: question
Posté par: nitro007 le 08 Novembre 2008, 21:42:04
erreur dans ton code:
Code:
<?php
mysql_connect
('''''');
mysql_select_db('k');
session_start();
$login=$_COOKIE['login'];
$vote $_POST['vote'];
$id_img $_POST['id_img'];
$ip=$_SERVER['REMOTE_ADDR'];
$timestamp_actuel=time();
$requete_timestamp_bdd=mysql_query('SELECT timestamp FROM vote WHERE ip="'.$ip.'" AND login="'.$login.'"');
$timestamp_bdd=mysql_fetch_array($requete_timestamp_bdd);
$ecart_timestamp=$timestamp_actuel-$timestamp_bdd;
if(
$ecart_timestamp>24*3600)
{
mysql_query("INSERT INTO vote(login, vote, timestamp, ip, id_img) VALUES('".$login."', '".$vote."', '".time()."', '".$ip."', '".$id_img."')") or exit (mysql_error());
}
else
{
echo 
'Vous avez déjà voté il y a moins de 24h.<br />';
}
?>

Fatal error: Unsupported operand types in /home/a3137732/public_html/voteok.php on line 19


Titre: Re: question
Posté par: chrmag le 09 Novembre 2008, 00:34:32
Je crois que juste avant le if, il faut ajouter une ligne:
Code:
<?php
$timestamp_bdd
=mysql_fetch_array($requete_timestamp_bdd);
$timestamp_bdd $timestamp_bdd[0]; //ligne ajoutee
$ecart_timestamp=$timestamp_actuel-$timestamp_bdd;
?>


Car a la derniere ligne on a besoin de deux nombres et pas un tableau, d'ou l'erreur.


Titre: Re: question
Posté par: nitro007 le 09 Novembre 2008, 15:27:47
non c'est pas ca l'erreur, c'est la ligne $ecart..... il fallait remplacer $timestamp_bdd par $timestamp  :P


Titre: Re: question
Posté par: chrmag le 09 Novembre 2008, 15:45:01
non c'est pas ca l'erreur, c'est la ligne $ecart..... il fallait remplacer $timestamp_bdd par $timestamp  :P
Mais le $timestamp n'est defini nulle part  :-\

Mais si je me trompe, si tu ajoutes apres la ligne $ecart... la ligne:
Code:
echo ($ecart_timestamp - $timestamp_actuel);
Deverait afficher toujours 0.


Titre: Re: question
Posté par: nitro007 le 09 Novembre 2008, 15:57:42
Non laiisse faire, j'ai trouvé le problème  :-\


Titre: Re: question
Posté par: clemgaut le 09 Novembre 2008, 16:16:03
Remplaces :
Code:
$ecart_timestamp=$timestamp_actuel-$timestamp_bdd;
par
Code:
$ecart_timestamp=$timestamp_actuel-$timestamp_bdd['nom_du_champ_de_timestamp'];


Titre: Re: question
Posté par: nitro007 le 09 Novembre 2008, 16:40:10
LAISSEZ FAIRE  >:( JE L'AI RÉPARÉ MO-MEME !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
dernière avertisement  :o


Titre: Re: question
Posté par: Micka le 09 Novembre 2008, 17:14:21
Petit rappel à l'ordre :

Nitro007, c'est pas la première fois qu'on te fait des rappels à l'ordre, tu ne remercies personnes, tu montres un comportement agressif et je dirais presque insultant envers beaucoup de ceux qui souhaitent t'aider ou veulent se faire aider, il est peut être temps de changer de comportement et de grandir un peu. Maintenant une question que je me pose, tu fais exprès ou alors tu n'es pas conscient ... On est gentil, sur certains forums tu serais déjà banni temporairement.

C'est pénible d'avoir à te faire ce genre de rappel sans arrêt, pour moi la majuscule est un manque total de respect.
Comme tu as été prévenu à de multitude reprises par une partie du staff, ne vient pas te plaindre qu'une sanction te tombera dessus sans que tu ai été prévenu.