tjumsen Skrevet 31. oktober 2013 Del Skrevet 31. oktober 2013 Jeg har jobbet litt med dette skriptet men jeg får bare blank skjerm når jeg klikker send nytt passord og det blir ikke sent noen epost etter jeg har klikket på knappen . noen som kan hjelpe meg og se ka som kan være gale ? <?php if(!isset($_GET['email'])){ echo'<form action="forgotpassword.php"> Skriv inn din epost adresse: <input type="text" name="email" /> <input type="submit" value="Send nytt passord" /> </form>'; exit(); } $email=$_GET['email']; include("settings.php"); connect(); $q="select email from user where email='".$email."'"; $r=mysql_query($q); $n=mysql_num_rows($r); if($n==0){echo "Finner ikke din epost adresse"; die();} $token=getRandomString(10); $q="insert into tokens (token,email) values ('".$token."','".$email."')"; mysql_query($q); function getRandomString($length) { $validCharacters = "ABCDEFGHIJKLMNPQRSTUXYVWZ123456789"; $validCharNumber = strlen($validCharacters); $result = ""; for ($i = 0; $i < $length; $i++) { $index = mt_rand(0, $validCharNumber - 1); $result .= $validCharacters[$index]; } return $result;} function mailresetlink($to,$token){ $subject = "Glemt plassord link"; $uri = 'http://'. $_SERVER['HTTP_HOST'] ; $message = ' <html> <head> <title>Glemt passord linkt</title> </head> <body> <p>Klikk denne linken for og skrive inn <a href="$uri/reset.php?token=$token">nytt passord</a></p> </body> </html> '; $headers = "MIME-Version: 1.0" . "\r\n"; $headers .= "Content-type:text/html;charset=iso-8859-1" . "\r\n"; $headers .= 'From: <[email protected]>' . "\r\n"; if(mail($to,$subject,$message,$headers)){ echo "Det er blitt sendt passord link for endring av passord til <b>".$to."</b>"; }} if(isset($_GET['email']))mailresetlink($email,$token); Lenke til kommentar
Feh Skrevet 31. oktober 2013 Del Skrevet 31. oktober 2013 (endret) Jeg orker ikke begynne en gang på hvor ufattelig uoversiktlig denne koden var. Jeg finner ingen syntaksfeil i koden, så da må det være noe som stopper før den kommer ned til der den skal sende epost (eller blir e-posten sendt, men du får alikevel hvit side uten "Det er blitt..." teksten på skjerm? Du har overhode ingen former for tilbakemeldinger på hva som kan skje. Du kan jo begynne med å gi en tilbakemelding dersom mailen ikke blir sendt. if(mail($to,$subject,$message,$headers)){ echo "Det er blitt sendt passord link for endring av passord til <b>".$to."</b>"; } else { echo "Epost ble ikke sendt"; } } if(isset($_GET['email']))mailresetlink($email,$token); Jeg er også usikker på den siste linjen der, burde ikke funksjonen være innenfor { }? if(isset($_GET['email'])) { mailresetlink($email,$token); } For å ta noen kjappe: Gjør deg selv en bjørnetjeneste ved å skrive ryddig kode. Fiks indentation, dropp variabler som $q, $n osv. og beskriv de bedre. mysql er snart deprecated, bytt ut med mysqli. Syntaksen er nesten den samme, bare med en ekstra i på slutten der. Når man skal utføre spørringer må man også legge ved tilkoblingen, så f.eks mysql_query($get_something) blir til mysqli_query($connect, $get_something). Det blir også mye mer ryddig hvis du dropper ting som if($n==0){echo "Finner ikke din epost adresse"; die();} og istedet skriver if($n==0){ echo "Finner ikke din epost adresse"; die(); } Edit: Du nevner heller ingenting om spørringene dine. Blir token lagret som den skal? Endret 31. oktober 2013 av Feh Lenke til kommentar
Crowly Skrevet 31. oktober 2013 Del Skrevet 31. oktober 2013 Ta en titt på PHPMailer, ingen grunn til å finne opp hjulet på nytt når det kommer til koden som lager og sender eposten. Selv om php funksjonen sier at eposten blir sendt så er det ingen garanti for at den kommer frem eller har blitt sendt. Problemet kan ligge i epost serveren, eller ett av de andre leddene på veien. Så sjekk loggen til epost serveren hvis du har mulighet. 1 Lenke til kommentar
forvirretoggal Skrevet 31. oktober 2013 Del Skrevet 31. oktober 2013 (endret) Dropp exit(); på linje 7 i koden, så vil det nok fungere. Endret 31. oktober 2013 av forvirretoggal Lenke til kommentar
Crowly Skrevet 31. oktober 2013 Del Skrevet 31. oktober 2013 (endret) ALDRI bruk bruker data rett i en sql, det er ett kjempe sikkerhets hull $q="select email from user where email='".$email."'";Les deg opp på sql injection, prepared statements, data validation og sanitation. Ta en titt på funksjoner som filter_var(), filter_input(), html_entities() for å nevne noen som hjelper til med dette. Dropp exit(); på linje 7 i koden, så vil det nok fungere.Det blir kun kjørt når $_GET['email'] ikke er satt. Personlig syntes jeg det er en uting å bruke exit() og die() for å avbryte ett skript, bør heller kode slik at det avslutter på normal måte, i dette tilfellet med en if else. Endret 31. oktober 2013 av Crowly Lenke til kommentar
GeirGrusom Skrevet 1. november 2013 Del Skrevet 1. november 2013 Personlig syntes jeg det er en uting å bruke exit() og die() for å avbryte ett skript, bør heller kode slik at det avslutter på normal måte, i dette tilfellet med en if else. Dette burde vært en funksjon, og følgelig burde den ha kalt if(!isset($_GET["email"])) return false;exit() og die() er uting, men gigantiske if-else-løkker synes jeg også er det ettersom de herper lesbarheten uten å tillegge noen som helst verdi. Lenke til kommentar
Gjest Skrevet 1. november 2013 Del Skrevet 1. november 2013 $q="select email from user where email='".$email."'"; Kremt, hva med å titte på SQL Injections? Lenke til kommentar
Crowly Skrevet 1. november 2013 Del Skrevet 1. november 2013 Kremt, hva med å sjekke tråden for hva som allerede er påpekt? 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å