NicholasWalker Skrevet 6. juni 2010 Del Skrevet 6. juni 2010 Heisann, lurte bare på om noen vet om et bra PHP email verification system som funker. Har allerede registrerings form, login form, forum og alt sånn men jeg vil ikke at folk skal lage hundrevis av medlemmer å spamme på forumet osv. Har testet noen av dem som allerede ligger ute men det ser ikke ut som de som har lagt dem har testet dem for de er fulle av errors. Takk på forhånd Lenke til kommentar
Sk!ppy Skrevet 6. juni 2010 Del Skrevet 6. juni 2010 Bruk preg_match, og lag en regex som funker. Beste rådet. Lenke til kommentar
NicholasWalker Skrevet 6. juni 2010 Forfatter Del Skrevet 6. juni 2010 Lærer enda php så forsto ikke helt hva du mente... Lenke til kommentar
Sk!ppy Skrevet 6. juni 2010 Del Skrevet 6. juni 2010 (endret) preg_match php-manualen er et fint sted. Endret 6. juni 2010 av Sk!ppy Lenke til kommentar
Ernie Skrevet 6. juni 2010 Del Skrevet 6. juni 2010 Bruk preg_match, og lag en regex som funker. Beste rådet. Ehh ... nei? Har man PHP 5.2 eller bedre er filter utvilsomt en langt bedre løsning. Lenke til kommentar
Sk!ppy Skrevet 6. juni 2010 Del Skrevet 6. juni 2010 Om du har PHP 5.2, så absolutt. Da lærte jeg noe nytt idag jeg og, den linken må nesten bokmerkes Lenke til kommentar
NicholasWalker Skrevet 6. juni 2010 Forfatter Del Skrevet 6. juni 2010 (endret) Om du har PHP 5.2, så absolutt. Da lærte jeg noe nytt idag jeg og, den linken må nesten bokmerkes ÅJA, jeg mente den andre email verification, ikke validation.. umm. Sånn at de må klikke på en activation link for og registrere seg på emailen sin. Bruker 5.2 ja... Endret 6. juni 2010 av WeExClan Lenke til kommentar
Sk!ppy Skrevet 6. juni 2010 Del Skrevet 6. juni 2010 Oja, da er det ikke verre en å bare ta å lage en md5 hash av eposten, sende den til dem og en link, og skjekke opp om hash'en stemmer. Lenke til kommentar
NicholasWalker Skrevet 6. juni 2010 Forfatter Del Skrevet 6. juni 2010 Oja, da er det ikke verre en å bare ta å lage en md5 hash av eposten, sende den til dem og en link, og skjekke opp om hash'en stemmer. Hehe, litt mer detaljer om hvordan jeg gjør det plis Lenke til kommentar
Sk!ppy Skrevet 6. juni 2010 Del Skrevet 6. juni 2010 Send en epost til eposten som bruker oppga, som verifikasjonsnøkkel bruker du f.eks md5($epost); og legger i en egen rad. Du sender da en link httP://webside/activate.php?id=XXXXXX i activate, så skjekker du om denne id finnes i tabellen hos noen brukere. Kanskje jeg er litt dårlig til å forklare. Lenke til kommentar
NicholasWalker Skrevet 6. juni 2010 Forfatter Del Skrevet 6. juni 2010 Okei, forsto det ikke helt, hvordan kan jeg endre denne til og bli sånn? : <?php //signup.php include 'connect.php'; echo '<h3>Registrer deg</h3><br />'; if($_SERVER['REQUEST_METHOD'] != 'POST') { /*the form hasn't been posted yet, display it note that the action="" will cause the form to post to the same page it is on */ echo '<form method="post" action=""> Brukernavn: <input type="text" name="user_name" /><br /> Passord: <input type="password" name="user_pass"><br /> Bekreft Passord: <input type="password" name="user_pass_check"><br /> Email: <input type="email" name="user_email"><br /> <input type="submit" value="Registrer deg" /> </form>'; } else { /* so, the form has been posted, we'll process the data in three steps: 1. Check the data 2. Let the user refill the wrong fields (if necessary) 3. Save the data */ $errors = array(); /* declare the array for later use */ if(isset($_POST['user_name'])) { //the user name exists $userName = $_POST['user_name']; if(strlen($_POST['user_name']) > 30) { $errors[] = 'Viss du har symboler og tegn i navnet ditt som "_" eller "/", osv. Send en mail til meg: [email protected], da legger jeg inn allt manuelt i systemet til vi fikser denne feilen. :-D'; } if(strlen($_POST['user_name']) > 30) { $errors[] = 'Brukernavnet kan ikke inneholde mer enn 30 bokstaver og tall.'; } } else { $errors[] = 'Brukernavn feltet er tomt, DUH!.'; } if(isset($_POST['user_pass'])) { if($_POST['user_pass'] != $_POST['user_pass_check']) { $errors[] = 'Passordene matcher ikke, fiks det!'; } } else { $errors[] = 'Passord feltet kan jo ikke være tomt, er du helt tett i pappen eller?'; } if(!empty($errors)) /*check for an empty array, if there are errors, they're in this array (note the ! operator)*/ { echo 'Uh-oh.. a couple of fields are not filled in correctly..<br /><br />'; echo '<ul>'; foreach($errors as $key => $value) /* walk through the array so all the errors get displayed */ { echo '<li>' . $value . '</li>'; /* this generates a nice error list */ } echo '</ul>'; } else { //the form has been posted without, so save it //notice the use of mysql_real_escape_string, keep everything safe! //also notice the sha1 function which hashes the password $query = sprintf("INSERT INTO `users` (`user_name`, `user_pass`, `user_email`, `user_date`, `last_online`, `user_level`, `user_ip`) VALUES ('%s', '%s', '%s', NOW(), NOW(), '%s', '%s')", mysql_real_escape_string($_POST['user_name']), sha1($_POST['user_pass']), mysql_real_escape_string($_POST['user_email']), $_SERVER['REMOTE_ADDR']); //debug echo $query."<br />"; // sjekk at sql'en ser riktig ut $result = mysql_query($sql); if(!$result) { //something went wrong, display the error echo 'Something went wrong while registering. Please try again later.'; //echo mysql_error(); //debugging purposes, uncomment when needed } else { echo 'Din registrering er nå fullført, <a href="signin.php">logg inn</a> og start postinga :-)'; } } } ?> Lenke til kommentar
Sk!ppy Skrevet 6. juni 2010 Del Skrevet 6. juni 2010 (endret) Du legger til et felt til i databasen. f.eks user_verification. Du legger da til det samme feltet i queryen din, og i det er infoen du skal sette inn md5($epost). Du sender samtidig en epost til brukeren, som inneholder http://websiden.din/activate.php?id=innholdetiuserverification I activate.php har du en kode alà dette: <?php $id = formforbeskyttele($_REQUEST['id']); if(isset($id)) { $select = sprintf("SELECT * FROM `brukertabell` WHERE `user_verification` = '%s'", $id); if(mysql_query($select)) { // Oppdater user_verification til TRUE. } } ?> ( Den koden vil neppe fungere uten små endringer. ) Endret 6. juni 2010 av Sk!ppy Lenke til kommentar
NicholasWalker Skrevet 6. juni 2010 Forfatter Del Skrevet 6. juni 2010 Du legger til et felt til i databasen. f.eks user_verification. Du legger da til det samme feltet i queryen din, og i det er infoen du skal sette inn md5($epost). Du sender samtidig en epost til brukeren, som inneholder http://websiden.din/activate.php?id=innholdetiuserverification I activate.php har du en kode alà dette: <?php $id = formforbeskyttele($_REQUEST['id']); if(isset($id)) { $select = sprintf("SELECT * FROM `brukertabell` WHERE `user_verification` = '%s'", $id); if(mysql_query($select)) { // Oppdater user_verification til TRUE. } } ?> ( Den koden vil neppe fungere uten små endringer. ) Skal prøve det. Men er dette en ny fil eller den samme, og er $id user_id i mitt tilfelle? Lenke til kommentar
Sk!ppy Skrevet 6. juni 2010 Del Skrevet 6. juni 2010 $id er i dette tilfelle ?id=XX. Ikke user_id. Lenke til kommentar
NicholasWalker Skrevet 6. juni 2010 Forfatter Del Skrevet 6. juni 2010 Huff, forstår ikke hvordan jeg skal sette det sammen me den jeg har for at det skal fungere.. Lenke til kommentar
Sk!ppy Skrevet 6. juni 2010 Del Skrevet 6. juni 2010 Tror kanskje du må lese litt mer på logikk ang. koding. Jeg kan nesten ikke hjelpe så veldig mye mer nå føler jeg, uten å kode for deg - og det har jeg ikke tenkt til. ( Jeg drar vekk en uke nå, så nå må nesten noen andre hjelpe deg fra kl 8 imorgen ) Lenke til kommentar
greygenic Skrevet 7. juni 2010 Del Skrevet 7. juni 2010 (endret) [..]Har allerede registrerings form, [..] ..som også sender ut en e-post til vedkommende eller? Hvis ikke trenger du dette først (ta en titt på mail() i php). Etter det er gjort må du skrive kode som sørger for at det også sendes en lenke i e-posten, der denne vil inneholde en aktivasjons-ID som du fra før har generert utifra f.eks. de oppgitte opplysningene, kanskje et par tilfeldig tall og/eller et klokkeslettet (for å gjøre den så unik som mulig). Når brukeren så senere klikker på / taster inn den oppgitte adressen må siden din sjekke for oppgitte aktivasjons-IDer, og så gjøre et eller annet. Endret 7. juni 2010 av greygenic Lenke til kommentar
Kaptein Snus Skrevet 7. juni 2010 Del Skrevet 7. juni 2010 (endret) Når brukeren blir registrert, så regner jeg med at du lagrer all data i en database? Isåfall, bare legg til et nytt felt i brukertabellen(i databasen altså) din som du kan kalle for user_verification. Når brukeren trykker registrer, så får du PHP til å generere en md5 eller en sha1 hash, og lagrer denne også til databasen, med alle den andre informasjonen. Så bruker du mail() til å sende brukeren en mail med en link til en side på din server (som kan ta imot GET variabler), med hashen som en GET variabel. # [...] tidligere kode $result = mysql_query($sql); if(!$result) { //something went wrong, display the error echo 'Something went wrong while registering. Please try again later.'; //echo mysql_error(); //debugging purposes, uncomment when needed } else { $lastID = mysql_insert_id(); // Brukerens ID (Henter siste id som ble satt inn) $hash = sha1($lastID); // Lager en hash // DERETTER GJØR DU # 1) Lagre denne hashen til databasen # 2) Bruker mail() til å sende en mail til brukerens email, # med en link som ber brukeren om å gå til activate.php?hash=$hash. # Med andre ord -- echo "<a href='activate.php?hash=" . $hash . "'>Trykk her for å aktivere din konto</a>"; -- echo 'Din registrering er nå fullført, <a href="signin.php">logg inn</a> og start postinga :-)'; } På denne siden som skal ta imot denne hashen, må du sjekke om hashen finnes i databasen, også aktivere brukeren hvis den gjør det. Det er enkle sql spørringer, så det burde gå greit. Her er et lite hint.. <?php // File: activate.php // Desc: Aktivere brukere ved email registrering. Sjekker hash opp mot databasen. if($_GET["hash"]) { // Det ble sendt med en hash, sjekk den opp mot en database også aktiver brukeren. } else { // Hvis det ikke ble sendt med noen hash, altså hvis noen går til activate.php, uten å sende ved ?hash=jdhadaigfahfaqufauaui osv. echo "Ingen hash ble sendt med. Prøv å trykk på linken i mailen på nytt."; } ?> Endret 7. juni 2010 av Lek1 Lenke til kommentar
NicholasWalker Skrevet 8. juni 2010 Forfatter Del Skrevet 8. juni 2010 (endret) Ok, email... Kommer det inn her? // DERETTER GJØR DU # 1) Lagre denne hashen til databasen # 2) Bruker mail() til å sende en mail til brukerens email, # med en link som ber brukeren om å gå til activate.php?hash=$hash. # Med andre ord -- echo "<a href='activate.php?hash=" . $hash . "'>Trykk her for å aktivere din konto</a>"; -- echo 'Mail her?'; } Som dette?(har ikke lagt selve mailen enda..) // DERETTER GJØR DU # 1) Lagre denne hashen til databasen # 2) Bruker mail() til å sende en mail til brukerens email, # med en link som ber brukeren om å gå til activate.php?hash=$hash. # Med andre ord -- echo "<a href='activate.php?hash=" . $hash . "'>Trykk her for å aktivere din konto</a>"; -- echo '$to = '$user_mail'; $subject = 'Email verifisering på WeEx.Tk'; $message = 'Blablabla'; $headers = 'From: [email protected]' . "\r\n" . 'Reply-To: [email protected]' . "\r\n" . 'X-Mailer: PHP/' . phpversion(); mail($to, $subject, $message, $headers);'; } SI IFRA HVIS NOE ER FEIL.. OG EN TING TIL: HVA SKAL JEG SETTE INN I SQL FOR USER_VERIFICATION FELTET HER: $sql = "INSERT INTO users(user_name, user_pass, user_email ,user_date, user_level) VALUES('" . mysql_real_escape_string($_POST['user_name']) . "', '" . sha1($_POST['user_pass']) . "', '" . mysql_real_escape_string($_POST['user_email']) . "', NOW(), 0)"; Endret 8. juni 2010 av WeExClan Lenke til kommentar
Warz Skrevet 8. juni 2010 Del Skrevet 8. juni 2010 (endret) Hvis du bruker Lek1 sin løsning må du da bare oppdatere databasen med hashen... $sql = 'UPDATE users SET user_verification = '.$hash.' WHERE id = '.$lastID.''; mysql_query($sql); Nå må du da først opprette user_verification feltet i databasen din da. Siden det er snakk om en sha1() hash er det 40 tegn. Er litt usikker på om du har forstått hvordan man gjør det så jeg legger ved et bilde. Endret 8. juni 2010 av Warz Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå