Email een keer gebruiken

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Tom Stock

Tom Stock

10/10/2013 21:59:47
Quote Anchor link
beste iedereen,

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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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);
?>


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>
 
PHP hulp

PHP hulp

17/11/2024 11:46:02
 
- Ariën  -
Beheerder

- Ariën -

10/10/2013 22:26:09
Quote Anchor link
Kijk eens naar de UNIQUE functie in MySQL. Deze geeft in het geval van een unieke mailadres een error af.
Welke errorcode weet ik zo niet uit mijn hoofd.
Verder ben je zeer gevoelig voor SQL-injection
 
Chris -

Chris -

11/10/2013 09:38:21
Quote Anchor link
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
 
Ward van der Put
Moderator

Ward van der Put

11/10/2013 10:26:07
Quote Anchor link
Als je het e-mailadres gebruikt als unieke of primaire sleutel, dan kun je met ON DUPLICATE KEY een INSERT en een UPDATE combineren.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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'
Gewijzigd op 11/10/2013 10:26:24 door Ward van der Put
 
Tom Stock

Tom Stock

11/10/2013 16:39:18
Quote Anchor link
Het is soort van gelukt, je kan geen twee dezelfde email adressen invoegen maar je krijgt geen duidelijke error. wat te doen?
 
Dennis WhoCares

Dennis WhoCares

11/10/2013 17:06:17
Quote Anchor link
Zou je niet gewoon eerst controlleren met een SELECT query of dit email adres al voorkomt?
Zo ja, een foutmelding geven, zo nee doorgaan met registreren?
 
Bas de jong

bas de jong

11/10/2013 17:13:45
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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;
}
}

?>

en dan
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
if(email_exists($email) === true){
echo "sorry maar dit emailadres is al bij ons geregistreerd";
}
else{
//registreren met dit emailadres is toegestaan
}
?>
 
Tom Stock

Tom Stock

11/10/2013 18:25:55
Quote Anchor link
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)
 
Dennis WhoCares

Dennis WhoCares

11/10/2013 18:35:57
Quote Anchor link
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.
 
Tom Stock

Tom Stock

11/10/2013 18:47:13
Quote Anchor link
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.

Hoe bedoel je?
alles er achter plakken?
 
- Ariën  -
Beheerder

- Ariën -

11/10/2013 19:25:42
Quote Anchor link
Kijk even logisch en probeer eens wat uit ;)
 
Dennis WhoCares

Dennis WhoCares

11/10/2013 20:27:27
Quote Anchor link
Zoiets zou het dan moeten worden...
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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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>';
  }
 }

?>
 
Tom Stock

Tom Stock

12/10/2013 11:54:53
Quote Anchor link
Warning: mysqli_query() expects at least 2 parameters, 1 given in /home/gamersni/public_html/insert.php on line 24

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
 
- Ariën  -
Beheerder

- Ariën -

12/10/2013 12:09:47
Quote Anchor link
Mysqli_query heeft twee parameters nodig. Zie php.net/mysqli_query
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.