login  Naam:   Wachtwoord: 
Registreer je!
 Forum

activatie login word niet verstuurd per mail

Offline remy_jacobs - 12/12/2006 22:29
Avatar van remy_jacobsNieuw lid die wil registeren krijg geen activatie mail weet iemand hoe je dat op kan lossen

<?php
if($_SERVER['REQUEST_METHOD'] == 'POST') {
// Hier komt alle behandeling van het formulier

// Mocht er een fout optreden, is het leuk dat de gebruiker niet alles opnieuw hoeft
// in te vullen. Daarom vullen we de array $post met de velden,
// uiteraard door htmlentities() gehaald (veiligheidsmaatregel).
// Wachtwoord moeten wel opnieuw ingevuld worden, nogmaals veiligheidsmaatsregel
$post = array(
'gebruikersnaam' => htmlentities($_POST['gebruikersnaam']),
'email' => htmlentities($_POST['email']));

// Verwerking

// Eerst enkele functies schrijven die de controle vergemakkelijken
function geregistreerd($zoek, $veld) {
// Ik plaats de query op meerdere lijnen voor de leesbaarheid
$qZoek = mysql_query("
SELECT COUNT(".$veld.")
FROM gebruikers
WHERE ".$veld." = '".mysql_real_escape_string($zoek)."'");

// Als de gebruikersnaam nog niet bestaat, geeft dit false, anders true
return (mysql_result($qZoek,0) == 0 ? false : true);
}

// De reguliere expressies voor de controle op e-mailadressen is door FangorN samengesteld :]
function is_email($in) {
list($local, $host) = explode('@', $in);
$pattern_local = '^([0-9a-z]*([-|_]?[0-9a-z]+)*)(([-|_]?)\.'
. '([-|_]?)[0-9a-z]*([-|_]?[0-9a-z]+)+)*([-|_]?)$';
$pattern_host = '^([0-9a-z]+([-]?[0-9a-z]+)*)(([-]?)\.([-]?)'
. '[0-9a-z]*([-]?[0-9a-z]+)+)*\.[a-z]{2,4}$';
$match_local = eregi($pattern_local, $local);
$match_host = eregi($pattern_host, $host);

return ($match_local && $match_host ? true : false);
}

// Hier zullen we de fouten in opslaan
$fouten = array();

if(empty($_POST['gebruikersnaam'])) {
$fouten[] = 'Er is geen gebruikersnaam opgegeven.';
} elseif(strlen($_POST['gebruikersnaam']) > 50) {
$fouten[] = 'De gebruikersnaam mag niet langer dan 50 tekens zijn.';
} elseif(geregistreerd($_POST['gebruikersnaam'], 'gebruikersnaam')) {
$fouten[] = 'De gebruikersnaam is reeds geregistreerd.';
}


if(empty($_POST['wachtwoord'])) {
$fouten[] = 'Er is geen wachtwoord opgegeven.';
} elseif($_POST['wachtwoord'] != $_POST['wachtwoord_herh']) {
$fouten[] = 'De wachtwoorden komen niet overeen.';
}


if(!is_email($_POST['email'])) {
$fouten[] = 'Er is geen geldig e-mailadres opgegeven.';
} elseif(geregistreerd($_POST['email'], 'email')) {
$fouten[] = 'Dit e-mailadres is reeds geregistreerd.';
}

// Het formulier is gecontroleerd, nu kijken we of er fouten opgetreden zijn
if(count($fouten) > 0) {
?>
<span style="color: #FF0000; ">De volgende fouten zijn opgetreden:</span>
<ul>
<?php foreach($fouten as $fout) { ?>
<li><?=$fout?></li>
<?php } ?>
</ul>
<?php
} else {
// Er zijn geen fouten, voer registratie uit!
mysql_query("INSERT INTO gebruikers
(gebruikersnaam, wachtwoord, email, datum)
VALUES
('".mysql_real_escape_string($_POST['gebruikersnaam'])."',
'".sha1($_POST['wachtwoord'])."',
'".mysql_real_escape_string($_POST['email'])."',
NOW()
)");

$gebruikers_id = mysql_insert_id();

// Een volledig willekeurige code van 40 tekens
$activatiecode = sha1(md5(microtime()*rand(1,10)));
mysql_query("INSERT INTO gebruikers_activaties
(gebruikers_id, sleutel)
VALUES
(".$gebruikers_id.", '".$activatiecode."')");

// Voor de regeleinden
define('EOL', "\n");
// Je kan deze mail uit uitbreiden, evt HTML mail,...
$mail = 'Bedankt voor je registratie, blaat, blaat, activeer hier:'.EOL;
$mail .= 'http://www.mijnsite.be/activatie.php?gebruiker='.$gebruikers_id.'&sleutel='.$activatiecode.EOL;
$mail .= 'Bye bye.';

$header = '"Mijnsite Account" <noreply@mijnsite.be>';

mail($_POST['email'], 'Je account activeren', $mail, $header);
?>
Er is een e-mail gestuurd met activatiedetails.
<?php
// Formulier verbergen
$verberg_form = true;
}

} else {
// Dit stuk wordt uitgevoerd als het formulier nog niet is verzonden.

// Het formulier is nog niet verzonden, dus is er ook geen $post array.
// we maken deze dus zelf aan met initiele waardes, om warnings te voorkomen.
$post = array(
'gebruikersnaam' => '',
'email' => '');
}

if(!isset($verberg_form)) {
?>
<form action="<?=htmlentities($_SERVER['REQUEST_URI'])?>" method="post">
Gewenste gebruikersnaam:<br />
<input type="text" name="gebruikersnaam" value="<?=$post['gebruikersnaam']?>" /><br />
Wachtwoord:<br />
<input type="password" name="wachtwoord" /><br />
Wachtwoord herhalen:<br />
<input type="password" name="wachtwoord_herh" /><br />
E-mailadres:<br />
<input type="text" name="email" value="<?=$post['email']?>" />
<br />
<br />
<input type="submit" value="Registreer" />
</form>
<?php
}
?> </th>
<th width="180" height="264" align="center" valign="top" scope="col"> <?php
if($_SERVER['REQUEST_METHOD'] == 'POST') {
// Dit is niet mijn gewoonte om queries op deze manier in te springen, maar om de layout
// van Sitemasters niet naar de knoppen te helpen doe ik dit even gek 

$qLogin = mysql_query("SELECT id FROM gebruikers WHERE
gebruikersnaam = '".mysql_real_escape_string($_POST['gebruikersnaam'])."' AND
wachtwoord = '".sha1($_POST['wachtwoord'])."'");

// Met deze query selecteren we het gebruikers-id van de gebruikersnaam en controleren we of
// de account geactiveerd is in 1 keer. Als je deze niet snapt, lees hem dan 20 keer 
// Je kan natuurlijk ook een tutorial over dit soort queries lezen, alhoewel
// ze poepsimpel zijn IMO.
// Deze query mag overigens geen resultaten opleveren om te mogen inloggen. Als deze
// wél een resultaat oplevert is de account nog niet geactiveerd (en bestaat de
// activatiedata dus nog).
$qActivatie = mysql_query("SELECT COUNT(id) FROM gebruikers, gebruikers_activaties WHERE
gebruikers.gebruikersnaam = '".mysql_real_escape_string($_POST['gebruikersnaam'])."' AND
gebruikers.id = gebruikers_activaties.gebruikers_id");

if(mysql_result($qActivatie,0) != 0) {
echo 'De account is nog niet geactiveerd.';
} elseif(mysql_num_rows($qLogin) == 0) {
echo 'De gebruikersnaam/wachtwoord combinatie is niet correct.';
} else {
// Alles ok, inloggen dus.
// Nu is 1 ding belangerijk:
// ZORG DAT ER EEN session_start() GEPLAATST IS, HETZIJ IN JE INDEX.PHP WAAR
// DEZE PAGINA IN GEPLAATS WORDT, HETZIJ BOVENAAN DEZE PAGINA (ALS ER GEEN
// INCLUDESYSTEEM IS)!!!
$_SESSION['gebruiker'] = mysql_result($qLogin, 0);
$_SESSION['gebruikersnaam'] = $_POST['gebruikersnaam'];
// Mocht je nog andere data willen in je sessie,
// zoals een level, dien je dit hier te plaatsen.
?>
Je bent succesvol ingelogged. Klik <a href="controlepaneel.php">hier</a> om naar je controlepaneel te gaan.
<?php
}
}
?>
<form action="<?=htmlentities($_SERVER['REQUEST_URI'])?>" method="post">
Gebruikersnaam:<br />
<input type="text" name="gebruikersnaam" /><br />
Wachtwoord:<br />
<input type="password" name="wachtwoord" /><br />
<br />
<input type="submit" value="Inloggen die handel" />
</form>
<a href="registeren.php" title="Registeren">Registeren</a><br></th>
</tr>

2 antwoorden

Gesponsorde links
Offline vinTage - 12/12/2006 22:32
Avatar van vinTage Nieuw lid letterlijk gecopierd, heb je wel de database, ondersteund je host mail meuk ?

en code tags geeft geilere kleurtjes
Offline marten - 12/12/2006 23:16
Avatar van marten Beheerder en we hebben er zelfs een speciale website voor geopend namelijk www.plaatscode.be
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.392s