(PHP) хранение IP-адреса кликов

После почти 3 дней поиска неисправностей, я должен попросить совета.

A имеет небольшую доску с 4 изображениями и 4 кнопками «лайк». Ранее я сделал так, чтобы количество нажатий каждой кнопки сохранялось в .txt файле. Теперь мне нужно сделать так, чтобы человек мог нажать на определенную кнопку. только однажды.

Это ip.txt, Число слева — это идентификатор кнопки, справа — IP-адрес человека, который нажал эту кнопку.

click-001||127.0.0.1
click-002||

Это очень просто. Мне нужно убедиться, что он сохраняет ip при нажатии на моем компьютере, а затем сохраняет другой IP при нажатии на мой планшет — и останавливается что бы я ни делал дальше. Теперь в течение последних нескольких дней он делал все, кроме этого!

Мой текущий код с isset, Это видит первый IP, но не добавляет второй:

$file2 = 'ip.txt'; // path to text file that stores counts
$fh2 = fopen($file2, 'r+');
$ip_addr = $_SERVER['REMOTE_ADDR'];
$lines2 = '';
while(!feof($fh2)) {
$line2 = trim(fgets($fh2));
if ($line2) {
$line2 = explode('||', $line2);
if(isset($line2[0], $line2[1])) {
$item2 = trim($line2[0]);
if(!empty($item2)) {
if($item2 == $id) {
if(empty($line2[1])) {
$lines2 .= "$item2||$ip_addr\r\n";
file_put_contents($file2, $lines2);
} else {
// this is where it always fails
if (!isset($ip_addr)) {                             $ip_all = $line2[1] . " " . $ip_addr;
$lines2 .= "$item2||$ip_all\r\n";
file_put_contents($file2, $lines2);
} else {
echo "lul";
}
}
}
}
}
}
}
fclose($fh2);

Я также попробовал это с in_array функция:

$ip_all = array($line2[1]);
if (!in_array($ip_addr, $ip_all)) {
array_push($ip_all, ',' , $ip_addr);
$ip_fin = implode($ip_all);
$lines2 .= "$item2||$ip_fin\r\n";
file_put_contents($file2, $lines2);

^ Этот также видит первый IP и добавляет второй, но затем не может определить, существует ли уже IP-адрес, и просто продолжает добавлять копии, когда я нажимаю.

Это жестоко. Что я делаю не так и есть ли более простой способ?

0

Решение

Используйте базу данных MySQL для достижения этой цели.
Использование текстового файла супер неэффективно и может вызвать конфликты, когда нескольким пользователям нравится одновременно!

Вставляйте IP-адрес в базу данных каждый раз, когда пользователь нажимает кнопку «Нравится», а затем используйте запрос выбора, чтобы определить, понравился ли этот IP-адрес изображению ранее.

Я не рекомендую использовать только IP tho, так как некоторые интернет-провайдеры дают динамический IP, который меняет IP (публичный IP) адрес каждые несколько секунд.
Используйте куки для хранения уникальных куки для пользователя (если они не вошли в систему) или просто попросите пользователя войти в систему, прежде чем голосовать!

Информация о MySQL Insert и Select находится повсюду в Google.
Вот один из них: https://www.w3schools.com/sql/

1

Другие решения

лучший метод: использовать базу данных или использовать XML (XML имеет очень полезную библиотеку)


метод текстового файла:

получить файл и отредактировать …

$id = "...";
$ip="...";
$file2 = file('ip.txt');


$file2 = array_map(
function($current_line) use ($id,$ip) {
$current_line = explode('||', $current_line);
if($current_line[0] == $id){
$current_line[]=$ip;
}
return join("||",$current_line);
},$file2
);

file_put_contents('ip.txt', implode('\n', $file2));
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector