[PHP/MySQL] Leden bevestiging

Pagina: 1
Acties:

Onderwerpen


  • Spinal
  • Registratie: Februari 2001
  • Laatst online: 19-09 13:37
Dag mede-PHPers,


Mijn situatie:
ik ben bezig met een spel in PHP, hierin zijn een x aantal gebruikers. Deze worden opgeslagen in een MySQL database, allemaal met een uniek nummer.
Ik wil dat het mogelijk is voor de gebruikers om zich aan te sluiten bij een 'clan'. Hiervoor is wel toestemming nodig van de leider van de clan. Ik dacht eraan om de gebruikers een link te sturen, bijvoorbeeld inclan.php?uid=1&cid=3 waarbij uid het nummer van de gebruiker is en cid het nummer van de clan (die ook worden opgeslagen in MySQL).
Ik zit echter vast met de realisering hiervan. Het probleem is natuurlijk dat een gebruiker de link kan wijzigen in inclan.php?uid=1&cid=4 bijvoorbeeld, hij zou dan zonder toestemming in een andere clan komen. Ik moet dus op de een of andere manier bijhouden welke leden zijn uitgenodigd voor een bepaalde clan.

Waar ik aan dacht:
- De gebruikersnummers opslaan in een array, deze wegschrijven in een bestand of in MySQL.
In het eerste geval het bestand uitlezen (bijvoorbeeld clan3.txt) en kijken of het gebruikersnummer hierin voorkomt. Zo niet dan mag de persoon niet in de clan, zo ja dan mag het wel.
In het tweede geval dacht ik aan een array (bijvoorbeeld $clan3 = Array (3,7,12,443);) die vervolgens met eval() geëvalueerd wordt om te kijken of het gebruikersnummer in de array voorkomt.
Beide methoden staan mij niet aan: de eerste niet omdat je dan een hoop tekstbestanden krijgt, namelijk voor elke clan een.

Bovendien zouden deze bestanden ingelezen kunnen worden door gebruikers (oke, hier is wel omheen tewerken, maar toch). De tweede staat mij niet aan vanwege het gebruik van eval. Overal hier op GoT lees ik namelijk dat je hier erg voorzichtig mee moet doen en dat het voor allerlei problemen kan zorgen.
- Een aparte tabel maken, met drie kolommen: een als uniek nummer, een voor het clannummer, en een voor het gebruikersnummer. Hierin worden de uitgenodigde leden opgeslagen. Als een gebruiker accepteert of afwijst wordt de gebruiker verwijdert uit deze tabel.
- Elke gebruiker heeft een kolom clan, deze staat standaard op 0. Ik zou een extra kolom kunnen toevoegen, bijvoorbeeld 'aangenomen', welke op TRUE of FALSE (of 0 of 1) staat. Is het lid uitgenodigd, dan komt de clan-kolom op het clannummer te staan, maar blijft 'aangenomen' op 0/FALSE staan. Als de gebruiker op de link klikt wordt gekeken of het nummer in de clan-kolom overeenkomt met cid in de url, als dit zo is wordt de gebruiker aangenomen. Zo niet dan wordt degene afgewezen.


Mijn voorkeur gaat uit naar de derde mogelijkheid, maar graag zou ik jullie mening hierover willen. Wat zouden jullie doen?

Is dit de beste methode of hebben jullie een beter idee? Misschien heeft iemand ervaring hiermee, hoe heb jij het in dat geval opgelost?
Alvast bedankt!

Full-stack webdeveloper in Groningen


  • Morax
  • Registratie: Mei 2002
  • Laatst online: 20-09 00:30
Ikzelf ben ook met een site voor clans bezig, welke ik maar niet zal noemen ivm met spam, maar hou er rekening mee dat op de derde manier een gebruiker maar van 1 clan lid kan zijn.
Zolang dit geen probleem is, is optie 3 naar mijn mening de netste oplossing van de 3.

Ik zelf werk met een koppeltabel, omdat mensen van meer dan 1 clan lid kunnen zijn. In dat geval kan je de boolean in de koppeltabel zelf opnemen :)

What do you mean I have no life? I am a gamer, I got millions!


  • OkkE
  • Registratie: Oktober 2000
  • Laatst online: 04-09 08:16

OkkE

CSS influencer :+

Ik weet niet of het mogelijk moet zijn voor gebruikers om lid te zijn van meer als 1 clan? Maar het makkelijkste lijkt mij dat je in de tabel voor de Clans gewoon een extra veld (wachtwoord) opneemt. En dat als je lid wil worden van een clan dat je dan eerst een email moet krijgen van de clan-leider met het wachtwoord.

“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.


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Als een gebruiker maar bij 1 clan mag horen zou ik voor een combinatie tussen optie 2 en 3 gaan. De koppeltabel met userId en clanId gebruiken voor uitnodigingen, en de clan waar een gebruiker daadwerkelijk lid van is opslaan bij de gebruiker. Die koppeltabel hoeft trouwens niet persee een uniek ID. De koppeling userId clanId moet zelf uniek zijn.

Op deze manier dwing je inderdaad af dat een gebruiker maar bij 1 clan mag horen, maar daarnaast mogen meerdere clans een gebruiker uitnodigen of kan een gebruiker een lidmaatschap bij meerdere clans aanvragen.

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


  • Spinal
  • Registratie: Februari 2001
  • Laatst online: 19-09 13:37
Ja, een gebruiker mag inderdaad maar bij 1 clan horen.
quote: OkkE
En dat als je lid wil worden van een clan dat je dan eerst een email moet krijgen van de clan-leider met het wachtwoord.
Zou kunnen, maar een (uitgenodigd) lid zou dan het wachtwoord kunnen geven aan iemand anders, zodat een ander dan alsnog lid kan worden. Of bedoel je dat je dat wachtwoord nog krijgt nadat je je hebt aangemeld bij de clan?

De oplossing van Janoz klinkt erg goed. Ik denk dat ik daar dan maar eens mee aan de slag ga. Jullie worden alledrie hartelijk bedankt :) en dat zal ik zeker niet onvermeld laten wanneer het spel af is!

19.23:
Ik ben er ondertussen even mee bezig geweest, ik ga toch een uniek id aan de koppeltabel geven. Dit vanwege het volgende: stel dat een uitgenodigde gebruiker per ongeluk het bericht met de link verwijdert. De clanleider moet dan opnieuw de gebruiker uitnodigen, maar dat gaat niet lukken omdat de gebruiker/clan combinatie dan al bestaat. Hier is ongetwijfeld omheen te werken, maar ik kies toch voor deze optie. Als de gebruiker dan de uitnodiging aanneemt verwijder ik vervolgens uit de koppeltabel alle rijen van de gebruiker. Zo loopt de database ook niet vol door de oplossing :)
Uiteraard hou ik me aanbevolen voor andere oplossingen...

[ Voor 35% gewijzigd door Spinal op 18-11-2004 19:23 ]

Full-stack webdeveloper in Groningen


Acties:
  • 0 Henk 'm!

  • dvvelzen
  • Registratie: Februari 2002
  • Laatst online: 07-08 19:20
let je err wel op dat je daardoor redundante data krijgt waardoor een standaard join van:

speler > tussentabel > clan
1 > 1 > 1 -- originele join (1 row)
1 > x * 1 > x * 1 -- met meerdere entry's in tussentabel ( x rows )

als je overweging is een identity op te nemen in je tussentabel voor dingen als een email verloren. kan je denk ik beter nadenken op welke manier de email terug te halen moet zijn.

i.e.:
clan leader doet een resend voor een gebruiker
1. delete oude entry
2. doe opnieuw als "nieuwe invite"

gebruiker moet resends kunnen opvragen
1. haal de ongeaccepte invites op en stuur deze opnieuw uit.


gr,
Dennis
Pagina: 1