Gebruikersnaam en email duplicate error verwerken
ik ben een registratieformulier aan het maken waarin zowel gebruikersnaam als emailadres steeds uniek moeten zijn bij een nieuwe registratie, ik heb bijden in de database als uniek ingesteld, dus een error geeft hij zowiezo, nu wil ik verderwerken met de error maar wil ik ook kunnen herkennen of het de gebruikersnaam is of het emailadres is dat er al in staat.
Ik heb volgende code momenteel:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
if(mysql_errno() != 0)
{
if(mysql_errno() == 1062)
{
echo "Deze gebruikersnaam of dit emailadres is al in gebruik!";
}
else
{
echo "Whoops, er liep iets fout, probeer opnieuw of als deze fout blijft voorkomen neem contact op met ons";
}
}
{
if(mysql_errno() == 1062)
{
echo "Deze gebruikersnaam of dit emailadres is al in gebruik!";
}
else
{
echo "Whoops, er liep iets fout, probeer opnieuw of als deze fout blijft voorkomen neem contact op met ons";
}
}
Zoals je ziet staat hier gewoon een algemene error, of nu de gebruikersnaam of het wachtwoord de error geeft maakt niet uit in dit geval, ik zou er van willen maken dat er meteen op komt of het de gebruikersnaam is of het emailadres.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$host = ""; // De host
$user = ""; // De MySQL gebruikersnaam
$pass = ""; // Het MySQL wachtwoord
$datb = ""; // De database
mysql_connect($host, $user, $pass) or die ("Er kan geen verbinding worden gemaakt");
mysql_select_db($datb) or die ("Er kan geen verbinding worden gemaakt met de database");
$query = "SELECT username FROM members WHERE username = '" . mysql_real_escape_string($_POST['username']) . "'";
$get = mysql_query($query);
$aantal = mysql_num_rows($get);
if($aantal !== 0) die ('Deze gebruikersnaam bestaat al <a href="register.php">Terug</a>!');
?>
$host = ""; // De host
$user = ""; // De MySQL gebruikersnaam
$pass = ""; // Het MySQL wachtwoord
$datb = ""; // De database
mysql_connect($host, $user, $pass) or die ("Er kan geen verbinding worden gemaakt");
mysql_select_db($datb) or die ("Er kan geen verbinding worden gemaakt met de database");
$query = "SELECT username FROM members WHERE username = '" . mysql_real_escape_string($_POST['username']) . "'";
$get = mysql_query($query);
$aantal = mysql_num_rows($get);
if($aantal !== 0) die ('Deze gebruikersnaam bestaat al <a href="register.php">Terug</a>!');
?>
Deze heeft wel een 'die' functie, wat minder vriendelijk overkomt, maar het werkt wel prima. Je code loopt door als de gebruikersnaam niet bestaat. Zo kan je dat ook met een e-mail doen.
En dat iets wat we niemand toewensen, dus niet gebruiken.
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
$qr = mysql_query ("SELECT email, username FROM users WHERE email = $_POST['username'] OR username=$_POST['username']");
if(mysql_num_rows($qr) >= 1){
echo 'Gebruikersnaam en/of email bestaan al!';
} else {
//Alles goed goed dus je kan toevoegen
}
?>
$qr = mysql_query ("SELECT email, username FROM users WHERE email = $_POST['username'] OR username=$_POST['username']");
if(mysql_num_rows($qr) >= 1){
echo 'Gebruikersnaam en/of email bestaan al!';
} else {
//Alles goed goed dus je kan toevoegen
}
?>
Gewijzigd op 30/08/2013 20:55:58 door Donny Wie weet
Als je wilt weten wat er dubbel ingevoerd wordt zal je altijd 2 query's moeten uitvoeren (om te controleren), tenzij het niet belangrijk is om te weten als allebei duplicate entries zijn.
Want dan kan je gewoon een insert proberen, en krijg je bij dubbele invoer van mysql een foutmelding terug zoals:
Duplicate entry '[email protected]' for key 'idx_email'
Alleen geeft deze dus de eerste duplicate entry die wordt tegenkomen.
Ik heb het op de manier van Frank gedaan, dit vond ik de simpelste oplossing, aan allen die me wouden helpen: bedankt
Schrikbarend, dat wel, dan mensen nog steeds dit soort 'oplossingen' aandragen en gebruiken.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
$qr = mysql_query ("SELECT email, username FROM users WHERE email = $_POST['username'] OR username=$_POST['username']");
if(mysql_num_rows($qr) >= 1){
while($row = mysql_fetch_assoc($qr){
if(isset($_POST['username']) == $row['username']) echo 'De gekozen username bestaat al!<br />';
if(isset($_POST['email']) == $row['email']) echo 'Dit email adres is al gebruikt!<br />';
} else {
//Alles goed goed dus je kan toevoegen
}
?>
$qr = mysql_query ("SELECT email, username FROM users WHERE email = $_POST['username'] OR username=$_POST['username']");
if(mysql_num_rows($qr) >= 1){
while($row = mysql_fetch_assoc($qr){
if(isset($_POST['username']) == $row['username']) echo 'De gekozen username bestaat al!<br />';
if(isset($_POST['email']) == $row['email']) echo 'Dit email adres is al gebruikt!<br />';
} else {
//Alles goed goed dus je kan toevoegen
}
?>
Code even tussen de -tags gezet[/modedit]
Gewijzigd op 31/08/2013 12:40:06 door Nick Dijkstra
Al eens eerder aangekaart, maar zo'n melding is een privacylek. Iedereen kan namelijk met het e-mailadres van een ander controleren of iemand ergens een account heeft.
@Erwin ik kan begrijpen dat die manier misschien profesioneler is, maar geef ook eens toe dat de uitkomst hetzelfde is terwijl de code een pak simpeler in mijn ogen eruit ziet, ik ben nog steeds een beginner in php.
Een melding dat gebruikersnaam en/of mailadres in gebruik is, volstaat prima.
Dat je een beginner bent hoef je niet telkens te herhalen. Er wordt geprobeerd om je dingen uit te leggen om iets goed/beter te doen. Als je dan zelf kiest voor de meest eenvoudige (en (mogelijk) minst nette) oplossing is dat jouw keuze. 'dat de uitkomst hetzelfde is' vind ik echter geen argument; uiteindelijk wil je, neem ik aan, toch ook iets goeds maken.
Juist als beginner lijkt het me dat je de tips ter harte zou kunnen nemen om naar de toekomst toe goed bezig te zijn. Je kiest er nu kennelijk voor om iets half te doen, terwijl je uitleg krijgt om het goed/beter te doen. Vind dat jammer.
Email is in gebruik.
Beter kan je er van maken:
"U kunt dit email adres niet gebruiken"
Er staat immers niet dat hij in gebruik is.
En zo laat je in het midden of hij is gebruikt.
Een administrator kan het email adres ook hebben geblokkeerd e.d.
Immers hoeft de user alleen maar te weten of iets klopt of niet.
Gewijzigd op 31/08/2013 12:26:04 door Bart V B
Ward van der Put op 31/08/2013 09:59:04:
echo 'Dit e-mailadres is al gebruikt!'
Al eens eerder aangekaart, maar zo'n melding is een privacylek. Iedereen kan namelijk met het e-mailadres van een ander controleren of iemand ergens een account heeft.
Al eens eerder aangekaart, maar zo'n melding is een privacylek. Iedereen kan namelijk met het e-mailadres van een ander controleren of iemand ergens een account heeft.
+10
Ik ga naar Nieuw wachtwoord aanvragen en vul daar een willekeurig mailadres in.
Dan krijg je ook melding dat hij verzonden is (of niet bekend).
En als het mailadres blijkbaar al geregistreerd staat: wat wil je daar dan mee doen?
Ja, dat je een mailadres weet. Blijkbaar wist je die al, want anders vulde je die niet in...
Als je wilt kijken of iemand (een persoon bijbehorend bij een mailadres) op die website geregistreerd staat, probeer je te registeren met dat mailadres. Ook al zal je nooit de bevestiging ontvangen.
Voorbeeld: kijken of je vriendin op een of andere datingsite/pornosite/second-love geregistreerd staat.
Nogal achterdochtig, maar een andere reden kan ik niet verzinnen.
Edit:
Kan nog een betere bedenken.
Al die gasten hier die hun account opzeggen i.v.m. een nieuwe baan/carrière.
Stel nou toch eens dat hun vragen op Internet te vinden zijn...
Gewijzigd op 31/08/2013 18:53:14 door Bart V B
Eddy E op 31/08/2013 18:16:50:
Beetje onzinnig.
Ik ga naar Nieuw wachtwoord aanvragen en vul daar een willekeurig mailadres in.
Dan krijg je ook melding dat hij verzonden is (of niet bekend).
Ik ga naar Nieuw wachtwoord aanvragen en vul daar een willekeurig mailadres in.
Dan krijg je ook melding dat hij verzonden is (of niet bekend).
En dat klopt dus ook niet. In zo'n geval moet de melding (ongeveer) als volgt zijn:
"Indien dit e-mailadres bij ons bekend is ontvangt u een mail met verdere instructies."
Er wordt dus compleet in het midden gelaten of de persoon behorende bij het e-mailadres wel of niet geregistreerd is. En dat is de juiste manier.