[SQL/PHP] Interval van 2 uur tussen 2 berichten van ip

Pagina: 1
Acties:
  • 43 views sinds 30-01-2008

  • ralphje
  • Registratie: December 2004
  • Laatst online: 12:20

ralphje

Hey, it's me!

Topicstarter
Ik ben bezig met een shoutbox. Het lukt me al aardig, maar ik stuit op een probleem: Onderstaande code geeft een fout:

PHP:
1
2
3
4
5
6
7
8
9
10
include "config.php"; 
$query= "SELECT * FROM Shoutbox WHERE ip='.$REMOTE_ADDR.' and date_format(timediff(datum2,now()),'%H')<2"; 
$result = mysql_query($query) or die (mysql_error()); 
if(mysql_num_rows($result)<1){  
    // Doe niets; Script gaat door
}else{
   echo '<META HTTP-EQUIV="Refresh" CONTENT="0;URL=?show=shoutbox/shout&error=0"> '; 
exit;
};
...
Het resultaat is:
You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(datum2,now()),'%H')<2' at line 1
Hoe los ik dit op? De bedoeling is dus dat er een interval van 2 uur tussen 2 berichten van hetzelfde ip-adres zit. De kolom van de datum is datum2 en die zit in het formaat YYYY-MM-DD HH:MM:SS.

[ Voor 39% gewijzigd door ralphje op 29-01-2005 22:03 ]

Geniet, maar surf met mate!


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Laat me raden: je hebt een versie van MySQL lager dan 4.1.1. :)
Uit de documentatie:
TIMEDIFF() was added in MySQL 4.1.1.
Je kan ook met DATE_ADD 2 uur optellen bij de tijd in de database, en daarna kijken of de resulterende tijd hoger is dan NOW(). :)

[ Voor 34% gewijzigd door NMe op 29-01-2005 22:48 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • ralphje
  • Registratie: December 2004
  • Laatst online: 12:20

ralphje

Hey, it's me!

Topicstarter
mm je hebt gelijk, ik heb 4.0.23-standard... hoe voeg ik die code toe dan?? ik ben een beetje beginner namelijk ;)

Geniet, maar surf met mate!


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Zie de documentatie. Die is, zeker in het geval van DATE_ADD, behoorlijk duidelijk/uitgebreid. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • ralphje
  • Registratie: December 2004
  • Laatst online: 12:20

ralphje

Hey, it's me!

Topicstarter
ik heb er nu dit van gemaakt:

PHP:
1
2
3
4
5
6
7
8
$query= "SELECT * FROM Shoutbox WHERE ip='.$REMOTE_ADDR.' and datum2<=DATE_ADD(now(), INTERVAL 2 HOUR)"; 
$result = mysql_query($query) or die (mysql_error()); 
if(mysql_num_rows($result)<1){  
  // Doe niets; Script gaat door
}else{ 
 echo '<META HTTP-EQUIV="Refresh" CONTENT="0;URL=?show=shoutbox/shout&error=0"> '; 
 exit;
};


maar het script gaat ten allen tijde door? hoe kan dit??

Geniet, maar surf met mate!


Verwijderd

-sorry verkeerd gelezen-

[ Voor 89% gewijzigd door Verwijderd op 30-01-2005 14:21 ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Datum2 is altijd kleiner dan het moment van nu + 2 uur... ;)

Verder is je if niet netjes geschreven. Je kunt ook dingen ontkennen:
PHP:
1
2
3
4
5
6
$query= "SELECT * FROM Shoutbox WHERE ip='.$REMOTE_ADDR.' and NOW()<=DATE_ADD(datum2, INTERVAL 2 HOUR)"; 
$result = mysql_query($query) or die (mysql_error()); 
if(mysql_num_rows($result) >= 1){  
  echo '<META HTTP-EQUIV="Refresh" CONTENT="0;URL=?show=shoutbox/shout&error=0"> '; 
  exit;
}

Waarom heb je eigenlijk die punten om $REMOTE_ADDR? En waarom gebruik je niet de superglobal die ervoor bedoeld is? ($_SERVER['REMOTE_ADDR']) Verder zou ik zelf liever een location header versturen, dan een meta refresh nemen.

[ Voor 8% gewijzigd door NMe op 30-01-2005 14:23 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Alex
  • Registratie: Juli 2001
  • Laatst online: 28-02 19:26
ralphje schreef op zondag 30 januari 2005 @ 13:39:
ik heb er nu dit van gemaakt:

PHP:
1
2
3
4
5
6
7
8
$query= "SELECT * FROM Shoutbox WHERE ip='.$REMOTE_ADDR.' and datum2<=DATE_ADD(now(), INTERVAL 2 HOUR)"; 
$result = mysql_query($query) or die (mysql_error()); 
if(mysql_num_rows($result)<1){  
  // Doe niets; Script gaat door
}else{ 
 echo '<META HTTP-EQUIV="Refresh" CONTENT="0;URL=?show=shoutbox/shout&error=0"> '; 
 exit;
};


maar het script gaat ten allen tijde door? hoe kan dit??
Gave code :P
PHP:
1
2
3
4
5
6
if(mysql_num_rows($result)<1){  
  // Doe niets; Script gaat door
}else{ 
 echo '<META HTTP-EQUIV="Refresh" CONTENT="0;URL=?show=shoutbox/shout&error=0"> '; 
 exit;
}

Je gaat een if plaatsen voor iets wat je niet nodig hebt.
Handiger is het dan om ff in de manual te checken wat erin staat wat mysql_num_rows terug geeft:
Description
int mysql_num_rows ( resource result )
PHP:
1
2
3
4
if(mysql_num_rows($result) < 1){  
 echo '<META HTTP-EQUIV="Refresh" CONTENT="0;URL=?show=shoutbox/shout&error=0"> '; 
 exit;
};

Deze post is bestemd voor hen die een tegenwoordige tijd kunnen onderscheiden van een toekomstige halfvoorwaardelijke bepaalde subinverte plagiale aanvoegend intentioneel verleden tijd.
- Giphart


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Alex de Groot schreef op zondag 30 januari 2005 @ 14:28:
Gave code :P
8<
PHP:
1
2
3
4
if(mysql_num_rows($result) < 1){  
 echo '<META HTTP-EQUIV="Refresh" CONTENT="0;URL=?show=shoutbox/shout&error=0"> '; 
 exit;
};
Gave code. :P Alleen doe je nu precies het omgekeerde van wat TS wil. :P

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • ralphje
  • Registratie: December 2004
  • Laatst online: 12:20

ralphje

Hey, it's me!

Topicstarter
PHP:
1
2
3
4
5
6
$query= "SELECT * FROM Shoutbox WHERE ip='.$REMOTE_ADDR.' and NOW()<=DATE_ADD(datum2, INTERVAL 2 HOUR)";  
$result = mysql_query($query) or die (mysql_error());  
if(mysql_num_rows($result) >= 1){   
  echo '<META HTTP-EQUIV="Refresh" CONTENT="0;URL=?show=shoutbox/shout&error=0"> ';  
  exit; 
}


moet dit nu werken? dat is niet het geval, hij gaat gewoon door :'(

Geniet, maar surf met mate!


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Heb je de rest van mijn post gelezen?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • ralphje
  • Registratie: December 2004
  • Laatst online: 12:20

ralphje

Hey, it's me!

Topicstarter
-NMe- schreef op zondag 30 januari 2005 @ 14:56:
Heb je de rest van mijn post gelezen?
Wat bedoel je: ip of header? ip werkt niet, geeft
Parse error: parse error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /home/ralphjen/public_html/shoutbox/tonen.php on line 21
en header maakt niet uit. dus ik snap je bedoeling niet :|

Geniet, maar surf met mate!


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

ralphje schreef op zondag 30 januari 2005 @ 15:11:
[...]

Wat bedoel je: ip of header? ip werkt niet, geeft
[...]
en header maakt niet uit. dus ik snap je bedoeling niet :|
Ik zeg in mijn hele post niets over ip's? En ik doelde op de punten om $REMOTE_ADDR heen. Die horen daar niet volgens mij? :?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

PHP:
1
2
 echo '<META HTTP-EQUIV="Refresh" CONTENT="0;URL=?show=shoutbox/shout&error=0">';  
  exit;
Dit is natuurlijk onzinnig als je PHP gebruikt.

PHP:
1
2
header('Location: ' . $_SERVER['PHP_SELF'] . '?show=shoutbox/shou&amp;error=0');
exit;

  • ralphje
  • Registratie: December 2004
  • Laatst online: 12:20

ralphje

Hey, it's me!

Topicstarter
Verwijderd schreef op zondag 30 januari 2005 @ 15:19:
[...]

Dit is natuurlijk onzinnig als je PHP gebruikt.

PHP:
1
2
header('Location: ' . $_SERVER['PHP_SELF'] . '?show=shoutbox/shou&amp;error=0');
exit;
Allemaal bedankt, allen bovenstaande werkt niet:
Warning: Cannot modify header information - headers already sent by (output started at /home/ralphjen/public_html/index.php:6) in /home/ralphjen/public_html/shoutbox/toevoegen.php on line 16

Geniet, maar surf met mate!


  • ralphje
  • Registratie: December 2004
  • Laatst online: 12:20

ralphje

Hey, it's me!

Topicstarter
BTW, ik wil alleen het laatste bericht controleren. Hoe moet dat, onderstaande wil niet:

PHP:
1
$query= "SELECT * FROM Shoutbox WHERE ip='$REMOTE_ADDR' and NOW()<=DATE_ADD(datum2, INTERVAL 1 HOUR) ORDER by id DESC LIMIT 0,1";

Geniet, maar surf met mate!


  • ludo
  • Registratie: Oktober 2000
  • Laatst online: 01-03 18:17
ralphje schreef op zondag 30 januari 2005 @ 15:47:
BTW, ik wil alleen het laatste bericht controleren. Hoe moet dat, onderstaande wil niet:

PHP:
1
$query= "SELECT * FROM Shoutbox WHERE ip='$REMOTE_ADDR' and NOW()<=DATE_ADD(datum2, INTERVAL 1 HOUR) ORDER by id DESC LIMIT 0,1";
Als je alleen het laatste bericht wilt waarom doe je dan moeilijk met die datum :? En niet gewoon zo:
PHP:
1
$query = "SELECT * FROM Shoutbox WHERE ip='" . $_SERVER['REMOTE_ADDR'] . "' ORDER by id DESC LIMIT 0,1"

[ Voor 10% gewijzigd door ludo op 30-01-2005 15:58 ]


  • ralphje
  • Registratie: December 2004
  • Laatst online: 12:20

ralphje

Hey, it's me!

Topicstarter
De reden is:

- Ik wil niet dat men kan spammen
- Ik wil wel dat er gereageerd kan worden op een vorig bericht

Want als iemand wil spammen, dan doet ie dat meestal vanaf 1 computer, en niet vanaf 2 (netwerken). En als ik toch word gespamd, dan zal ik de datum er wel weer uitslopen :P. Maar helaas werkt het nog niet optimaal...

Het probleem is: Het werkt niet helemaal... Hij controleert volgens mij niet het laatste bericht :'(

[ Voor 14% gewijzigd door ralphje op 30-01-2005 16:22 ]

Geniet, maar surf met mate!


  • ralphje
  • Registratie: December 2004
  • Laatst online: 12:20

ralphje

Hey, it's me!

Topicstarter
Dus: Kan iemand mij helpen zodat hij wel alleen het laatste bericht controleert?
Modbreak:Mensen zitten niet 24 uur per dag op F5 te drukken om topics te beantwoorden :) Je topic opnieuw onder de aandacht brengen (kicken) staan we dan ook niet toe :) Oftewel: wacht rustig af tot iemand een reactie geeft. Reageert er niemand binnen 24 uur, dan kan je jouw topic een schop geven :)

[ Voor 67% gewijzigd door gorgi_19 op 30-01-2005 19:31 ]

Geniet, maar surf met mate!


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Waarom gooi je je foutmelding niet eens in Google? Kijk op PHP.net bij de documentatie van de betreffende functies hoe het in elkaar zit, en waarom je een foutmelding krijgt. Kijk in de documentatie van MySQL die ik hierboven al eens heb aangehaald hoe het precies met DATE_ADD zit. Dat je een beginner bent is geen excuus om de documentatie niet door te spitten, sterker nog: dat je een beginner bent is reden te meer om in de docs te duiken. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • OkkE
  • Registratie: Oktober 2000
  • Laatst online: 10-11-2025

OkkE

CSS influencer :+

Je wilt kijken of er al een bericht in je database staat dat gepost is door een bepaald IP (ge mogelijke spammer), dan wil je kijken of dit bericht al ouder is als een bepaalde tijd.

Als eerste lijkt het mij handiger om dan te werken met TIMESTAMPS ipv de datum als HH:MM:SS enz, maar oke. :)

PHP:
1
2
3
4
5
6
$query= "SELECT * FROM Shoutbox WHERE ip='.$REMOTE_ADDR.' and NOW()<=DATE_ADD(datum2, INTERVAL 2 HOUR)";  
$result = mysql_query($query) or die (mysql_error());  
if(mysql_num_rows($result) >= 1){   
  echo '<META HTTP-EQUIV="Refresh" CONTENT="0;URL=?show=shoutbox/shout&error=0"> ';  
  exit; 
}


Even wat puntjes, die ook al door andere zijn aangehaald...

a) Waarom staan er puntjes om je $REMOTE_ADDR? Puntjes worden gebruikt om strings aan elkaar te 'plakken', maar die hoeven er dus niet in als je de string niet onderbreekt.
Stel ik kom op je site, dat wordt in de database gezocht naar de volgende waarde: .127.0.0.1.
Ik neem aan dat je die eerste en laatste punt niet in de database hebt staan? Dus lijkt me dat je die ook niet in je SQL wilt hebben.

b) Of het ADD_DATE wel of niet klopt is eenvoudig in de documentatie terug te vinden. Mocht het niet lukken zou je natuurlijk ook altijd de datum-check door PHP kunnen laten doen. :)

c) Een PHP Header is over het algemeen beter om te gebruiken imho als een Meta. Dat er een foutmelding komt (Warning: Cannot modify header information ...) klopt. Deze Header werkt namelijke alleen als er nog _niets_ naar de browser is gestuurd. En een foutmelding (dat je SQL niet klopt) is dus tekst dat verstuurd wordt naar de browser waardoor je Header niet meer werkt.

“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.


  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 10-05 18:53

Bosmonster

*zucht*

Functies in de where gebruiken is overigens niet aan te raden voor dingen die je veel gebruikt. Er kan geen gebruik gemaakt worden van indices en MySQL zal voor alle records de functie uit moeten voeren.

In dit geval is een timestamp een beter idee, want dan kun je er gewoon een integer vergelijking van maken.

  • ralphje
  • Registratie: December 2004
  • Laatst online: 12:20

ralphje

Hey, it's me!

Topicstarter
Owkey, het werkt nu allemaal wel, maar ik wil dus alleen het laatste bericht controleren. Ik krijg nu GEEN foutmelding, maar als dit het geval is:

IK - 2 minuten geleden
ANDER - 1 minuut geleden

dan kan ik nog niet posten, wat wel moet kunnen. order by id desc limit 0,1 werkt dus niet (of ik zit fout...) mijn probleem is dus dat ik dat wel wil, de rest lukt al... daarvoor nogmaals bedankt.

Geniet, maar surf met mate!


  • ralphje
  • Registratie: December 2004
  • Laatst online: 12:20

ralphje

Hey, it's me!

Topicstarter
Dus hoe moet het wel ?

Nu mag ik em toch wel opkrikken he?

Geniet, maar surf met mate!


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 15-05 08:48

Janoz

Moderator Devschuur®

!litemod

Dit gaat nergens heen. Er zijn aan jou genoeg aanwijzingen gegeven. Het is hier niet de bedoeling dat we maar oplossingen voor gaan kauwen. Zo lijkt het meer op een scriptrequest en zoals je kunt zien in onze faq zijn die hier niet toegestaan.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'

Pagina: 1

Dit topic is gesloten.