[PHP] Checken of iets al in de db staat

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Intrepidity
  • Registratie: December 2003
  • Laatst online: 24-06-2024
Ik ben bezig met het maken van een simpel scriptje voor mijn site dat het mogelijk maakt voor gebruikers om met hun geregistreerde gebruikersnaam in te loggen om zo bepaalde delen van de site te 'unlocken'.
het enige waar ik (als php n00b zijnde) nog tegenaan loop is hoe ik kan controleren of een bepaalde username al bestaat in de database. Ik heb het al eens geprobeer met een while loopje maar dat wil totaal niet. Iemand enig idee?

Acties:
  • 0 Henk 'm!

  • coubertin119
  • Registratie: Augustus 2002
  • Laatst online: 15-09 17:06
MySQL:
1
SELECT * FROM tabel WHERE 'username' = " . $username

En dan kijken of de resultset leeg is.

Skat! Skat! Skat!


Acties:
  • 0 Henk 'm!

  • 4of9
  • Registratie: Maart 2000
  • Laatst online: 13-12-2024
selecteer de record uit de database met als voorwaarde je username, als je recordset leeg is (EOF) dan bestaat ie niet....

hmm iemand was me voor

[ Voor 10% gewijzigd door 4of9 op 05-05-2004 16:39 ]

Aspirant Got Pappa Lid | De toekomst is niet meer wat het geweest is...


Acties:
  • 0 Henk 'm!

  • dingstje
  • Registratie: Augustus 2002
  • Laatst online: 02-01-2024
PHP:
1
2
3
4
5
6
<?php
$sql = mysql_query("SELECT userid FROM users_table WHERE username='". addslashes($_POST['username']) ."'");
if (mysql_num_rows($sql) == 1) {
// Gebruikersnaam bestaat al
return;
}


edit:
Lol, 4 mensen die hetzelfde denken :+

[ Voor 40% gewijzigd door dingstje op 05-05-2004 16:40 ]

If you can't beat them, try harder


Acties:
  • 0 Henk 'm!

  • phYzar
  • Registratie: November 2001
  • Laatst online: 17:59
PHP:
1
2
3
4
5
6
7
8
9
$user_exists = mysql_query("select * from users where username='$username'");
if(mysql_numrows($user_exists)>0)
{
//user bestaat
}
else
{
//user bestaat niet
}

(weet niet of de functies kloppen, ben zelf met postgresql bezig)

Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 20-09 23:58

TeeDee

CQB 241

- Username veld in db uniek maken?

pseudo code:
code:
1
2
3
4
5
6
select username from blaat where username = 'pietjepuk'
if recordset.eof then
' user bestaat niet
else
' doe je ding
end if

Bovenstaande pseudocode is gebaseerd op asp. Voor PHP zal het niet veel verschillen imho.

sjeesh... spuit fucking elf

[ Voor 11% gewijzigd door TeeDee op 05-05-2004 16:41 ]

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

  • Intrepidity
  • Registratie: December 2003
  • Laatst online: 24-06-2024
Erg bedankt voor de snelle reactie, top! _/-\o_ :D

Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 14:45
Waarom leg je geen unique constraint of unique index op dat veld?
Als je dan een fout krijgt, kan je die fout opvangen, etc...

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • Intrepidity
  • Registratie: December 2003
  • Laatst online: 24-06-2024
whoami schreef op 05 mei 2004 @ 16:44:
Waarom leg je geen unique constraint of unique index op dat veld?
Als je dan een fout krijgt, kan je die fout opvangen, etc...
Op papier klinkt dat goed...
Maar zoals ik al eerder zei, ik ben een n00b, vooral i.c.m. met databases.. dus ik snap geen r**t van wat je zegt :P :D

Acties:
  • 0 Henk 'm!

  • phYzar
  • Registratie: November 2001
  • Laatst online: 17:59
BartXP schreef op 05 mei 2004 @ 16:46:
[...]

Op papier klinkt dat goed...
Maar zoals ik al eerder zei, ik ben een n00b, vooral i.c.m. met databases.. dus ik snap geen r**t van wat je zegt :P :D
dan vertalen we het naar het n00biaansch ;) :

Waarom maak je je database tabel niet zo, dat je aangeeft dat het veld "gebruikersnaam" uniek is. Wanneer je dan een dubbele gebruikersnaam in wilt voeren geeft je database een error en hoef je dus geen controle in te bouwen in je php-script, alleen maar te kijken of je database geen fouten geeft.

Acties:
  • 0 Henk 'm!

  • bat266
  • Registratie: Februari 2004
  • Laatst online: 24-08 06:41
BartXP schreef op 05 mei 2004 @ 16:46:
[...]

Op papier klinkt dat goed...
Maar zoals ik al eerder zei, ik ben een n00b, vooral i.c.m. met databases.. dus ik snap geen r**t van wat je zegt :P :D
Ga als je niet veel ervan weet nog enige info op t web, maar hetgeen dat whoami bedoelt is een appart veld in de db maken met een nummer erin de index. Dit nummer is uniek voor elke gebruiker :)
ook kun je het doen als hierboven al vermeld werd :)

[ Voor 7% gewijzigd door bat266 op 05-05-2004 16:54 ]

Better to remain silent and be thought a fool then to speak out and remove all doubt.


Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 20-09 23:58

TeeDee

CQB 241

bat266 schreef op 05 mei 2004 @ 16:53:
[...]

Ga als je niet veel ervan weet nog enige info op t web, maar hetgeen dat whoami bedoelt is een appart veld in de db maken met een nummer erin de index. Dit nummer is uniek voor elke gebruiker :)
ook kun je het doen als hierboven al vermeld werd :)
Dat moet je met echt even uitleggen.
Hoe had je dat in gedachten?
Want zoals ik je begrijp:

userid = unique INT
username = varchar
:?

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

  • phYzar
  • Registratie: November 2001
  • Laatst online: 17:59
TeeDee schreef op 05 mei 2004 @ 18:33:
[...]

Dat moet je met echt even uitleggen.
Hoe had je dat in gedachten?
Want zoals ik je begrijp:

userid = unique INT
username = varchar
:?
Jij begrijpt hem goed, hij begrijpt jou fout ;)
Wat je zou kunnen doen:

userid = unique INT
username = unique varchar

Acties:
  • 0 Henk 'm!

  • Infinitive
  • Registratie: Maart 2001
  • Laatst online: 25-09-2023
Door je username of userid uniek te maken zorg je ervoor dat voor het inserten van een nieuwe gebruiker-record de database zelf controleerd of hij al bestaat. Als dat gelukt is, dan bestond de gebruiker nog niet en nu wel. Als het niet lukt, dan is het mogelijk dat de gebruiker al bestond. Ook al registreren twee mensen met dezelfde username zich tegelijkertijd, dan zal de database garanderen dat er slechts één zal slagen.

Dit in tegenstelling tot de code waarbij je zelf controleerd of de gebruiker bestaat en dan pas toevoegen. Als je twee dezelfde gebruikers zich met dezelfde naam op hetzelfde tijdstip registreren, dan kan het zijn dat op het moment dat de check voor de ene gebruiker wordt uitgevoerd, de insert voor de andere nog niet voltooid is. En dan krijg je dubbele.

In dit geval is de insert operatie van de database krachtig genoeg om dit probleem op dit probleem op te lossen. In gevallen waarbij dit niet zo is kan je transacties gebruiken. Maar ik verwacht dat je dat voorlopig niet nodig zult hebben.

putStr $ map (x -> chr $ round $ 21/2 * x^3 - 92 * x^2 + 503/2 * x - 105) [1..4]


Acties:
  • 0 Henk 'm!

Verwijderd

mjah, nu we toch over dit onderwerp bezig zijn... ik heb ook db alleen is die waarchijnlijk iets groter dan deze hier.
het gaat hier om een db met +- 300.000 records en het duurde elke keer +- 0.2 sec om te kijken of iets er al instaat.
zou dit dmv dat veld unique te maken sneller gaan.. of moet ik dat echt gaan testen voordat om daar achter te komen ;)

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Verwijderd schreef op 05 mei 2004 @ 22:46:
mjah, nu we toch over dit onderwerp bezig zijn... ik heb ook db alleen is die waarchijnlijk iets groter dan deze hier.
het gaat hier om een db met +- 300.000 records en het duurde elke keer +- 0.2 sec om te kijken of iets er al instaat.
zou dit dmv dat veld unique te maken sneller gaan.. of moet ik dat echt gaan testen voordat om daar achter te komen ;)
Niet zozeer door het feit dat je een unique index legt, maar meer door het feit dat je niet eerst iedere keer een select query uit moet voeren. Want als je het voorbeeld neemt van de gebruikersnaam zal het maar weinig voorkomen dat dezelfde username wordt gekozen. In de huidige situatie verspil je voor die mogelijkheid toch heel vaak een query.

Maar zoals altijd: meten is weten O-)

[ Voor 3% gewijzigd door djluc op 06-05-2004 00:26 ]


Acties:
  • 0 Henk 'm!

Verwijderd

djluc schreef op 06 mei 2004 @ 00:25:
[...]
Niet zozeer door het feit dat je een unique index legt, maar meer door het feit dat je niet eerst iedere keer een select query uit moet voeren. Want als je het voorbeeld neemt van de gebruikersnaam zal het maar weinig voorkomen dat dezelfde username wordt gekozen. In de huidige situatie verspil je voor die mogelijkheid toch heel vaak een query.

Maar zoals altijd: meten is weten O-)
dat snap ik jah, maar moet mysql niet zelf ook elke keer soort van select uitvoeren... kan me haast voorstellen van wel :p
maarja, zal wel eens testen strax ofzo

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Verwijderd schreef op 06 mei 2004 @ 00:48:
[...]
dat snap ik jah, maar moet mysql niet zelf ook elke keer soort van select uitvoeren... kan me haast voorstellen van wel :p
maarja, zal wel eens testen strax ofzo
Volgens mij gaat iets dergelijks intern veel sneller. Al is het alleen maar omdat hij geen sql query moet parsen, het resultaat terug moet sturen enzovoorts :)

Acties:
  • 0 Henk 'm!

Verwijderd

djluc schreef op 06 mei 2004 @ 10:54:
[...]
Volgens mij gaat iets dergelijks intern veel sneller. Al is het alleen maar omdat hij geen sql query moet parsen, het resultaat terug moet sturen enzovoorts :)
poeh, intern sneller... tering scheelt factor 100 bekant.
kheb ook maar ff text veldje omgezet naar varchar en nu gaat met mega rap.
bedankt!

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Verwijderd schreef op 06 mei 2004 @ 13:01:
[...]
poeh, intern sneller... tering scheelt factor 100 bekant.
kheb ook maar ff text veldje omgezet naar varchar en nu gaat met mega rap.
bedankt!
Graag gedaan!
Is die factor 100 gewoon een willekeurig getal of scheelt het echt een nulletje of 2?

Acties:
  • 0 Henk 'm!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

djluc schreef op 06 mei 2004 @ 13:10:
[...]

Graag gedaan!
Is die factor 100 gewoon een willekeurig getal of scheelt het echt een nulletje of 2?
Op een 'text'-veld kun je geen indexing doen en zal de database anders cachen. Die factor 100 is dus best te halen.

En voor blaat_schaap: als een select uit 300000 rows je 0.2 seconden kost heb je no way een index staan op het searchveld. Doe dat eens snel ;)

Professionele website nodig?


Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 14:45
Een DBMS gaat bij een unique index alleszins geen select ofzo gaan doen zoals je die kent.

Ik denk dat er eerder naar de index-page gekeken wordt; de tree zal overlopen worden, en als er een node is in die tree die al een node is met dezelfde waarde als de nieuwe waarde wordt er gewoon een fout gegeven.

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

whoami schreef op 06 mei 2004 @ 13:20:
Een DBMS gaat bij een unique index alleszins geen select ofzo gaan doen zoals je die kent.

Ik denk dat er eerder naar de index-page gekeken wordt; de tree zal overlopen worden, en als er een node is in die tree die al een node is met dezelfde waarde als de nieuwe waarde wordt er gewoon een fout gegeven.
Op wie reageer je nu want ik snap niet echt wat je nu aan wie probeert duidelijk te maken :)

Professionele website nodig?


Acties:
  • 0 Henk 'm!

Verwijderd

curry684 schreef op 06 mei 2004 @ 13:24:
[...]

Op wie reageer je nu want ik snap niet echt wat je nu aan wie probeert duidelijk te maken :)
ik zal mezelf maar niet citeren... maar ergens in het midden stelde ik nog de vraag of mysql niet zelf ook een soort van select uitvoert, dus of dat het wel nuttig was om het met een unique veldje te doen.
dus dit was toch wel enigzins relevant :)
Pagina: 1