Avatar billede manse999 Nybegynder
04. april 2005 - 23:11 Der er 21 kommentarer og
1 løsning

bekræfte tilmeldingen pr mail

Hej med jer.
Jeg håber i kan hjælpe mig. Jeg er ikke klar over, om det er PHP gruppen jeg skal stille mit spm, men jeg prøver.
På min side har jeg lavet en tilmeldingsformular, hvor brugeren bl.a. skal indtaste sin mailadresse. For at kontrollere at denne mailadresse rent faktisk findes, vil jeg gerne, at han automatisk får tilsendt en mail hvor der er et "bekræftigelseslink" - Altså noget som kan give mig vished om, at denne mailadresse rent faktisk findes, og at det er den rigtige brugeren har indtastet.
Jeg ved ikke helt hvordan noget sådant fungerer i praksis, men jeg kunne forestille mig, at jeg først fik et praj, når brugeren har klikket på bekræftigelseslinket.
Hvordan laves noget sådant, så det kører automatisk?
Avatar billede bromer Nybegynder
04. april 2005 - 23:14 #1
Når en bruger tilmelder sig registerer du vedkommendes email adresse samt f.eks. en md5 hash som du kan vælge tilfældigt. Linket skal så sende email og hash i urlen, hvor du så kan checke hvorvidt det stemmer med det der er registeret
Avatar billede jaw Nybegynder
04. april 2005 - 23:18 #2
Eller lav et "aktiv" felt i din database (hvis du bruger sådan én), der er 0 indtil brugeren aktiverer sin konto, og ellers 1 efter registreringen...
Avatar billede bromer Nybegynder
04. april 2005 - 23:18 #3
Yeps, de to ting skal naturligvis kombineres
Avatar billede jaw Nybegynder
04. april 2005 - 23:19 #4
Teamwork :)
Avatar billede bromer Nybegynder
04. april 2005 - 23:21 #5
-- tilmeld.php --
// Antag at vi har $email
mail($email,"aktiver",sprintf("Aktiver med dette link %s/activate.php?email=%s&hash=%s",$_SERVER['SERVER_NAME'],$email,md5($email . "hemmelig streng")));


-- activate.php
if ($_GET['hash'] == md5($_GET['email'] . "hemmelig streng")) {
mysql_query("UPDATE usertable set activ = 'y' WHERE email = '" . $_GET['email'] . "'");
}
Avatar billede bromer Nybegynder
04. april 2005 - 23:22 #6
manse: du skal tilrette den kode jeg har givet dig, men det giver et overblik over den måde det kan gøres på.

jaw: altid :)
Avatar billede manse999 Nybegynder
04. april 2005 - 23:28 #7
1000 tak for de hurtige svar.
Jeg må indrømme, at jeg ikke har ret meget forstand på dybere kodning... Jeg er vist egentlig bedst til at copy / paste en stump kode ind på siden.
Og databaser... Der står jeg desværre også af.
Lyder det som om det er for stor en opgave for sådan een som mig, eller er det i virkeligheden ret simpelt hvis man bruger lidt tid.
Og hash.... Det er da noget der ryges :-)
Avatar billede jaw Nybegynder
04. april 2005 - 23:30 #8
Det er sådan set ikke så svært - især hvis man vil ofre lidt tid. Men hvordan registrerer du brugeren og hans info?
Avatar billede manse999 Nybegynder
04. april 2005 - 23:36 #9
blot ved en formular oprettet i frontpage.
Det er sådan set en maillingliste brugeren skal kunne tilmelde sig, og lige pt putter jeg manuelt email adresserne i et excel ark. Det er ved at blive lidt omfattende så jeg kunne godt tænke mig noget automatiseret. Samtidig er der mange der indtaster mailadresser som ikke eksisterer, så dem vil jeg gerne sortere fra med en valideringsmail
Avatar billede jaw Nybegynder
04. april 2005 - 23:47 #10
Hmmm, så kommer det jo nok til at tage en del tid. Hvis jeg var dig, ville jeg først starte med at få sat dine brugerinfo/mailadresser ind i en MySQL-database. Uden det, så bliver valideringen lidt svær.

Ellers så skal du jo lave den løsning at du manuelt sender dem en mail med et link, der så sender dig en valideringsmail. Så lave et felt i dit excel-ark hvor du skriver om de er validerede eller ej :) Nok lidt tosset løsning, men afhængigt af hvor mange du har osv. osv. så kan det jo lade sig gøre når du allerede har det nu...
Avatar billede bromer Nybegynder
05. april 2005 - 00:12 #11
manse999: har du PHP installeret på din server?
Avatar billede manse999 Nybegynder
05. april 2005 - 08:39 #12
ja jeg har installeret php
Avatar billede bromer Nybegynder
05. april 2005 - 11:09 #13
Okay, så kan du bruge det her jeg lige har fedtet sammen. Der er 3 variabler i toppen som du kan rette på. Den første er din emailadresse du modtager emails på når folks email er blevet valideret korrekt. Den anden er hvilken fil PHP scriptet kan bruge til at logge data. Hvis denne ikke findes eller PHP ikke har rettigheder vil man få en fejlbesked når man kører scriptet. Den sidste er hvor længe der må gå fra man tilføjer sin email til man skal have klikket på linket. Det er angivet i sekunder så ligenu er det sat til 30 minutter.

For at tilføje en emailadresse sender du folk til "scriptname.php?email=<deresemail>", og så burde resten ske automatisk.

<?

// This mail will recieve the subscription emails then they are validated
$admin_email = '';

// A file used to store the emails not validated
$validate_file = 'emailvalidate.txt';

// Timeout
$timeout = 60*30;

if (!(file_exists($validate_file) && is_readable($validate_file) && is_writeable($validate_file))) {
    print "Logfilen findes ikke, eller scriptet kan ikke læse eller skrive til den";
    exit();
}

if ($_GET['activate']) {
    if (file_exists($validate_file)) {
      $lines = file($validate_file);
      $write_through = array();
      if (count($lines) > 0) {
            $clines = count($lines);
            for ($i = 0;$i < $clines; $i++) {
                list($email,$time) = explode(":",$lines[$i]);
                if ($time + $timeout > time()) {
                    if ($_GET['hash'] == md5('activate ' . md5($email))) {
                        mail($admin_email,'email validated correct','email: ' . $email);
                        print "din email adresse blev valideret korrekt";
                        $sendt = true;
                    } else {
                        $write_through[] = $lines[$i];
                    }
                }
            }

            // Write the rest to the file again
            $fp = fopen($validate_file,'w');
            $clines = count($write_through);
            for($i = 0;$i < $clines;$i++) {
                  fwrite($fp,$write_through[$i]);
            }
      }
    }   

    if (!$sendt) {
        print "Der gik noget galt. din mail er ikke blevet sendt";
    }
} elseif($_GET['email']) {
    $activate_hash = md5('activate ' . md5($_GET['email']));
    $link = $_SERVER['SERVER_NAME'] . $_SERVER['PHP_SELF'] . '?activate=' . $_GET['email'] . '&hash=' . $activate_hash;

    if (file_exists($validate_file)) {
        $fp = fopen($validate_file,'a+');
        fwrite($fp,sprintf("\n%s:%s",$_GET['email'],time()));
    }

    mail($_GET['email'],'klik på linket for at aktivere det',$link);
    print "Der er sendt en aktiveringsmail med et link du skal klikke på";
}

?>
Avatar billede manse999 Nybegynder
05. april 2005 - 23:55 #14
FANTASTISK !!!!
1000 tak for indsatsen bromer
Avatar billede bromer Nybegynder
06. april 2005 - 07:08 #15
Det var så lidt, godt jeg kunne hjælpe :)
Avatar billede manse999 Nybegynder
06. april 2005 - 09:24 #16
Hej igen bromer.
Avatar billede manse999 Nybegynder
06. april 2005 - 09:26 #17
Jeg er meget taknemmelig over det du har hjulpet mig med, men jeg har lige et tillægsspørgsmål:
Du skriver:
For at tilføje en emailadresse sender du folk til "scriptname.php?email=<deresemail>", og så burde resten ske automatisk.
Hvordan får jeg deres email fra et tekstfeldt ind i URL´en - sådan rent praktisk?
Avatar billede bromer Nybegynder
06. april 2005 - 09:42 #18
Det kan du gøre sådan her:

<form action="scriptname.php" method="get">
<input type="text" name="email"/>
<input type="submit" value="Send" name="submit"/>
</form>
Avatar billede manse999 Nybegynder
06. april 2005 - 15:32 #19
Hej igen bromer.
Jeg har lige et spm mere. Det kører faktisk helt perfekt bortset fra, at der ikke kommer http:// foran linket, hvilket vil sige, at folk ikke blot kan klikke på linket. Det virker kun, hvis det copy/pastes ind i adresselinien.
Kan du hjælpe mig med det også?
Avatar billede bromer Nybegynder
06. april 2005 - 15:43 #20
bare smid http:// foran i linket :)
Avatar billede manse999 Nybegynder
06. april 2005 - 15:56 #21
Hej igen bromer. Det er sandelig hurtig respons.
Det kan godt være, at jeg er komplet PHP mongol, men jeg kan ikke se, hvor linket bliver generert, og dermed hvor jeg skal indsætte http://
Kan du udpensle det?
Avatar billede bromer Nybegynder
06. april 2005 - 15:58 #22
$link = "http://" . $_SERVER['SERVER_NAME'] . $_SERVER['PHP_SELF'] . '?activate=' . $_GET['email'] . '&hash=' . $activate_hash;

sådan :)
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