IP timer via database

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Joshua

Joshua

05/02/2008 23:47:00
Quote Anchor link
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

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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();
  }


?>


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
 
PHP hulp

PHP hulp

05/05/2024 21:15:08
 
Hipska BE

Hipska BE

06/02/2008 00:08:00
Quote Anchor link
bekijk de datum en tijdsfuncties in de handleiding van je database eens...
 
Joshua

Joshua

06/02/2008 00:12:00
Quote Anchor link
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?
Gewijzigd op 01/01/1970 01:00:00 door Joshua
 
- SanThe -

- SanThe -

06/02/2008 00:35:00
Quote Anchor link
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.
 
Frank -

Frank -

06/02/2008 01:37:00
Quote Anchor link
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.
 
Joren de Wit

Joren de Wit

06/02/2008 08:23:00
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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...';
}

?>
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.