Avatar billede nh92 Nybegynder
25. februar 2009 - 18:18 Der er 22 kommentarer

Brugeraktivering

Hej med jer eksperter.

Jeg skal lige bruge lidt ekspert hjælp her. Jeg har lavet et ganske alm. brugerlogin, hvor den indsætter dataerne ind i mysql databasen, også hiver dem ud i en session når de nu er oprettet.

Men jeg skal lave det sådan, at man skal have aktiveret sin bruger først. Hvordan gør jeg det? Jeg skal bare have en nem måde at komme ind og sige "OK" til de her brugere.

Kan man måske lave de som 2 databaser nærmest, hvor den automatisk indsætter den nyoprettede bruger i en database, hvor der ingen rettigheder er, men når jeg så trykker godkend f.eks. bliver dataerne flyttet over i en anden database?

Håber i forstår hvad jeg mener.
Avatar billede fant0mas Nybegynder
25. februar 2009 - 18:42 #1
Den med to tabeller er vist overdrevet, hvad med bare at tilføje et bit felt? Eller regner du med der kommer flere mellem stadier?
Avatar billede psychopixi Nybegynder
25. februar 2009 - 18:54 #2
Tricket er vel at generere en passende lang random streng og putte i databasen ved registrering. Når brugeren så trykker på et link til en "bekræft registrering"-side, så henter du strengen og undersøger om den er identisk med den i databasen. Hvis den er det, kan du f.eks. sætte en kolonne der kunne hedde "aktiveret" lig med 1.

På den måde ved du at en bruger er aktiveret hvis og kun hvis aktiveret er lig med 1.
Avatar billede fant0mas Nybegynder
25. februar 2009 - 20:00 #3
Jeg læser det som brugeren ikke selv skal aktivere sig, men derimod administrator.
Avatar billede psychopixi Nybegynder
25. februar 2009 - 20:07 #4
Ja, det gør da kodningen en del lettere - men konceptet med en "aktiveret" kolonne i databasen er efter min mening stadig en fornuftig løsning.
Avatar billede nh92 Nybegynder
25. februar 2009 - 21:58 #5
Det der med to databaser, var bare for at illustrerer hvordan man muligvis kunne lave det? Har aldrig arbejdet med det før, så skal have det forklaret meget grundigt. Men forstår ikke helt hvad du mener psychopixi ?? Jeg skal, som fant0mas nævner have det sådan at det er en administrator der skal aktiverer brugerne. På den nemmeste måde ;)
Avatar billede psychopixi Nybegynder
25. februar 2009 - 23:13 #6
Ok.
Følgende er blot eksempler, og du må selv rette dem til så de passer dit site helt korrekt.

Start med at oprette en kolonne i din database ved navn "active".

Under bruger aktivering laver du så:
mysql_query("INSERT INTO brugere  (id,brugernavn,password,active) VALUES(NULL, '$brugernavn','$password','0')");

I dit admin modul bruger du så:
$result = mysql_query("SELECT * FROM brugere WHERE active = '0'");
while($r=mysql_fetch_array($result){
// træk data ud - og brug en mysql update på de brugere du vil gøre aktive.
}

I login modulet sørger du så for at teste om en brugers "active" felt er lig med 1.
Avatar billede doncarnage Nybegynder
26. februar 2009 - 03:12 #7
Har selv lige lavet et lignende system vha. http://www.phpeasystep.com/phptu/24.html

Der bliver oplysningerne først smidt i en midlertidig tabel, hvorefter de ved aktivering bliver flyttet hen i den aktiverede tabel - og herefter slettes fra den midlertidige tabel..

Det fungerer ganske fint for mig, men spørger af ren nysgerrighed hvorfor i andre mener det er overdrevet? Er det pga. størrelsen og server belastning eller hvordan?
Avatar billede fant0mas Nybegynder
26. februar 2009 - 07:31 #8
Der er ikke noget galt med det, men det virker bare unødvendigt, og komplicerer ting i senere processer. Ved logind skal du lede efter brugeren i 2 tabeller for af afgøre om der er tale om en aktiveret bruger eller ikke. Det samme ved oprettelse af ny bruger, er det mere besværligt at se om nogen skulle have det samme brugernavn eller email.

Desuden er det heller ikke en god idé at slette brugere fra sine tabeller, brug et timestamp i stedet til at illustrere en bruger er slettet, så har du historik der måske kunne blive nyttig senere, og et fejlklik eller programmerings fejl er mindre fatal.
Avatar billede doncarnage Nybegynder
26. februar 2009 - 14:18 #9
Ved login behøves man ikke lede efter brugeren i 2 tabeller, i hvert fald ikke i mit tilfælde ;) Men det gør sig godt nok gældende ved oprettelsen - det har du ret i..
Avatar billede nh92 Nybegynder
26. februar 2009 - 14:31 #10
Jeg prøver lige din guide doncarnage. Men jeg får denne fejl:

Warning: mail() [function.mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in W:\www\mirakelfrugt.dk\signup_ac.php on line 94
Cannot send Confirmation link to your e-mail address

Nogle der ved hvad jeg kan gøre her?
Avatar billede doncarnage Nybegynder
26. februar 2009 - 14:37 #11
Er det på localhost du prøver at køre den, hvor du får den fejl der? I så fald, så prøv at smide den op på et webhotel. Jeg får stort set samme fejl når jeg prøver at køre min side på localhost pga min smtp ikke er sat op til at jeg kan sende mails
Avatar billede fant0mas Nybegynder
26. februar 2009 - 14:54 #12
doncarnage:
Hvis du ikke finder ham i den første tabel, er du da nød til at se om han er oprettet i den anden men bare ikke aktiveret.
Avatar billede nh92 Nybegynder
26. februar 2009 - 14:59 #13
Nej, jeg har smidt den op på et webhotel.
Avatar billede doncarnage Nybegynder
26. februar 2009 - 15:05 #14
fant0mas:
Jeg leder ikke efter ham i første tabel, da det kun er den midlertidige tabel.. Jeg nøjes med at lede efter ham i den registrerede tabel :)

nh92:
Så ved jeg desværre ikke lige hvad problemet er. Har du husket at rette $host til i config.php, så den ikke er sat til localhost?
Avatar billede nh92 Nybegynder
26. februar 2009 - 15:09 #15
Den skal da stå på localhost, selvom den ligger online skal den ikke?. Det gør den da i hvert fald på mine andre sider, og der er ingen problemer?
Avatar billede fant0mas Nybegynder
26. februar 2009 - 15:12 #16
doncarnage :
Ok, men det er bare ikke særligt brugervenligt. Det er vel relevant for en bruger at vide om hans profil afventer godkendelse, eller slet ikke er registreret i systemet?
Avatar billede doncarnage Nybegynder
26. februar 2009 - 15:13 #17
Det virker mystisk synes jeg :) På mit webhotel (web10) skal jeg ændre det.. Her skal host fx sættes til db.mitdomæne.dk, og så skal user og pw naturligvis også sættes til det som jeg bruger til mit webhotel..

Men jeg tør ikke sige om det er forskelligt fra udbyder til udbyder
Avatar billede doncarnage Nybegynder
26. februar 2009 - 15:15 #18
fant0mas:
Det er lavet på den måde at brugeren ikke kan logge ind før han har aktiveret sin bruger via. en aktiveringsmail, som bliver tilsendt ved brugeroprettelsen. Når han benytter sig af aktiveringslinket bliver brugeren flyttet fra den midlertidige tabel til den registrerede tabel, og derefter kan han så logge ind.. Så på det punkt mener jeg nu nok det er brugervenligt ;)
Avatar billede nh92 Nybegynder
26. februar 2009 - 15:15 #19
Jeg bruger one.com, hvor jeg altid bare har skrevet localhost. Så tror det er forskelligt. Men andre der ved hvad jeg kan gøre?
Avatar billede nh92 Nybegynder
26. februar 2009 - 16:05 #20
Ups. Det var mig der sad og klokkede i det. Nu virker det ;)
Avatar billede nh92 Nybegynder
26. februar 2009 - 16:58 #21
Jeg fik det til at virke midlertidig. Men nu er jeg stødt ind i problemer igen. Har lavet lidt om på det hele så der står sådan her i signup_ac:

        <?
include('mysql2.php');

// table name
$tbl_name=temp_members_db;

// Random confirmation code
$confirm_code=md5(uniqid(rand()));

// values sent from form
$brugernavn=$_POST['brugernavn'];
$password=$_POST['password'];
$firmanavn=$_POST['firmanavn'];
$email=$_POST['email'];
$efternavn=$_POST['efternavn'];
$fornavn=$_POST['fornavn'];
$adresse1=$_POST['adresse1'];
$adresse2=$_POST['adresse2'];
$by=$_POST['bt'];
$land=$_POST['land'];
$telefon=$_POST['telefon'];
$fax=$_POST['fax'];

// Insert data into database
$sql="INSERT INTO $tbl_name(confirm_code, brugernavn, password, firmanavn, email, efternavn, fornavn, adresse1, adresse2, by, land, telefon, fax)VALUES('$confirm_code', '$brugernavn', '$password', '$firmanavn', '$email', '$efternavn', '$fornavn', '$adresse1', '$adresse2', '$by', '$land', '$telefon', '$fax')";
$result=mysql_query($sql);

// if suceesfully inserted data into database, send confirmation link to email
if($result){

// ---------------- SEND MAIL FORM ----------------

// send e-mail to ...
$to= ("n-haarup@hotmail.com");

// Your subject
$subject="Ny regestrering";

// From
$header="from: Mirakelfrugt.dk <Test>";

// Your message
$message="Ny registrering modtaget \r\n";
$message.="Klik på dette link, hvis du vil accepterer: \r\n";
$message.="http://www.stoltheden.dk/TEST/confirmation.php?passkey=$confirm_code\r\n";
$message.="Brugernavn: ". $_POST['brugernavn']."\r\n";
$message.="Password: ". $_POST['password']."\r\n";
$message.="Firmanavn: ". $_POST['firmanavn']."\r\n";
$message.="Email: ". $_POST['email']."\r\n";
$message.="Efternavn: ". $_POST['efternavn']."\r\n";
$message.="Fornavn: ". $_POST['fornavn']."\r\n";
$message.="Adresse1: ". $_POST['adresse1']."\r\n";
$message.="Adresse2: ". $_POST['adresse2']."\r\n";
$message.="By: ". $_POST['by']."\r\n";
$message.="Land: ". $_POST['land']."\r\n";
$message.="Telefon: ". $_POST['telefon']."\r\n";
$message.="Fax: ". $_POST['fax']."\r\n";

// send email
$sentmail = mail($to,$subject,$message,$header);

}

// if not found
else {
echo "Not found your email in our database";
}

// if your email succesfully sent
if($sentmail){
echo "Your Confirmation link Has Been Sent To Your Email Address.";
}
else {
echo "Cannot send Confirmation link to your e-mail address";
}

?>

Og sådan her i opret.php:

  <table width="350" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td><form name="form1" method="post" action="signup_ac.php">
<table width="100%" border="0" cellspacing="4" cellpadding="0">
<tr>
<td width="76">Brugernavn*</td>
<td width="3">:</td>
<td width="305"><input name="brugernavn" type="text" id="brugernavn" size="30"></td>
</tr>
<tr>
<td width="76">Password*</td>
<td width="3">:</td>
<td width="305"><input name="password" type="password" id="password" size="30"></td>
</tr>
<tr>
<td width="76">Firmanavn*</td>
<td width="3">:</td>
<td width="305"><input name="firmanavn" type="text" id="firmanavn" size="30"></td>
</tr>
<tr>
<td width="76">Email*</td>
<td width="3">:</td>
<td width="305"><input name="email" type="text" id="email" size="30"></td>
</tr>
<tr>
<td width="76">Kontaktpersons Efternavn*</td>
<td width="3">:</td>
<td width="305"><input name="efternavn" type="text" id="efternavn" size="30"></td>
</tr>
<tr>
<td width="76">Kontaktpersons Fornavn*</td>
<td width="3">:</td>
<td width="305"><input name="fornavn" type="text" id="fornavn" size="30"></td>
</tr>
<tr>
<td width="76">Adresse 1*</td>
<td width="3">:</td>
<td width="305"><input name="adresse1" type="text" id="adresse1" size="30"></td>
</tr>
<tr>
<td width="76">Adresse 2</td>
<td width="3">:</td>
<td width="305"><input name="adresse2" type="text" id="adresse2" size="30"></td>
</tr>
<tr>
<td>By*</td>
<td>:</td>
<td><input name="by" type="text" id="by" size="30"></td>
</tr>
<tr>
<td>Land*</td>
<td>:</td>
<td><input name="land" type="text" id="land" size="30"></td>
</tr>
<tr>
<td>Telefon nr.*</td>
<td>:</td>
<td><input name="telefon" type="text" id="telefon" size="30"></td>
</tr>
<tr>
<td>Fax (ikke obligatorisk)</td>
<td>:</td>
<td><input name="fax" type="text" id="fax" size="30"></td>
</tr>
<tr>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td><input type="submit" name="Submit" value="Submit"> &nbsp;
<input type="reset" name="Reset" value="Reset"></td>
</tr>
</table>
</form></td>
</tr>
<tr>
<td>* Skal udfyldes</td>
</tr>
</table>

Har opdateret databasen, og kigget igennem for fejl? Men jeg kan ikke finde nogle? Men når jeg via hjemmeside trykker send, siger den, "Not found your email in our databaseCannot send Confirmation link to your e-mail address "
Avatar billede nh92 Nybegynder
01. marts 2009 - 13:33 #22
Nogen der kan se en fejl??
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester