• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

upgrade danych w sql przez php

Object Storage Arubacloud
0 głosów
177 wizyt
pytanie zadane 14 sierpnia 2015 w SQL, bazy danych przez Maciejf Początkujący (470 p.)

Mam taki oto kod licznika z unikalnymi wejściami na stronę. 

W bazie SQL są 4 kolumny 

Id (z autoinkrementacją)   Data , IP , wpisow

licznik działa tak, że jak wejdzie osoba z ip nie występującym w bazie to dodawany jest nowy wpis natomiast jeśli IP jest już w bazie to sprawdzane jest czy od ostatniego czasu minął ustalony czas w tym przypadku 24h, jeśli minął to dodawany jest nowy rekord, jeśli nie to nie. 

Chciałbym zmodyfikować ten kod w taki sposób, żeby dla danego IP został utworzony 1 rekord i aby kolejne wejście nie powodowało dodawania rekordu, tylko modyfikowało bierzący zwiększając liczbę wejść w 4 kolumnie.

<?php
 
$godziny = 24;  //co ile czasu ma zaliczać jednnemu IP odwiedzinę (w godzinach)
 
include("config.php");  //wczytanie pliku łączenia z bazą danych
 
$ip = $_SERVER["REMOTE_ADDR"];  //pobieranie adresu IP
 
$czas = time();
$cofniety_czas = ($czas-(3600*$godziny));
 
$zapytanie = "SELECT * FROM licznik WHERE IP = '$ip' and data > '$cofniety_czas'";
$zapytanie = mysql_query($zapytanie);
$ile_wpisow = mysql_num_rows($zapytanie);  //sprawdzenie ile w bazie danych jest wpisow z tego IP z zeszlych x godzin
 
if($ile_wpisow<1)  //jeżeli ten IP nie był notowany w ciągu ostatnich x godzin
{
	mysql_query("INSERT INTO licznik SET data='$czas', IP='$ip'");  //dodaj do bazy danych nowy wpis z tym IP
	echo "Dodano nowy wpis!<br />";
}
else  //jeżeli ten IP był notowany w ciągu ostatnich x godzin
{
	echo "Ta strone odwiedzano w ciagu ostatnich ".$godziny." godzin z Twojego IP.<br />";
}
 
$zapytanie2 = "SELECT * FROM licznik";
$zapytanie2 = mysql_query($zapytanie2);
$ile_wyswietlen = mysql_num_rows($zapytanie2);  //ogólna ilość wpisów licznika
 
echo "Unikalnych wejsc na strone: ".$ile_wyswietlen;
 
?>

 

1 odpowiedź

0 głosów
odpowiedź 14 sierpnia 2015 przez Magicone Nałogowiec (45,100 p.)
Starałem objaśnić ci to w najprostszy sposób, jaki jest tylko możliwy. Pzdr! :-)

<?php
	//polaczenie z baza(PDO)
	require('config.php');

	/*
		połączenie to powinno wyglądać mniej więcej tak:
		try{
			$DB = new PDO('mysql:host=localhost;dbname=NAZWA_BAZY', 'LOGIN', 'HASLO');
		}
		catch(PDOException $e){
			echo 'nie mozna polaczyc z baza danych';
			exit();
		}
	*/

	$query = $DB -> prepare('SELECT 1 as ex FROM counter WHERE ip=:IP AND time > (NOW() - INTERVAL 1 DAY)');
	$query -> bindValue(':IP', $_SERVER['REMOTE_ADDR'], PDO::PARAM_STR);

	$query -> execute();

	$ex = false; //domyslnie zakladamy ze nie byl

	foreach($query as $i){
		//petla tutaj oznacza, ze gosc w ciagu ostatnich 24h byl na stronce
		$ex = true; //update zmiennej

	}

	if($ex === false){
		$query = $DB -> prepare('INSERT INTO counter(id, ip, time, wpisow) VALUES(null, :IP, NOW(), "nie mam pojęcia co tu ma być xD")');
		$query -> bindValue(':IP', $_SERVER['REMOTE_ADDR']);
		$query -> execute();
	}


	//pobieramy ilość unikalnych wejść

	$query = $DB -> prepare('SELECT COUNT(*) as c FROM counter WHERE ip = :IP');
	$query -> bindValue(':IP', $_SERVER['REMOTE_ADDR'], PDO::PARAM_STR);
	$query -> execute();

	foreach($query as $i)
		echo 'Unikalnych wejść na stronę: ', ((int)$i['c']);

	$DB = null;

?>

 

komentarz 14 sierpnia 2015 przez Maciejf Początkujący (470 p.)
Sporo tego, postaram się to rozbić na kawałki i ogarnąć.

Dzięki
komentarz 14 sierpnia 2015 przez Magicone Nałogowiec (45,100 p.)
Zapomniałem dodać, opiera się to na innej zasadzie. Przy każdym wejściu co 24h dodawany jest do bazy rekord, a później wyliczana jest ilość tych rekordów. Działa to nieco inaczej niż update i licznik w kolumnie. Jest to lepszy sposób, bo masz informacje kiedy dokładnie dany user "dobił" te wyświetlenia. :)

Podobne pytania

0 głosów
1 odpowiedź 231 wizyt
0 głosów
2 odpowiedzi 1,897 wizyt
0 głosów
1 odpowiedź 421 wizyt

92,624 zapytań

141,482 odpowiedzi

319,824 komentarzy

62,006 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...