Gå til innhold

[Løst] php glemt passord script


Anbefalte innlegg

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
Videoannonse
Annonse

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 av Feh
Lenke til kommentar

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.

  • Liker 1
Lenke til kommentar

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 av Crowly
Lenke til kommentar

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...