8722 sujets

Développement web côté serveur, CMS

Bonjour je suis débutant en php Smiley decu

j'aimerais créer un compteur de like pour chaque produit comme ce site la :

http://www.vestiairecollective.com/women-accessories/purses-wallets-cases/louis-vuitton/brown-cloth-porte-cles-astropill-639731.shtml

Savez-vous comment ils ont fait?
j'ai déja chercher sur google compteur de clic mais n'ayant pas de connaissance en php, je comprend rien à ce qu'ils expliquent Smiley biggrin . merci d'avance pour vos réponses.
Modifié par haruglory (23 Aug 2013 - 15:55)
Bonjour,

DEBUT DE PARENTHESE
Quelle référence ! Dommage qu'il y est temps de failed load Smiley smile
FIN DE PARENTHESE

Commence par écrire tes règles et ton algorithme çà pourrait t'éclairer :
- est ce que ce like soit disponible
- au public : envisager l'enregistrement en cookie ou sauvegarde des IP
- au inscrits : ID Compte

Ensuite ce n'est qu'un compteur que tu cumules bêtement :
+1 à chaque clic (Ajax conseillé ; cela évitera de recharger toute ta page ; et tu pourras quand même affiché le compteur à jour après le retour de ta requête)
Hello, oui je sais pr la reference mais c'était juste pour montrer le style de script.

Enfaite c'est juste un bete bouton ou lorsqu'on clique sur like ca ajoute un + 1. L"ideal serait avec sauvegarde de l'ip et cookie mais si je ne peux pas le faire c'est pas trop grave.

Merci pour le tips de l'ajax je prends note. Smiley cligne

j'avais trouvé ca sur le net
<script type="text/javascript"><!--
var nbclics = 0;//la variable de nombre de clics
function compteur() {//La fonction qui affiche le nombre de clics
alert("Vous avez cliqué " + nbclics + " fois en 10 secondes !");//On alerte le visiteur
document.body.removeChild(document.getElementById('imgclics'));//on enlève l'image
}
setTimeout('compteur()', 10000);//Au bout de dix secondes on exécute la fonction compteur()
--></script>

<img src="chemin/image.extension" onclick="nbclics++;" id="imgclics"/>

mais ça ne semble pas faire ce que je veux.
Modérateur
Salut,

C'est surtout que ta manière de faire ne risque pas de fonctionner ! Le JS est un langage client. Donc comment le client B peut savoir si A a cliqué ? Smiley cligne

A moins de faire un compteur mito (comme je l'ai fait pour un client). Tu n'as plus qu'à lire le code.

Ce que tu veux faire est faisable via un langage serveur avec/sans un langage client.

En faisant simple :
- lecture de la donnée :
* ouvrir fichier txt (s'il n'existe pas, il sera créé)
* lire la donnée
* retranscrire la donnée en html
* fermer le fichier

- écriture de la donnée :
* ouvrir fichier txt (s'il n'existe pas, il sera créé)
* lire la donnée
* ajouter 1
* écrire la donnée
* retranscrire la donnée en html
* fermer le fichier

Sinon pour corriger ton code (le settimout sert à rien).


window.onload = function(){
	var bouton_compteur = document.getElementById('bouton_compteur');
	var compteur_clique = parseInt(document.getElementById('compteur_clique').textContent); //Attention, IE n'aime pas textContent. Il faut voir avec innerText
	
	if(bouton_compteur){
		bouton_compteur.onclick = function(){
			compteur_clique += 1;
			document.getElementById('compteur_clique').textContent = compteur_clique; //Attention, IE n'aime pas textContent. Il faut voir avec innerText
			return false;
		}
	}
}

* code fait de tête
Modifié par niuxe (23 Aug 2013 - 19:51)
j'ai reussi à faire le compteur en php avec bdd mais ce qui est plus dure c'est l'enregistrement de l'ip et cookie qq'un a déja fait ce genre de script pour verifier l'ip et si oui ne pas comptabiliser le clic
Modifié par haruglory (25 Aug 2013 - 16:58)
Voila mon code php repris d'un thread, il marche mais Je peux liker autant que je veux !!! Smiley decu
J'aimerais pouvoir controler avec l'ip et les cookies mais .... le like augmente



<?php
// On se connecte à la BDD
$base = mysql_connect ("", "", "");
mysql_select_db ("", $base);

$req = mysql_query("SELECT results FROM counters WHERE id=1") or die(mysql_error());
 
if (mysql_num_rows($req) > 0)
{
    $data = mysql_fetch_assoc($req);
    echo "".$data['results']."";   
}
else
{
    echo "0";
}
 
if (isset($_POST['like']))
{
    if ($_SERVER['HTTP_X_FORWARDED_FOR']
    || $_SERVER['HTTP_X_FORWARDED']
    || $_SERVER['HTTP_FORWARDED_FOR']
    || $_SERVER['HTTP_CLIENT_IP']
    || $_SERVER['HTTP_VIA']
    || in_array($_SERVER['REMOTE_PORT'], array(8080,80,6588,8000,3128,553,554))
    || @fsockopen($_SERVER['REMOTE_ADDR'], 80, $errno, $errstr, 5))
	
    {
        exit('Proxy détecté.');
    }
    else
    {
        $precedent = mysql_query('SELECT COUNT(*) AS ip FROM ip WHERE ip=\'' . $_SERVER['REMOTE_ADDR'] . '\'');
        $donnee = mysql_fetch_array($precedent) or die(mysql_error());
 
        if ($donnee['ip'] == 0)
        {
            mysql_query('INSERT INTO ip VALUES(1, \'' . $_SERVER['REMOTE_ADDR'] . '\')');
            mysql_query("UPDATE counters SET results = results+1 WHERE id=1");
        }
        else
        {
            echo 'Déjà voté.';
        }
    }
}
?>

<form method="post" action=""<? echo $data['id']; ?>"">
        <input type="submit" name="like" value="LIKE !"/>
</form>


qqun a une idée?