IP timer via database
Ik heb een code 'verzonnen' waarbij het ipadres van een bezoeker wordt weggeschreven naar een database wanneer hij een bericht stuurt maar ook de tijd dat hij het bericht heeft verzonden.
Nu heb ik dit
Wat ik dus wil bereiken met deze code is dat er gezocht wordt naar een IPadres in de database die hetzelfde is als het IP waarmee er verzonden wordt en dat hij de daarbij horende tijd pakt. Daarna kijkt hij of de huidige tijd - de opgezochte tijd kleiner is dan twee etc etc.
Het probleem is een beetje als volgt : Het werkt niet :p
Nu heb ik dit
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
$date = date("Gi");
$ipadres = $_SERVER['REMOTE_ADDR'];
$result = mysql_query("SELECT tijd FROM IP WHERE ipadres LIKE ".$ipadres." ");
if ( $date - $result['tijd'] < 2) {
echo "Je spamt";
exit();
}
?>
$date = date("Gi");
$ipadres = $_SERVER['REMOTE_ADDR'];
$result = mysql_query("SELECT tijd FROM IP WHERE ipadres LIKE ".$ipadres." ");
if ( $date - $result['tijd'] < 2) {
echo "Je spamt";
exit();
}
?>
Wat ik dus wil bereiken met deze code is dat er gezocht wordt naar een IPadres in de database die hetzelfde is als het IP waarmee er verzonden wordt en dat hij de daarbij horende tijd pakt. Daarna kijkt hij of de huidige tijd - de opgezochte tijd kleiner is dan twee etc etc.
Het probleem is een beetje als volgt : Het werkt niet :p
Gewijzigd op 01/01/1970 01:00:00 door Joshua
bekijk de datum en tijdsfuncties in de handleiding van je database eens...
In mijn database wordt de tijd opgeslagen als TIME. Moet zeker niet?
Als ik kijk hoe het staat in de db staat er : 00:00:18 voor 0:18 (kwart voor 1)
en wanneer ik dan de date("Gi") min de dbtijd doe kan het denk ik niet goed gaan?
Als ik kijk hoe het staat in de db staat er : 00:00:18 voor 0:18 (kwart voor 1)
en wanneer ik dan de date("Gi") min de dbtijd doe kan het denk ik niet goed gaan?
Gewijzigd op 01/01/1970 01:00:00 door Joshua
Gebruik DATETIME.
WHERE ipadres LIKE ......
Een ip-adres is een vaste waarde, die zoek je niet met LIKE. En gebruik enkele quotes in je query.
WHERE ipadres LIKE ......
Een ip-adres is een vaste waarde, die zoek je niet met LIKE. En gebruik enkele quotes in je query.
Een LIKE zonder % is altijd fout, daar valt niks aan te LIKE-en. Daarnaast probeer je LIKE altijd te voorkomen, het is dodelijk voor de snelheid van je database. Zeker wanneer je begint met een %, vergeet het idee van snelheid maar.
Je zou dit op een hele andere manier aan kunnen pakken. Door allereerst eens de TIME kolom zoals gezegd te vervangen door DATETIME.
Vervolgens ga je bij het wegschrijven van een nieuw record naar de database de SQL functie NOW() gebruiken om de huidige datumtijdstempel in het juiste formaat in te voeren.
Bij het controleren of iemand spamt gebruik je tenslotte de database om te checkeck of er records voorkomen die niet ouder zijn dan 2 minuten:
Vervolgens ga je bij het wegschrijven van een nieuw record naar de database de SQL functie NOW() gebruiken om de huidige datumtijdstempel in het juiste formaat in te voeren.
Bij het controleren of iemand spamt gebruik je tenslotte de database om te checkeck of er records voorkomen die niet ouder zijn dan 2 minuten:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
$sql = "
SELECT tijd
FROM ip
WHERE ipadres = '".$ipadres."'
AND time > NOW() - INTERVAL 2 MINUTE
";
if(!$res = mysql_query($sql))
{
trigger_error(mysql_error().'<br/>In query: '.$sql);
}
elseif(mysql_num_rows($res) > 0)
{
echo 'Je spamt! Je moet 2 minuten wachten...';
}
?>
$sql = "
SELECT tijd
FROM ip
WHERE ipadres = '".$ipadres."'
AND time > NOW() - INTERVAL 2 MINUTE
";
if(!$res = mysql_query($sql))
{
trigger_error(mysql_error().'<br/>In query: '.$sql);
}
elseif(mysql_num_rows($res) > 0)
{
echo 'Je spamt! Je moet 2 minuten wachten...';
}
?>




