Email een keer gebruiken
ik ben een registreer functie aan het maken voor mijn website maar ik zou graag willen dat je het opgegeven email adres maar een keer kan gebruiken. Ik heb al gegooglet maar kon niks vinden. weet iemand hoe?
insert.php
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php
$con=mysqli_connect("***","***","***","***");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$sql="INSERT INTO Persons (FirstName, LastName, Age)
VALUES
('$_POST[firstname]','$_POST[lastname]','$_POST[age]')";
if(!preg_match("/(?=.*[a-zA-Z])(?=.*[0-9]).{7}/", $_POST['lastname'])) {
echo 'Het gekozen wachtwoord bevat geen 7 karakters en/of geen getal';
} elseif($_POST['lastname'] != $_POST['age']) {
echo 'De wachtwoorden komen niet overeen';
}
if(!preg_match("/(?=.*[a-zA-Z])(?=.*[@]).{7}/", $_POST['firstname'])) {
echo 'Het gekozen e-mail adress bevat geen 7 karakters';
}
if (!mysqli_query($con,$sql))
{
die('Error: ' . mysqli_error($con));
}
echo 'U bent nu geregistreerd';
mysqli_close($con);
?>
$con=mysqli_connect("***","***","***","***");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$sql="INSERT INTO Persons (FirstName, LastName, Age)
VALUES
('$_POST[firstname]','$_POST[lastname]','$_POST[age]')";
if(!preg_match("/(?=.*[a-zA-Z])(?=.*[0-9]).{7}/", $_POST['lastname'])) {
echo 'Het gekozen wachtwoord bevat geen 7 karakters en/of geen getal';
} elseif($_POST['lastname'] != $_POST['age']) {
echo 'De wachtwoorden komen niet overeen';
}
if(!preg_match("/(?=.*[a-zA-Z])(?=.*[@]).{7}/", $_POST['firstname'])) {
echo 'Het gekozen e-mail adress bevat geen 7 karakters';
}
if (!mysqli_query($con,$sql))
{
die('Error: ' . mysqli_error($con));
}
echo 'U bent nu geregistreerd';
mysqli_close($con);
?>
formulier:
<form action="insert.php" method="post">
<em>Email: </em><BR><input type="email" id="email" name="firstname"><span class="error"></span><BR>
<em>Wachtwoord: </em><BR><input type="password" id="wachtwoord" name="lastname"><BR>
<em>Herhaal Wachtwoord: </em><BR><input type="password" name="age"><BR>
<input value="registreren" type="submit">
</form>
Welke errorcode weet ik zo niet uit mijn hoofd.
Verder ben je zeer gevoelig voor SQL-injection
of gewoon een simpele SELECT query uitvoeren, kijken of dat e-mail adres al in de database staat en zoja (num_rows) een foutmelding geven
ON DUPLICATE KEY een INSERT en een UPDATE combineren.
Als je het e-mailadres gebruikt als unieke of primaire sleutel, dan kun je met Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
INSERT
INTO gebruikers
(
emailadres,
voornaam,
achternaam
)
VALUES
(
'[email protected]',
'Jan',
'Pietersen'
)
ON DUPLICATE KEY UPDATE
voornaam = 'Jan',
achternaam = 'Pietersen'
INTO gebruikers
(
emailadres,
voornaam,
achternaam
)
VALUES
(
'[email protected]',
'Jan',
'Pietersen'
)
ON DUPLICATE KEY UPDATE
voornaam = 'Jan',
achternaam = 'Pietersen'
Gewijzigd op 11/10/2013 10:26:24 door Ward van der Put
Het is soort van gelukt, je kan geen twee dezelfde email adressen invoegen maar je krijgt geen duidelijke error. wat te doen?
Zo ja, een foutmelding geven, zo nee doorgaan met registreren?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?php
function email_exists($email) {
$getusersemail = mysql_query('SELECT user_id FROM users WHERE email ="'.$email.'" ORDER BY user_id DESC');
if (mysql_num_rows($getusersemail)==0)
{
return false;
}
else
{
return true;
}
}
?>
function email_exists($email) {
$getusersemail = mysql_query('SELECT user_id FROM users WHERE email ="'.$email.'" ORDER BY user_id DESC');
if (mysql_num_rows($getusersemail)==0)
{
return false;
}
else
{
return true;
}
}
?>
en dan
ik snap het even niet, ik moet mijn eigen gegevens invullen maar waar. Ik moet de code toch aanpassen naar mijn gegevens? (ben net begonnen met php)
dan is alles goed, behalve je SQL injectie controle enz.
Dennis WhoCares op 11/10/2013 18:35:57:
Neem de code van bas de jong over en zet op de plek '//registreren met dit emailadres is toegestaan' jou code.
dan is alles goed, behalve je SQL injectie controle enz.
dan is alles goed, behalve je SQL injectie controle enz.
Hoe bedoel je?
alles er achter plakken?
Kijk even logisch en probeer eens wat uit ;)
Hoewel ik t raar vind dat je een 'firstname' als email gebruik, 'lastname' als wachtwoord en 'age' als herhaling van het wachtwoord ter controle, en deze ook nogmaals gaat invoeren in het database.
Ik heb er trouwens een simpele foutcontrole in gezet.
Vergeet geen mysqli_real_escape_string() te gebruiken
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?php
//Maak verbinding met database
$con=mysqli_connect('***','***','***','***');
//Controle verbinding
if (mysqli_connect_errno()) {
echo 'Kon geen verbinding maken met het database!<br>SQL Error: ' . mysqli_connect_error();
} else { //Anders als er wel een verbinding is
$foutmelding = array();
//Controle wachtwoord ? aka lastname ?????
if(!preg_match('/(?=.*[a-zA-Z])(?=.*[0-9]).{7}/', $_POST['lastname'])) {
$foutmelding[] = '<li>Het gekozen wachtwoord bevat geen 7 karakters en/of geen getal</li>';
} elseif($_POST['lastname'] != $_POST['age']) {
$foutmelding[] = '<li>De wachtwoorden komen niet overeen</li>';
}
//Controle emailadres ? aka firstname ?????
if(!preg_match("/(?=.*[a-zA-Z])(?=.*[@]).{7}/", $_POST['firstname'])) {
$foutmelding[] = '<li>Het gekozen e-mail adress bevat geen 7 karakters</li>';
}
//Controle of email adres al bestaat. aka firstname ???
$emailQ = mysqli_query('SELECT FirstName FROM Persons WHERE FirstName = "' . $_POST['firstname'] . '"');
if(mysqli_num_rows($emailQ)>0) {
$foutmelding[] = '<li>Het gekozen e-mail adress bestaat al in het database!</li>';
}
if(empty($foutmelding)) { //Als foutmelding nog leeg is, query uitvoeren
$sql = 'INSERT INTO Persons (FirstName, LastName, Age) VALUES ("' . $_POST[firstname] . '","' . $_POST[lastname] . '","' . $_POST[age] . '")';
if(!mysqli_query($con,$sql)) {
echo 'Error: ' . $mysqli_error($con);
} else {
echo 'U bent nu geregistreerd';
}
} else { //Anders als foutmelding NIET leeg is
echo 'Er is iets mis gegaan!<ol>' . implode($foutmelding) . '</ol>';
}
}
?>
//Maak verbinding met database
$con=mysqli_connect('***','***','***','***');
//Controle verbinding
if (mysqli_connect_errno()) {
echo 'Kon geen verbinding maken met het database!<br>SQL Error: ' . mysqli_connect_error();
} else { //Anders als er wel een verbinding is
$foutmelding = array();
//Controle wachtwoord ? aka lastname ?????
if(!preg_match('/(?=.*[a-zA-Z])(?=.*[0-9]).{7}/', $_POST['lastname'])) {
$foutmelding[] = '<li>Het gekozen wachtwoord bevat geen 7 karakters en/of geen getal</li>';
} elseif($_POST['lastname'] != $_POST['age']) {
$foutmelding[] = '<li>De wachtwoorden komen niet overeen</li>';
}
//Controle emailadres ? aka firstname ?????
if(!preg_match("/(?=.*[a-zA-Z])(?=.*[@]).{7}/", $_POST['firstname'])) {
$foutmelding[] = '<li>Het gekozen e-mail adress bevat geen 7 karakters</li>';
}
//Controle of email adres al bestaat. aka firstname ???
$emailQ = mysqli_query('SELECT FirstName FROM Persons WHERE FirstName = "' . $_POST['firstname'] . '"');
if(mysqli_num_rows($emailQ)>0) {
$foutmelding[] = '<li>Het gekozen e-mail adress bestaat al in het database!</li>';
}
if(empty($foutmelding)) { //Als foutmelding nog leeg is, query uitvoeren
$sql = 'INSERT INTO Persons (FirstName, LastName, Age) VALUES ("' . $_POST[firstname] . '","' . $_POST[lastname] . '","' . $_POST[age] . '")';
if(!mysqli_query($con,$sql)) {
echo 'Error: ' . $mysqli_error($con);
} else {
echo 'U bent nu geregistreerd';
}
} else { //Anders als foutmelding NIET leeg is
echo 'Er is iets mis gegaan!<ol>' . implode($foutmelding) . '</ol>';
}
}
?>
Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, null given in /home/gamersni/public_html/insert.php on line 25
U bent nu geregistreerd
ik krijg deze foutmelding als ik een mail adres gebruik dat al bestaat om te registreren
Mysqli_query heeft twee parameters nodig. Zie php.net/mysqli_query