vote/j'aime pendant une durée determiné

vpietrob
Invité n'ayant pas de compte PHPfrance

19 févr. 2012, 00:28

Bonjour, bon voila je réunis plusieurs poste que j'ai crée pour en faire un ici.
Voilà enfait j'ai crée un système de vote et de "like".
Mais vous vous en douté le membre ne peux pas voté ni "liké" quand il veut

Donc enfait j'aimerais bloquer les "like" à 1 seul clic par ip et les votes par 1 seul clic par membre par jour.

Après plusieur jour de recherche je ne parviens même pas à enregistrer la date d'un vote.

Mais ici nous allons nous intéresser en premier en like, les votes devrais s'en suivre.
Bref, j'aimerais bloquer le like a 1 seul fois par ip ( puisque les non membres peuvent "liker" les news...)

voici le code actuel des likes :

<p><a href="#" title="New" class="jaime" >J’aime</a><p>


pas besoin du javascript ici, et voici l'exectution php :
<?php

// Traitement des POST
if(!isset($_POST['cle'])) {
	header('Location: ./');
	die('-1');
}
$cle = get_magic_quotes_gpc() ? $_POST['cle'] : addslashes($_POST['cle']);
$vote = isset($_POST['vote']);
$derniere_ip = isset($_SERVER['REMOTE_ADDR']) ? (int)ip2long($_SERVER['REMOTE_ADDR']) : -1;


// Connexion a la DB
$mysqli = new mysqli('mysql.alwaysdata.com', '*****', '03/06/1994', '*****');
if($mysqli->connect_error) {
	die('Erreur de connexion (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error);
}


// Traitement en DB
$jaime_votes = 0;
if($result = $mysqli->query("SELECT * FROM jaimes WHERE cle = '{$cle}' LIMIT 1 ")) {
	if($result->num_rows) {
		// Mise a jour
		$obj = $result->fetch_object();
		$jaime_votes = (int)$obj->votes;
		if($vote) {
//		if($vote && $obj->derniere_ip != $derniere_ip) {
			$jaime_votes++;
			$mysqli->query(
				"UPDATE jaimes SET
					votes = votes + 1 ,
					dernier_vote = NOW() , 
					derniere_ip = {$derniere_ip}
				WHERE cle = '{$cle}' "
				);
		}
	} else {
		// Inserer
		if($vote) {
			$jaime_votes++;
			$mysqli->query(
				"INSERT INTO jaimes SET
					cle = '{$cle}' ,
					votes = 1 ,
					dernier_vote = NOW() ,
					derniere_ip = {$derniere_ip} "
				);
		}
	}
}


// Afficher de retour
echo $jaime_votes;


?>

Donc comme vous pouvez le voir, dans la base de donné j'enregistre le nom donné au like (la cle), l'id, la date du dernier like et du dernier ip.

Mais voila je ne sais pas comment bloquer les ip, je doit les enregistrer dans la base de donné? ça ferais bcp! sachant que chaque like utilise le même php et javascript, il ne faut pas bloquer l'ip pour tout les like mais que pour celui clicer par l'utilisateur.

Bref, quelqu'un serrait cappable de m'aidé? merci

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

21 févr. 2012, 10:21

salut,

Qu'elle est la structure de ta table ?

ton système fonctionne actuellement ?
parce que la sans javascript j'ai un très très gros doute étant donné qu'au final ton lien ne fait rien :)

première info : utiliser l'ip n'est pas forcément une bonne idée étant donnée que :
- Les IP ne sont pas fixe (vue qu'il n'y en a pas assez pour le nombre machine sur le réseau)
- Plusieurs personnes peuvent être derrière une même IP (cas des proxy en entreprise, université, on même en famille :) ).

c'est un système pouvant éviter certain vote mais pas de te faire pourrir par le mec qui le souhaite :mrgreen:

la base du truc : la table
idvote : clef primaire auto increment
idTrucPourLequelOnVote : clef étrangère qui fait référence au à la chose a laquelle on ajoute un "j'aime" (des news c'est ça ?).
idMembre : clef étrangère qui fait référence au membre votant doit être nullable si tu veux que les gens non connecté puisse voter
ip : varchar 32(il me semble, s'il y a gestion de l'ip V6).
laDateduVote champ de type Date (je rappel que date est un mo réservé et qu'il n'est pas "intelligent" et pratique de nommer un champ "date" ;) )
lorsque l'on utilise le vote il te faut l'idTrucPourLequelOnVote
tu fait une première requête qui regarde le couple ip / date existe dans la table (select count(*) from table where ip = and laDateduVote=now();) si le résultat du count est différent de zéro => rejet du vote.
si égale zéro : insertion des données requise dans la table (s'il ne s'agit pas d'un membre connecté utilise null pour la colonne idmembre).

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

vpietrob2
Invité n'ayant pas de compte PHPfrance

08 mars 2012, 18:07

bonjour, un modo pourrais supprimer le poste svp?

C'est moi vpietrob qui ai cree le sujet mais je n'arrive pas a contacter l'admin.
Je souhaite supprimer le poste puisque j'ai perdu tout mes identifiant de ce compte et j'ai remarquer que les identifiants de connexion a mon compte ftp est inscri a mon poste précédent. Help merci !!!!!!!!!!!!!!!!!!!

Vpietrob
Invité n'ayant pas de compte PHPfrance

08 mars 2012, 18:17

Les mdp ne sont plus les même mais je preferes le changer merci de supprimer ce poste :) !

vpietrob
Invité n'ayant pas de compte PHPfrance

10 mars 2012, 11:59

Que fond les moderateurs???? svp supprimer ce poste!!!!!! je ne veux pas flooder!!

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

10 mars 2012, 12:06

À vue de nez ils font ce qu'ils peuvent, si le sujet a était signalé il le prendront en compte.

Il n'y a que des infos de connexion au sgbd (à priori déjà modifiées) si ton hébergeur fait comme beaucoup de toute façon il ne sera pas accessible a partir d'emplacement non déclaré (cas classique de "sécurisation" ;) )

C'est aussi à cela que servent les comptes ;)

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

vpietrob
Invité n'ayant pas de compte PHPfrance

10 mars 2012, 12:31

Ok merci tu me rassure, mais le problème c'est que mon site subit actuelement une attaque ^^ il y a une virus en javascript qui s'est intégré au pages index.php.

Donc je prefere jouer la sécurité tu comprends, merci

Petit nouveau ! | 2 Messages

14 mars 2012, 18:53

Que font les modérateurs svp?!?!

Vpietrob2
Invité n'ayant pas de compte PHPfrance

20 mars 2012, 12:58

Mais il y Encore des modérateurs????? MAis que font il srx??? Je les ai même contacter en pv...

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

20 mars 2012, 18:35

Si tu a du JS integré dans tes pages faut l'enlever à la main hein aucune personne de phpfrance ne pourra le faire à ta place !

Si tu a changer tes accès tu ne risque plus rien mais faut faire le ménage.

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

Petit nouveau ! | 2 Messages

20 mars 2012, 19:48

Merci de m'aidé en tout cas, j'ai reussi a resoudre mon problème, du moin presque ;)

Mais le problème sont qu'il y a des infos sur des donné de mon site ici, je ne vois pas pourquoi tu parle du js ou autre :)