Vinnaren i pepparkakshustävlingen!
2018-05-09, 10:35
  #1
Medlem
Hej!

Det min funktion nedan gör just nu är att den ser till så att det är en valid email, men jag skulle även vilja att den inte tillåter att man registrerar med samma email. Hur skulle den funktionen kunna konstrueras?

Tack på förhand!


Kod:
if (!filter_var($emailFILTER_VALIDATE_EMAIL)) {
                    
header("Location: ../signup.php?signup=email");
                    exit();
                } 
Citera
2018-05-09, 11:28
  #2
Medlem
kodsnickrarns avatar
Förutsätter att du sparar ner i en databas, så jag hade helt enkelt satt ett unikt index på fältet för epostadressen.
Sätt INTE epostadressen som primärnyckel, det kommer leda till massa strul senare när användare vill byter epost e.tc. .. eller vill registrera fler än en epostadress.

Om du då försöker lagra en epost som redan finns kommer SQL-satsen ge ett felmeddelande som du sedan hanterar och visar upp "tyvärr, epostadressen är redan upptagen"

Om du vill snygga till det kan du dessutom lägga till en funktion som kollar om den epost som knappats in är ledig, men förlita dig inte på att det räcker. T.ex. kan ju någon (annan) hinna registrera samma epost _efter_ att du kontrollerat men _innan_ du hunnit spara.

/K
Citera
2018-05-09, 11:58
  #3
Medlem
kattstrypares avatar
Antingen kan du söka igenom tabellen efter epostadressen eller ha den ha den unik som ovan. Du kan ju eventuellt skapa en funktion som testar tillgängligheten åt dig för att snygga till koden och få den lättöverskådlig. Du kan använda samma princip för övriga tester du behöver. Tyvärr var det länge sedan jag knåpade PHP själv men något liknande det nedan kanske kan få dig på rätt spår.

Kod:
// Funktion som skapas för att kontrollera värden från databasen
function check_availability(typevalue) {
    switch(
type){
        case 
"email":
        
// Kod för att kontrollera tillgänglighet
        
break;
        case 
"username":
        
// Som ovan men med användarnamn
        
break;
    }
}

if (!
filter_var($emailFILTER_VALIDATE_EMAIL) && check_availability("mail"$email)) {
                    
header("Location: ../signup.php?signup=email");
                    exit();
                } 
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback