2010-10-13 5 views
1

Bonjour, alors je viens d'installer ce sondage de base, je me suis inspiré de quelque chose que j'ai trouvé là-bas, et c'est juste un sondage ajax de base qui agite les résultats dans un fichier texte. Bien que je me demande, puisque je ne veux pas que l'utilisateur clique simplement en masse pour profiter des résultats, j'ai pensé à ajouter un nouveau fichier texte qui pourrait simplement enregistrer l'IP, un sur chaque ligne, puis vérifie s'il est déjà connecté, si oui, affiche les résultats, sinon affiche le sondage.Petite aide pour enregistrer dans le fichier txt

Mes lignes de code pour enregistrer le résultat sont:

<?php 
$vote = $_REQUEST['vote']; 

$filename = "votes.txt"; 
$content = file($filename); 

$array = explode("-", $content[0]); 
$yes = $array[0]; 
$no = $array[1]; 

if ($vote == 0) 
    { 
    $yes = $yes + 1; 
    } 
if ($vote == 1) 
    { 
    $no = $no + 1; 
    } 

$insert = $yes."-".$no; 
$fp = fopen($filename,"w"); 
fputs($fp,$insert); 
fclose($fp); 
?> 

J'aimerais savoir comment je pourrais vérifier les adresses IP, de la même manière, il fait essentiellement.

Et je ne suis pas intéressé par la base de données, même pour des mesures de sécurité, je vais bien avec ce que j'ai.

Merci à toute aide!

+1

base de données ne sera pas pour la sécurité, c'est à cause de la vitesse. imaginez que vous avez un sondage où 1000 personnes ont voté. donc vous avez 1000 ip dans votre fichier. donc pour chaque nouveau vote, vous devez ouvrir votre fichier, le lire, et en lisant vous devez comparer chaque ip avec celui donné. cela va grandir assez vite. – ITroubs

+0

Je pense que vous avez besoin de mordre la balle et adopter une solution basée sur la base de données à ce problème; Sinon, vous trier ou rechercher ce fichier texte pour potentiellement des milliers d'entrées - quelque chose qu'une base de données est optimisée pour faire mieux que vous ne pourriez jamais faire. (Je n'essaie pas d'écraser tes rêves, d'être juste réel). – Gav

+0

vous n'avez pas besoin de préfixer la question avec [PHP], car Stack Overflow a des tags. – systemovich

Répondre

2

plus simple est d'écrire des données dans le fichier est

file_put_contents($filename, $data) 

et de lire les données à partir du fichier

file_get_contents($filename); 

Pour obtenir l'adresse IP de l'utilisateur $ _SERVER [ 'REMOTE_ADDR']

Voir php manual for file_put_contents for more information et file_get_contents

H avant est un exemple de code

<?php 

// File path 
$file = 'votedips.txt'; 

// Get User's IP Address 
$ip = $_SERVER['REMOTE_ADDR']; 

// Get data from file (if it exists) or initialize to empty string 
$votedIps = file_exists($file) ? file_get_contents($file) : ''; 

// 
$ips = explode("\n", $votedIps); 
if (array_search($ip, $ips)) { 
    // USER VOTED 
} else { 
    $ips[] = $ip; 
} 

// Write data to file 
$data = implode("\n", $ips); 
file_put_contents($file, $data); 

?> 
+0

Très bien essayer, mais je pourrais aussi essayer la méthode des cookies, quelle serait la meilleure façon de le faire? –

+0

il y a un problème avec le file_get_contents ($ file, null, $ data); J'ai essayé de le regarder, peut-être son implode qui n'est pas utilisé correctement, ou même les ips $ mais je ne pouvais pas trouver, c'est le reportage, file_get_contents() attend le paramètre 3 pour être ressource –

+0

désolé mon pote, j'avais un idiot erreur dans le code ... J'ai corrigé et mis à jour le code. Il est entièrement fonctionnel en ce moment. Si vous voulez utiliser cookie jeter un oeil à la documentation php pour 'setcookie ($ nom, $ valeur, $ expire)' http://us.php.net/manual/fr/function.setcookie.php – Alex

0

Vous pouvez utiliser file_get_contents pour enregistrer le contenu du fichier dans une variable puis utilisez la fonction strpos pour vérifier si l'IP existe dans cette variable.
Par exemple:

$ipfile=file_get_contents('ip.txt'); 
if (strpos($ipfile, $_SERVER['REMOTE_ADDR'])!==FALSE) // show the results 
else // show the poll 
+0

Merci beaucoup pour cela, je pourrais vérifier la solution de cookie, car il est vrai qu'il pourrait commencer à prendre beaucoup de temps à charger. Je vais garder cette méthode à l'esprit, merci encore –

2

Pour arrêter plusieurs votes, je mis un cookie une fois qu'un utilisateur a voté. Si l'utilisateur recharge la page avec le formulaire de vote et qu'il a un cookie, vous pouvez afficher uniquement les résultats, ou un "Vous avez déjà voté". message. Notez que cela n'empêchera pas les gens rusés de voter à double voix - tout ce qu'ils auraient à faire serait de retirer le cookie sauvegardé, et ils pourraient re-voter. Gardez à l'esprit que les adresses IP peuvent être partagées afin que votre idée de stocker des adresses IP puisse se retourner - les personnes sur une adresse IP partagée ne pourront pas voter, car votre système aura enregistré un vote précédent de quelqu'un à la même adresse IP.

+0

Vous avez raison à propos de l'IP, mais l'idée sur les cookies n'est pas vraiment bonne. Je le sais par expérience: j'ai déjà créé un sondage et utilisé des cookies pour empêcher les utilisateurs de voter deux fois. Ce fut un échec car de nombreux utilisateurs ont juste désactivé leur support de cookies pour mon domaine et ils ont voté autant de fois qu'ils le voulaient. – rhino

+0

bien, je pourrais essayer cela en fait, pourrait économiser du temps de chargement, merci! –

+0

il devrait aussi y avoir une possebilité pour vérifier si quelqu'un a cookie activé ou non et si ce n'est pas simplement interdit de prendre le sondage – ITroubs

0

Soyez prudent avec le stockage des adresses IP dans un fichier texte, puis en utilisant file_get_contents() et des fonctions similaires pour le chargement des données/parsage. Dans le pire des cas, en supposant que toutes les adresses IP possibles utilisaient votre système pour voter, vous finiriez avec un fichier texte de plusieurs gigaoctets, et vous dépasseriez très vite memory_limit de PHP.