Controleren of value al bestaat in database

  • Hallo,
    ik ben een beginnertje in php en probeer een registratie-systeempje te maken.
    Nu wil ik dat het controleert of je email of naam ( gebruikersnaam ) al in de database staat aan de hand van if/else.
    Maar dit lukt niet echt, kan iemand mij helpen?
    Dit is mijn code:

  • Guest, wil je besparen op je domeinnamen? (ad)
  • Hallo,


    Via de Google search term "php check if username exists mysql" kwam ik op de volgende resultaten:
    http://stackoverflow.com/quest…ts-in-mysql-table-via-php
    http://stackoverflow.com/quest…-exists-in-mysql-with-php
    http://stackoverflow.com/quest…s-when-creating-a-new-use
    http://stackoverflow.com/quest…-exists-in-mysql-database


    En zo nog velen meer.


    Die voorbeelden laten zien hoe het moet.


    Mvg,
    Tim

  • Bedankt voor de vele voorbeelden.
    Ik heb ze proberen toe te passen op mijn code maar dit is niet erg goed gelukt en ik weet niet wat ik fout heb gedaan.
    Ik krijg nu volgende error:
    Notice: Object of class mysqli_result could not be converted to int in C:\xampp\htdocs\welcome.php on line 20
    User Already in Exists
    (user already exists tekst komt er ook wanneer email nog niet bestaat)
    dit is mijn code:

  • Kleine aanpassing waardoor het zou moeten werken...


    PHP
    <?php
    $query = "SELECT * FROM Gebruikers WHERE email = `example` LIMIT 1";
    $result = mysqli_query($con, $query);
    
    
    if (mysqli_num_rows($result) > 0) {
    echo "Gebruiker bestaat";
    }
    ?>
  • Hallo, bedankt voor de hulp. Ik heb mijn code aangepast aan de jouwe en krijg nu volgende error: Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in C:\xampp\htdocs\welcome.php on line 21


    Dit is mijn code:

  • Mysqli_num_rows error is 9/10 keer een fout met de query. Wat ik ook altijd zeg: Bouw foutafhandeling in. Dan weet je meteen of het aan je query ligt.
    Daarnaast moet je ook je variabelen buiten de quotes halen. Dus WHERE email = '".$email."' LIMIT 1 ;)

  • Ik heb de '".$email." aangepast zoals je zei en nu geeft het geen error meer. Nu heb ik het probleem dat het altijd else gebruikt (dus je gegevens in database zet) ookal bestaat de gebruikersnaam al.
    Mijn code:

  • Mysqli_num_rows error is 9/10 keer een fout met de query. Wat ik ook altijd zeg: Bouw foutafhandeling in. Dan weet je meteen of het aan je query ligt.
    Daarnaast moet je ook je variabelen buiten de quotes halen. Dus WHERE email = '".$email."' LIMIT 1 ;)


    Wanneer je zoekt op een specifiek e-mail adres filtert hij hem neem ik aan toch al, neem aan dat een e-mail adres maar 1x mag voorkomen, waarom zou je dan als nog een LIMIT 1 geven ?
    Als ik me query uitvoer zie ik eigenlijk geen snelheid verschil in LIMIT 1 en zonder LIMIT 1, reageert vrijwel hetzelfde..


    P.s. puur uit nieuwsgierigheid nooit echt mee bezig gehouden.

  • @Wmdiensten ik weet het ook niet, maar het lijkt me logisch dat een LIMIT sneller is omdat ij dan NIET verder hoeft te zoeken zodra er een resultaat is... Zou je eigenlijk pas kunnen testen bij 30.000 records ofzo

  • @Wmdiensten ik weet het ook niet, maar het lijkt me logisch dat een LIMIT sneller is omdat ij dan NIET verder hoeft te zoeken zodra er een resultaat is... Zou je eigenlijk pas kunnen testen bij 30.000 records ofzo


    Je filtert toch al op het record (aangezien die uniek is), dus een limit geven heeft eigenlijk (in mijn ogen) vrij weinig zin als je op één specifieke record zoekt lijkt me?

  • In deze situatie heeft het volgens mij ook weinig zin aangezien het om een uniek record gaat. Er mag maar één e-mail in de database staan. Je kan de query wel sneller maken door geen wildcards (*) te gebruiken, maar alleen de waardes op te halen die je nodig hebt.

  • Je leest m'n bericht blijkbaar niet. Ik zei dat je foutafhandeling in moest bouwen. Op die manier weet je meteen of de query fout loopt en wat de foutmelding precies is.


    * Noot: or_die() is geen goede foutafhandeling! Ik heb een blog geschreven over foutafhandeling. ;) (Zie mijn profiel)

  • Ik heb een poging gedaan om je foutafhandeling proberen in te bouwen maar aangezien ik een noob ben in php momenteel is het niet echt goed gelukt.
    Dit krijg ik momenteel: "Warning: mysqli_query() expects at least 2 parameters, 1 given in C:\xampp\htdocs\welcome.php on line 22
    Er ging iets mis op deze pagina. De error is bekend en wordt zo snel mogelijk opgelost. Excuses voor het ongemak!
    Notice: Undefined variable: query in C:\xampp\htdocs\welcome.php on line 35"




    Dit is de code:

  • Zo zou ik een dergelijke fout oplossen:


    - Ik ga de code na zonder deze uit te voeren.
    * Je kijkt of er verbinding kan worden gemaakt (eerste paar regels), maar doet daarna niets met de uitkomst. Je laat de { } leeg.
    - Maak je aanpassingen
    * Zet dus alles binnen die haakjes wat moet gebeuren als er wel verbinding is.
    - Probeer je code uit
    * Je ziet dus een error: 2 parameters expected, 1 given
    - Lees de error en kijk wat het betekent



    De blog die ik heb geschreven was voor MySQL. De mysqli_query variant vraagt om 2 variabelen. Namelijk de verbindings variabele en de sql variabele. Gaat het zo lukken?
    Het is overigens niet de bedoeling dat je letterlijk dingen over gaat nemen. Ik heb mijn blog geschreven zodat je zelf gaat nadenken hoe iets werkt. Php is 9/10 keer gewoon goed nadenken en lezen wat er staat.

  • Ik heb niet het hele topic doorgelezen, dus misschien zeg ik iets wat al gezegd is. Maar dit is de meest gebruikelijke oplossing.


    Om te kijken of een waarde al bestaat in de database, kun je dit met een count doen. Je telt namelijk of er al een column bestaat in de database met deze waarde. Is deze waarde 1, dan bestaat hij al.


    Een voorbeeld voor de code:



    Let op: dit is een voorbeeld van hoe het kan werken. Dus dit zul je in je code moeten verwerken en niet zo maar kopiëren

Participate now!

Heb je nog geen account? Registreer je nu en word deel van onze community!