[mysql] Queries van bansysteem

Pagina: 1
Acties:

  • Tommetje
  • Registratie: Februari 2004
  • Laatst online: 19-11-2024
Een tijdje terug heb ik hier al een topic geplaatst: [rml][ MySQL] Bansysteempje[/rml].

Toen had ik een vraag over de queries voor een bansysteem, daar heb ik toen een antwoord op gekregen, maar ik heb het gevoel dat het nog niet helemaal klopt.

De 2 van belang zijnde velden in de db:
verloopt: deze bevat de datum (timestamp) waarop de ban verloopt, als het een permban is, staat deze op 0.
unbanned: Deze staat normaal op 0, maar als een admin iemand heeft unbanned komt dit veld op 1 te staan.

Ik heb deze queries:
code:
1
2
3
4
5
6
7
8
<?php
$sql = 'SELECT `reden`, `verloopt`
   FROM `bans`
   WHERE `ip` = "' . addslashes ( ip () ) . '"
       AND ( unbanned = 0
           OR ( `verloopt` > ' . time () . ' OR `verloopt` = 0 ) )
    LIMIT 1';
?>
Hiermee wil ik dus kijken of het ip-adres geband is. Het veld verloopt kan dus 0 zijn, of groter dan de tijd. Maar zodra unbanned op 1 staat, is het ipadres niet geband. Nu is mijn vraag: klopt deze query?

Ook heb ik de volgende:
code:
1
2
3
4
5
6
7
<?php
$sql = 'SELECT `id`, `ip`
   FROM `bans`
   WHERE `unbanned` != 1
      OR ( `verloopt` > ' . time () . ' OR `verloopt` = 0 )
   ORDER BY `banned_op` DESC';
?>
Deze is dan om alle gebande ips op te vragen. Ook hier weer de vraag: klopt deze query wel?

En dan de derde
code:
1
2
3
4
5
6
7
<?php
$sql = 'SELECT `id`, `ip`
   FROM `bans`
   WHERE `unbanned` = 1
      OR ( `verloopt` < ' . time () . ' AND `verloopt` != 0 )
   ORDER BY `banned_op` DESC';
?>
Deze haalt alle oude, dus verlopen of handmatige unbannede bans op. Klopt deze?

Alvast bedankt :)

[ Voor 7% gewijzigd door Tommetje op 24-11-2004 17:21 ]

Hoi!


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 20:44

Creepy

Tactical Espionage Splatterer

Ben je zelf niet in staat om je queries te controleren? Test ze en je weet het :)

Debuggen moet je namelijk zelf doen, lijkt me in dit geval niet al te moeilijk toch?

[ Voor 36% gewijzigd door Creepy op 24-11-2004 17:21 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Noork
  • Registratie: Juni 2001
  • Niet online
Waarom test je je queries niet even zelf? Maak gewoon wat records in de database aan die voldoen aan je queries. Kijk dan of je de juiste resultaten terug krijgt. En dan kan je concluderen of de queries goed zijn of niet.

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:34
Testen en debuggen is toch niet zo moeilijk?
Als ontwikkelaar is het een van je taken.

https://fgheysels.github.io/


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 19-05 13:45

gorgi_19

Kruimeltjes zijn weer op :9

Sowieso heb ik het idee dat een status banned / unbanned dubbelop is met een tijdsduur :)
Verder: wat zijn je eigen bevindingen? :)

[ Voor 20% gewijzigd door gorgi_19 op 24-11-2004 17:22 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Tommetje
  • Registratie: Februari 2004
  • Laatst online: 19-11-2024
gorgi_19 schreef op woensdag 24 november 2004 @ 17:21:
Sowieso heb ik het idee dat een status banned / unbanned dubbelop is met een tijdsduur :)
Hoe bedoel je? Ik heb btw geen status banned, maar unbanned, dit omdat ik later nog wil kunnen zien wie het ip unbanned heeft en wanneer dit is gebeurd. (als dit gebeurd is). :)
Verder: wat zijn je eigen bevindingen? :)
Ik ben nu bezig met debuggen....Shame on me voor dit topic... :X

[ Voor 3% gewijzigd door Tommetje op 24-11-2004 17:27 ]

Hoi!


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Je eerste query selecteert volgens mij iedereen die niet unbanned is of van wie de ban nog niet verlopen is...
Maar bij die laatste helft controleer je niet of de ban wel verwijdert is ;)

  • Tommetje
  • Registratie: Februari 2004
  • Laatst online: 19-11-2024
Oke, bedankt :)

Ik heb nu deze queries:

Voor het kijken of dit ip is geband:
code:
1
2
3
4
5
6
$sql = 'SELECT `reden`, `verloopt`
   FROM `bans`
   WHERE `ip` = "' . addslashes ( ip () ) . '"
      AND ( `verloopt` > ' . time () . ' OR `verloopt` = 0 )
      AND `unbanned` = 0
   LIMIT 1';
Voor alle gebande ips:
code:
1
2
3
4
5
$sql = 'SELECT `id`, `ip`
   FROM `bans`
   WHERE ( `verloopt` > ' . time () . ' OR `verloopt` = 0 )
      AND `unbanned` = 0
   ORDER BY `banned_op` DESC';
Voor alle verlopen/geunbande bans:
code:
1
2
3
4
5
$sql = 'SELECT `id`, `ip`
   FROM `bans`
   WHERE `unbanned` != 0
      OR ( `verloopt` < ' . time () . ' AND `verloopt` != 0 )
   ORDER BY `banned_op` DESC';

En volgens mij kloppen deze... :P

Hoi!

Pagina: 1